From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 119116 invoked by alias); 30 Nov 2016 23:06:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 119090 invoked by uid 89); 30 Nov 2016 23:06:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=HX-Envelope-From:sk:Michael, *sub, ble, HX-MS-Has-Attach:yes X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-he1eur01on0089.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (104.47.0.89) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Nov 2016 23:06:27 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com (10.172.129.19) by VI1PR0801MB2095.eurprd08.prod.outlook.com (10.173.75.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Wed, 30 Nov 2016 23:06:23 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com ([10.172.129.19]) by HE1PR0802MB2377.eurprd08.prod.outlook.com ([10.172.129.19]) with mapi id 15.01.0734.018; Wed, 30 Nov 2016 23:06:17 +0000 From: Michael Collison To: "gcc-patches@gcc.gnu.org" CC: nd , "rth@redhat.com" , James Greenhalgh Subject: [PATCH][Aarch64] Add support for overflow add and sub operations Date: Wed, 30 Nov 2016 23:06:00 -0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Michael.Collison@arm.com; x-ms-office365-filtering-correlation-id: ea0fe434-17ef-410d-546d-08d419757d68 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:VI1PR0801MB2095; x-microsoft-exchange-diagnostics: 1;VI1PR0801MB2095;7:Q33XsWAtOddqixXRdSLltwlSBjYQsrYrCv2zoCknK2VC+WY+XWgKB3SYarFDilxAjP47dCwExawCuaBo4q9FHqCIfbi7CmJjX9oeZ8UrbBFLRfdgFEnrGPWAyTS0PNLH46Gjbs6+UHjaAVsDLUo3Z7oKhYeb98PNpb61DYr1AcSeNQgSUT5k0uBajcJ1soc+BGMyp8P9q9mWqpNpQCgTS7MAlwgf0NPiihylAMg0g67ScGwklZN4+1pareqcENG8vmdFRZW7wxnt8EyXFhxjbiSgvUWkT4A3Hph03fpzaGuUWQvNxmqg16T18cXy1Kqc3oW9OTSNLGl0e5v6XdydvjfWHhQnCd0aZPPwwJKMcNMO8VNv1sJSE34zoGjHbyYipQPkRKOm/jt4sLdC6MOQtSORoqXqR+ifmfSQc6MGsGTWyTsBlOEXXdgLNDkj1ETm1ZlitJPf4JmZFueEW9TQTA== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(102415395)(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(6072148);SRVR:VI1PR0801MB2095;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB2095; x-forefront-prvs: 0142F22657 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(7916002)(189002)(199003)(377424004)(4326007)(7696004)(39450400002)(110136003)(6506003)(81156014)(54356999)(189998001)(81166006)(66066001)(5660300001)(97736004)(4001150100001)(74316002)(3846002)(77096006)(6916009)(38730400001)(39410400001)(101416001)(122556002)(2351001)(92566002)(2900100001)(68736007)(8936002)(33656002)(106356001)(8676002)(50986999)(3280700002)(86362001)(99936001)(2906002)(6116002)(7846002)(102836003)(76576001)(305945005)(2501003)(7736002)(9686002)(105586002)(3660700001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0801MB2095;H:HE1PR0802MB2377.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_HE1PR0802MB2377F28869A4E53BA8235772958C0HE1PR0802MB2377_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2016 23:06:17.0288 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB2095 X-SW-Source: 2016-11/txt/msg03119.txt.bz2 --_002_HE1PR0802MB2377F28869A4E53BA8235772958C0HE1PR0802MB2377_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 1846 Hi, This patch improves code generations for builtin arithmetic overflow operat= ions for the aarch64 backend. As an example for a simple test case such as: int f (int x, int y, int *ovf) { int res; *ovf =3D __builtin_sadd_overflow (x, y, &res); return res; } Current trunk at -O2 generates f: mov w3, w0 mov w4, 0 add w0, w0, w1 tbnz w1, #31, .L4 cmp w0, w3 blt .L3 .L2: str w4, [x2] ret .p2align 3 .L4: cmp w0, w3 ble .L2 .L3: mov w4, 1 b .L2 With the patch this now generates: f: adds w0, w0, w1 cset w1, vs str w1, [x2] ret Tested on aarch64-linux-gnu with no regressions. Okay for trunk? 2016-11-30 Michael Collison Richard Henderson * config/aarch64/aarch64-modes.def (CC_V): New. * config/aarch64/aarch64.c (aarch64_select_cc_mode): Test for signed overflow using CC_Vmode. (aarch64_get_condition_code_1): Handle CC_Vmode. * config/aarch64/aarch64.md (addv4, uaddv4): New. (addti3): Create simpler code if low part is already known to be 0. (addvti4, uaddvti4): New. (*add3_compareC_cconly_imm): New. (*add3_compareC_cconly): New. (*add3_compareC_imm): New. (*add3_compareC): Rename from add3_compare1; do not handle constants within this pattern. (*add3_compareV_cconly_imm): New. (*add3_compareV_cconly): New. (*add3_compareV_imm): New. (add3_compareV): New. (add3_carryinC, add3_carryinV): New. (*add3_carryinC_zero, *add3_carryinV_zero): New. (*add3_carryinC, *add3_carryinV): New. (subv4, usubv4): New. (subti): Handle op1 zero. (subvti4, usub4ti4): New. (*sub3_compare1_imm): New. (sub3_carryinCV): New. (*sub3_carryinCV_z1_z2, *sub3_carryinCV_z1): New. (*sub3_carryinCV_z2, *sub3_carryinCV): New --_002_HE1PR0802MB2377F28869A4E53BA8235772958C0HE1PR0802MB2377_ Content-Type: application/octet-stream; name="rth_overflow_ipreview1.patch" Content-Description: rth_overflow_ipreview1.patch Content-Disposition: attachment; filename="rth_overflow_ipreview1.patch"; size=21909; creation-date="Wed, 30 Nov 2016 23:01:26 GMT"; modification-date="Wed, 30 Nov 2016 23:01:23 GMT" Content-Transfer-Encoding: base64 Content-length: 29699 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVz LmRlZiBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZgpp bmRleCBkZTgyMjdmLi43MWMyMDY5IDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmCkBAIC0yNCw2ICsyNCw3IEBAIEND X01PREUgKENDX1NXUCk7CiBDQ19NT0RFIChDQ19OWik7ICAgIC8qIE9ubHkg TiBhbmQgWiBiaXRzIG9mIGNvbmRpdGlvbiBmbGFncyBhcmUgdmFsaWQuICAq LwogQ0NfTU9ERSAoQ0NfWik7ICAgICAvKiBPbmx5IFogYml0IG9mIGNvbmRp dGlvbiBmbGFncyBpcyB2YWxpZC4gICovCiBDQ19NT0RFIChDQ19DKTsgICAg IC8qIE9ubHkgQyBiaXQgb2YgY29uZGl0aW9uIGZsYWdzIGlzIHZhbGlkLiAg Ki8KK0NDX01PREUgKENDX1YpOyAgICAgLyogT25seSBWIGJpdCBvZiBjb25k aXRpb24gZmxhZ3MgaXMgdmFsaWQuICAqLwogCiAvKiBIYWxmLXByZWNpc2lv biBmbG9hdGluZyBwb2ludCBmb3IgX19mcDE2LiAgKi8KIEZMT0FUX01PREUg KEhGLCAyLCAwKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9h YXJjaDY0LmMgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jCmluZGV4 IDYwNzhiMTYuLmUwMjBkMjQgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFy Y2g2NC9hYXJjaDY0LmMKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNo NjQuYwpAQCAtNDMyNCw2ICs0MzI0LDEzIEBAIGFhcmNoNjRfc2VsZWN0X2Nj X21vZGUgKFJUWF9DT0RFIGNvZGUsIHJ0eCB4LCBydHggeSkKICAgICAgICYm IEdFVF9DT0RFICh5KSA9PSBaRVJPX0VYVEVORCkKICAgICByZXR1cm4gQ0Nf Q21vZGU7CiAKKyAgLyogQSB0ZXN0IGZvciBzaWduZWQgb3ZlcmZsb3cuICAq LworICBpZiAoKEdFVF9NT0RFICh4KSA9PSBESW1vZGUgfHwgR0VUX01PREUg KHgpID09IFRJbW9kZSkKKyAgICAgICYmIGNvZGUgPT0gTkUKKyAgICAgICYm IEdFVF9DT0RFICh4KSA9PSBQTFVTCisgICAgICAmJiBHRVRfQ09ERSAoeSkg PT0gU0lHTl9FWFRFTkQpCisgICAgcmV0dXJuIENDX1Ztb2RlOworCiAgIC8q IEZvciBldmVyeXRoaW5nIGVsc2UsIHJldHVybiBDQ21vZGUuICAqLwogICBy ZXR1cm4gQ0Ntb2RlOwogfQpAQCAtNDQzMCw2ICs0NDM3LDE1IEBAIGFhcmNo NjRfZ2V0X2NvbmRpdGlvbl9jb2RlXzEgKGVudW0gbWFjaGluZV9tb2RlIG1v ZGUsIGVudW0gcnR4X2NvZGUgY29tcF9jb2RlKQogCX0KICAgICAgIGJyZWFr OwogCisgICAgY2FzZSBDQ19WbW9kZToKKyAgICAgIHN3aXRjaCAoY29tcF9j b2RlKQorCXsKKwljYXNlIE5FOiByZXR1cm4gQUFSQ0g2NF9WUzsKKwljYXNl IEVROiByZXR1cm4gQUFSQ0g2NF9WQzsKKwlkZWZhdWx0OiByZXR1cm4gLTE7 CisJfQorICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgcmV0 dXJuIC0xOwogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC5tZCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0Lm1kCmluZGV4IDZhZmFmOTAuLmEwNzQzNDEgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kCisrKyBiL2djYy9jb25maWcv YWFyY2g2NC9hYXJjaDY0Lm1kCkBAIC0xNzIwLDI1ICsxNzIwLDE1NSBAQAog ICB9CiApCiAKKyhkZWZpbmVfZXhwYW5kICJhZGR2PG1vZGU+NCIKKyAgWyht YXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kOkdQSSAyICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kIDMgIiIpXQorICAiIgoreworICBlbWl0X2luc24gKGdl bl9hZGQ8bW9kZT4zX2NvbXBhcmVWIChvcGVyYW5kc1swXSwgb3BlcmFuZHNb MV0sIG9wZXJhbmRzWzJdKSk7CisKKyAgcnR4IHg7CisgIHggPSBnZW5fcnR4 X05FIChWT0lEbW9kZSwgZ2VuX3J0eF9SRUcgKENDX1Ztb2RlLCBDQ19SRUdO VU0pLCBjb25zdDBfcnR4KTsKKyAgeCA9IGdlbl9ydHhfSUZfVEhFTl9FTFNF IChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5fcnR4X0xBQkVMX1JFRiAoVk9J RG1vZGUsIG9wZXJhbmRzWzNdKSwKKwkJCSAgICBwY19ydHgpOworICBlbWl0 X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0eCwgeCkpOworICBET05F OworfSkKKworKGRlZmluZV9leHBhbmQgInVhZGR2PG1vZGU+NCIKKyAgWyht YXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kOkdQSSAyICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kIDMgIiIpXQorICAiIgoreworICBlbWl0X2luc24gKGdl bl9hZGQ8bW9kZT4zX2NvbXBhcmVDIChvcGVyYW5kc1swXSwgb3BlcmFuZHNb MV0sIG9wZXJhbmRzWzJdKSk7CisKKyAgcnR4IHg7CisgIHggPSBnZW5fcnR4 X05FIChWT0lEbW9kZSwgZ2VuX3J0eF9SRUcgKENDX0Ntb2RlLCBDQ19SRUdO VU0pLCBjb25zdDBfcnR4KTsKKyAgeCA9IGdlbl9ydHhfSUZfVEhFTl9FTFNF IChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5fcnR4X0xBQkVMX1JFRiAoVk9J RG1vZGUsIG9wZXJhbmRzWzNdKSwKKwkJCSAgICBwY19ydHgpOworICBlbWl0 X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0eCwgeCkpOworICBET05F OworfSkKKworCiAoZGVmaW5lX2V4cGFuZCAiYWRkdGkzIgogICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpUSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKIAko cGx1czpUSSAobWF0Y2hfb3BlcmFuZDpUSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiIikKLQkJIChtYXRjaF9vcGVyYW5kOlRJIDIgInJlZ2lzdGVyX29wZXJh bmQiICIiKSkpXQorCQkgKG1hdGNoX29wZXJhbmQ6VEkgMiAiYWFyY2g2NF9y ZWdfb3JfaW1tIiAiIikpKV0KICAgIiIKIHsKLSAgcnR4IGxvdyA9IGdlbl9y ZWdfcnR4IChESW1vZGUpOwotICBlbWl0X2luc24gKGdlbl9hZGRkaTNfY29t cGFyZUMgKGxvdywgZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3BlcmFuZHNbMV0p LAotCQkJCSAgZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3BlcmFuZHNbMl0pKSk7 CisgIHJ0eCBsMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICBydHggbDEg PSBnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1sxXSk7CisgIHJ0eCBs MiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0s IFRJbW9kZSwKKwkJCQlzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9kZSwg VEltb2RlKSk7CisgIHJ0eCBoMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOwor ICBydHggaDEgPSBnZW5faGlnaHBhcnQgKERJbW9kZSwgb3BlcmFuZHNbMV0p OworICBydHggaDIgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9w ZXJhbmRzWzJdLCBUSW1vZGUsCisJCQkJc3VicmVnX2hpZ2hwYXJ0X29mZnNl dCAoREltb2RlLCBUSW1vZGUpKTsKIAotICBydHggaGlnaCA9IGdlbl9yZWdf cnR4IChESW1vZGUpOwotICBlbWl0X2luc24gKGdlbl9hZGRkaTNfY2Fycnlp biAoaGlnaCwgZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzFdKSwK LQkJCQkgZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzJdKSkpOwor ICBpZiAobDIgPT0gY29uc3QwX3J0eCkKKyAgICB7CisgICAgICBsMCA9IGwx OworICAgICAgaWYgKCFhYXJjaDY0X3BsdXNsb25nX29wZXJhbmQgKGgyLCBE SW1vZGUpKQorCWgyID0gZm9yY2VfcmVnIChESW1vZGUsIGgyKTsKKyAgICAg IGVtaXRfaW5zbiAoZ2VuX2FkZGRpMyAoaDAsIGgxLCBoMikpOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FkZGRpM19j b21wYXJlQyAobDAsIGwxLCBmb3JjZV9yZWcgKERJbW9kZSwgbDIpKSk7Cisg ICAgICBlbWl0X2luc24gKGdlbl9hZGRkaTNfY2FycnlpbiAoaDAsIGgxLCBm b3JjZV9yZWcgKERJbW9kZSwgaDIpKSk7CisgICAgfQorCisgIGVtaXRfbW92 ZV9pbnNuIChnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1swXSksIGww KTsKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9oaWdocGFydCAoREltb2RlLCBv cGVyYW5kc1swXSksIGgwKTsKIAotICBlbWl0X21vdmVfaW5zbiAoZ2VuX2xv d3BhcnQgKERJbW9kZSwgb3BlcmFuZHNbMF0pLCBsb3cpOwotICBlbWl0X21v dmVfaW5zbiAoZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzBdKSwg aGlnaCk7CiAgIERPTkU7CiB9KQogCisoZGVmaW5lX2V4cGFuZCAiYWRkdnRp NCIKKyAgWyhtYXRjaF9vcGVyYW5kOlRJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICIiKQorICAgKG1hdGNoX29wZXJhbmQ6VEkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgIiIpCisgICAobWF0Y2hfb3BlcmFuZDpUSSAyICJhYXJjaDY0X3JlZ19v cl9pbW0iICIiKQorICAgKG1hdGNoX29wZXJhbmQgMyAiIildCisgICIiCit7 CisgIHJ0eCBsMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICBydHggbDEg PSBnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1sxXSk7CisgIHJ0eCBs MiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0s IFRJbW9kZSwKKwkJCQlzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9kZSwg VEltb2RlKSk7CisgIHJ0eCBoMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOwor ICBydHggaDEgPSBnZW5faGlnaHBhcnQgKERJbW9kZSwgb3BlcmFuZHNbMV0p OworICBydHggaDIgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9w ZXJhbmRzWzJdLCBUSW1vZGUsCisJCQkJc3VicmVnX2hpZ2hwYXJ0X29mZnNl dCAoREltb2RlLCBUSW1vZGUpKTsKKworICBpZiAobDIgPT0gY29uc3QwX3J0 eCkKKyAgICB7CisgICAgICBsMCA9IGwxOworICAgICAgZW1pdF9pbnNuIChn ZW5fYWRkZGkzX2NvbXBhcmVWIChoMCwgaDEsIGZvcmNlX3JlZyAoREltb2Rl LCBoMikpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlbWl0X2lu c24gKGdlbl9hZGRkaTNfY29tcGFyZUMgKGwwLCBsMSwgZm9yY2VfcmVnIChE SW1vZGUsIGwyKSkpOworICAgICAgZW1pdF9pbnNuIChnZW5fYWRkZGkzX2Nh cnJ5aW5WIChoMCwgaDEsIGZvcmNlX3JlZyAoREltb2RlLCBoMikpKTsKKyAg ICB9CisKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9sb3dwYXJ0IChESW1vZGUs IG9wZXJhbmRzWzBdKSwgbDApOworICBlbWl0X21vdmVfaW5zbiAoZ2VuX2hp Z2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzBdKSwgaDApOworCisgIHJ0eCB4 OworICB4ID0gZ2VuX3J0eF9ORSAoVk9JRG1vZGUsIGdlbl9ydHhfUkVHIChD Q19WbW9kZSwgQ0NfUkVHTlVNKSwgY29uc3QwX3J0eCk7CisgIHggPSBnZW5f cnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1vZGUsIHgsCisJCQkgICAgZ2VuX3J0 eF9MQUJFTF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kc1szXSksCisJCQkgICAg cGNfcnR4KTsKKyAgZW1pdF9qdW1wX2luc24gKGdlbl9ydHhfU0VUIChwY19y dHgsIHgpKTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhwYW5kICJ1YWRk dnRpNCIKKyAgWyhtYXRjaF9vcGVyYW5kOlRJIDAgInJlZ2lzdGVyX29wZXJh bmQiICIiKQorICAgKG1hdGNoX29wZXJhbmQ6VEkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpCisgICAobWF0Y2hfb3BlcmFuZDpUSSAyICJhYXJjaDY0X3Jl Z19vcl9pbW0iICIiKQorICAgKG1hdGNoX29wZXJhbmQgMyAiIildCisgICIi Cit7CisgIHJ0eCBsMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICBydHgg bDEgPSBnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1sxXSk7CisgIHJ0 eCBsMiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3BlcmFuZHNb Ml0sIFRJbW9kZSwKKwkJCQlzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9k ZSwgVEltb2RlKSk7CisgIHJ0eCBoMCA9IGdlbl9yZWdfcnR4IChESW1vZGUp OworICBydHggaDEgPSBnZW5faGlnaHBhcnQgKERJbW9kZSwgb3BlcmFuZHNb MV0pOworICBydHggaDIgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUs IG9wZXJhbmRzWzJdLCBUSW1vZGUsCisJCQkJc3VicmVnX2hpZ2hwYXJ0X29m ZnNldCAoREltb2RlLCBUSW1vZGUpKTsKKworICBpZiAobDIgPT0gY29uc3Qw X3J0eCkKKyAgICB7CisgICAgICBsMCA9IGwxOworICAgICAgZW1pdF9pbnNu IChnZW5fYWRkZGkzX2NvbXBhcmVDIChoMCwgaDEsIGZvcmNlX3JlZyAoRElt b2RlLCBoMikpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlbWl0 X2luc24gKGdlbl9hZGRkaTNfY29tcGFyZUMgKGwwLCBsMSwgZm9yY2VfcmVn IChESW1vZGUsIGwyKSkpOworICAgICAgZW1pdF9pbnNuIChnZW5fYWRkZGkz X2NhcnJ5aW5DIChoMCwgaDEsIGZvcmNlX3JlZyAoREltb2RlLCBoMikpKTsK KyAgICB9CisKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9sb3dwYXJ0IChESW1v ZGUsIG9wZXJhbmRzWzBdKSwgbDApOworICBlbWl0X21vdmVfaW5zbiAoZ2Vu X2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzBdKSwgaDApOworCisgIHJ0 eCB4OworICB4ID0gZ2VuX3J0eF9ORSAoVk9JRG1vZGUsIGdlbl9ydHhfUkVH IChDQ19DbW9kZSwgQ0NfUkVHTlVNKSwgY29uc3QwX3J0eCk7CisgIHggPSBn ZW5fcnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1vZGUsIHgsCisJCQkgICAgZ2Vu X3J0eF9MQUJFTF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kc1szXSksCisJCQkg ICAgcGNfcnR4KTsKKyAgZW1pdF9qdW1wX2luc24gKGdlbl9ydHhfU0VUIChw Y19ydHgsIHgpKTsKKyAgIERPTkU7CisgfSkKKwogKGRlZmluZV9pbnNuICJh ZGQ8bW9kZT4zX2NvbXBhcmUwIgogICBbKHNldCAocmVnOkNDX05aIENDX1JF R05VTSkKIAkoY29tcGFyZTpDQ19OWgpAQCAtMTgzNyw2ICsxOTY3LDY2IEBA CiAgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVzX3NyZWciKV0KICkKIAorOzsg Tm90ZSB0aGF0IHNpbmNlIHdlJ3JlIHNpZ24tZXh0ZW5kaW5nLCBtYXRjaCB0 aGUgaW1tZWRpYXRlIGluIEdQSQorOzsgcmF0aGVyIHRoYW4gaW4gRFdJLiAg U2luY2UgQ09OU1RfSU5UIGlzIG1vZGVsZXNzLCB0aGlzIHdvcmtzIGZpbmUu CisoZGVmaW5lX2luc24gIiphZGQ8bW9kZT4zX2NvbXBhcmVWX2Njb25seV9p bW0iCisgIFsoc2V0IChyZWc6Q0NfViBDQ19SRUdOVU0pCisJKG5lOkNDX1YK KwkgIChwbHVzOjxEV0k+CisJICAgIChzaWduX2V4dGVuZDo8RFdJPiAobWF0 Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpKQor CSAgICAobWF0Y2hfb3BlcmFuZDpHUEkgMSAiYWFyY2g2NF9wbHVzX2ltbWVk aWF0ZSIgIkksSiIpKQorCSAgKHNpZ25fZXh0ZW5kOjxEV0k+IChwbHVzOkdQ SSAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpKSkpXQorICAiIgorICAi QAorICBjbW5cXHQlPHc+MCwgJTx3PjEKKyAgY21wXFx0JTx3PjAsICMlbjEi CisgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVzX2ltbSIpXQorKQorCisoZGVm aW5lX2luc24gIiphZGQ8bW9kZT4zX2NvbXBhcmVWX2Njb25seSIKKyAgWyhz ZXQgKHJlZzpDQ19WIENDX1JFR05VTSkKKwkobmU6Q0NfVgorCSAgKHBsdXM6 PERXST4KKwkgICAgKHNpZ25fZXh0ZW5kOjxEV0k+IChtYXRjaF9vcGVyYW5k OkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorCSAgICAoc2lnbl9l eHRlbmQ6PERXST4gKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICJyIikpKQorCSAgKHNpZ25fZXh0ZW5kOjxEV0k+IChwbHVzOkdQ SSAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpKSkpXQorICAiIgorICAi Y21uXFx0JTx3PjAsICU8dz4xIgorICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1 c19zcmVnIildCispCisKKyhkZWZpbmVfaW5zbiAiKmFkZDxtb2RlPjNfY29t cGFyZVZfaW1tIgorICBbKHNldCAocmVnOkNDX1YgQ0NfUkVHTlVNKQorCShu ZTpDQ19WCisJICAocGx1czo8RFdJPgorCSAgICAoc2lnbl9leHRlbmQ6PERX ST4KKwkgICAgICAobWF0Y2hfb3BlcmFuZDpHUEkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgInIsciIpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpHUEkgMiAiYWFy Y2g2NF9wbHVzX2ltbWVkaWF0ZSIgIkksSiIpKQorCSAgKHNpZ25fZXh0ZW5k OjxEV0k+CisJICAgIChwbHVzOkdQSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9k dXAgMikpKSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIsciIpCisJKHBsdXM6R1BJIChtYXRjaF9kdXAg MSkgKG1hdGNoX2R1cCAyKSkpXQorICAgIiIKKyAgICJACisgICBhZGRzXFx0 JTx3PjAsICU8dz4xLCAlPHc+MgorICAgc3Vic1xcdCU8dz4wLCAlPHc+MSwg IyVuMiIKKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdXNfaW1tLGFsdXNfaW1t IildCispCisKKyhkZWZpbmVfaW5zbiAiYWRkPG1vZGU+M19jb21wYXJlViIK KyAgWyhzZXQgKHJlZzpDQ19WIENDX1JFR05VTSkKKwkobmU6Q0NfVgorCSAg KHBsdXM6PERXST4KKwkgICAgKHNpZ25fZXh0ZW5kOjxEV0k+IChtYXRjaF9v cGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorCSAgICAo c2lnbl9leHRlbmQ6PERXST4gKG1hdGNoX29wZXJhbmQ6R1BJIDIgInJlZ2lz dGVyX29wZXJhbmQiICJyIikpKQorCSAgKHNpZ25fZXh0ZW5kOjxEV0k+IChw bHVzOkdQSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKSkpCisgICAo c2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIiKQorCShwbHVzOkdQSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikp KV0KKyAgIiIKKyAgImFkZHNcXHQlPHc+MCwgJTx3PjEsICU8dz4yIgorICBb KHNldF9hdHRyICJ0eXBlIiAiYWx1c19zcmVnIildCisgKQorCiAoZGVmaW5l X2luc24gIiphZGRzX3NoaWZ0X2ltbV88bW9kZT4iCiAgIFsoc2V0IChyZWc6 Q0NfTlogQ0NfUkVHTlVNKQogCShjb21wYXJlOkNDX05aCkBAIC0yMTk2LDYg KzIzODYsMTM4IEBACiAgIFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIild CiApCiAKKyhkZWZpbmVfZXhwYW5kICJhZGQ8bW9kZT4zX2NhcnJ5aW5DIgor ICBbKHBhcmFsbGVsCisgICAgIFsoc2V0IChtYXRjaF9kdXAgMykKKwkgICAo bmU6Q0NfQworCSAgICAgKHBsdXM6PERXST4KKwkgICAgICAgKHBsdXM6PERX ST4KKwkJIChtYXRjaF9kdXAgNCkKKwkJICh6ZXJvX2V4dGVuZDo8RFdJPgor CQkgICAobWF0Y2hfb3BlcmFuZDpHUEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg InIiKSkpCisJICAgICAgICh6ZXJvX2V4dGVuZDo8RFdJPgorCQkgKG1hdGNo X29wZXJhbmQ6R1BJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorCSAg ICh6ZXJvX2V4dGVuZDo8RFdJPgorCSAgICAgKHBsdXM6R1BJCisJICAgICAg IChwbHVzOkdQSSAobWF0Y2hfZHVwIDUpIChtYXRjaF9kdXAgMSkpCisJICAg ICAgIChtYXRjaF9kdXAgMikpKSkpCisgICAgICAoc2V0IChtYXRjaF9vcGVy YW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkgICAocGx1czpHUEkK KwkgICAgIChwbHVzOkdQSSAobWF0Y2hfZHVwIDUpIChtYXRjaF9kdXAgMSkp CisJICAgICAobWF0Y2hfZHVwIDIpKSldKV0KKyAgICIiCit7CisgIG9wZXJh bmRzWzNdID0gZ2VuX3J0eF9SRUcgKENDX0Ntb2RlLCBDQ19SRUdOVU0pOwor ICBvcGVyYW5kc1s0XSA9IGdlbl9ydHhfTkUgKDxEV0k+bW9kZSwgb3BlcmFu ZHNbM10sIGNvbnN0MF9ydHgpOworICBvcGVyYW5kc1s1XSA9IGdlbl9ydHhf TkUgKDxNT0RFPm1vZGUsIG9wZXJhbmRzWzNdLCBjb25zdDBfcnR4KTsKK30p CisKKyhkZWZpbmVfaW5zbiAiKmFkZDxtb2RlPjNfY2FycnlpbkNfemVybyIK KyAgWyhzZXQgKHJlZzpDQ19DIENDX1JFR05VTSkKKwkobmU6Q0NfQworCSAg KHBsdXM6PERXST4KKwkgICAgKG1hdGNoX29wZXJhbmQ6PERXST4gMiAiYWFy Y2g2NF9jYXJyeV9vcGVyYXRpb24iICIiKQorCSAgICAoemVyb19leHRlbmQ6 PERXST4gKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICJyIikpKQorCSAgKHplcm9fZXh0ZW5kOjxEV0k+CisJICAgIChwbHVzOkdQ SQorCSAgICAgIChtYXRjaF9vcGVyYW5kOkdQSSAzICJhYXJjaDY0X2NhcnJ5 X29wZXJhdGlvbiIgIiIpCisJICAgICAgKG1hdGNoX2R1cCAxKSkpKSkKKyAg IChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJlZ2lzdGVyX29wZXJhbmQi KQorCShwbHVzOkdQSSAobWF0Y2hfZHVwIDMpIChtYXRjaF9kdXAgMSkpKV0K KyAgICIiCisgICAiYWRjc1xcdCU8dz4wLCAlPHc+MSwgPHc+enIiCisgIFso c2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIildCispCisKKyhkZWZpbmVfaW5z biAiKmFkZDxtb2RlPjNfY2FycnlpbkMiCisgIFsoc2V0IChyZWc6Q0NfQyBD Q19SRUdOVU0pCisJKG5lOkNDX0MKKwkgIChwbHVzOjxEV0k+CisJICAgIChw bHVzOjxEV0k+CisJICAgICAgKG1hdGNoX29wZXJhbmQ6PERXST4gMyAiYWFy Y2g2NF9jYXJyeV9vcGVyYXRpb24iICIiKQorCSAgICAgICh6ZXJvX2V4dGVu ZDo8RFdJPiAobWF0Y2hfb3BlcmFuZDpHUEkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkpCisJICAgICh6ZXJvX2V4dGVuZDo8RFdJPiAobWF0Y2hfb3Bl cmFuZDpHUEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisJICAoemVy b19leHRlbmQ6PERXST4KKwkgICAgKHBsdXM6R1BJCisJICAgICAgKHBsdXM6 R1BJCisJCShtYXRjaF9vcGVyYW5kOkdQSSA0ICJhYXJjaDY0X2NhcnJ5X29w ZXJhdGlvbiIgIiIpCisJCShtYXRjaF9kdXAgMSkpCisJICAgICAgKG1hdGNo X2R1cCAyKSkpKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJl Z2lzdGVyX29wZXJhbmQiKQorCShwbHVzOkdQSQorCSAgKHBsdXM6R1BJICht YXRjaF9kdXAgNCkgKG1hdGNoX2R1cCAxKSkKKwkgIChtYXRjaF9kdXAgMikp KV0KKyAgICIiCisgICAiYWRjc1xcdCU8dz4wLCAlPHc+MSwgJTx3PjIiCisg IFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIildCispCisKKyhkZWZpbmVf ZXhwYW5kICJhZGQ8bW9kZT4zX2NhcnJ5aW5WIgorICBbKHBhcmFsbGVsCisg ICAgIFsoc2V0IChyZWc6Q0NfViBDQ19SRUdOVU0pCisJICAgKG5lOkNDX1YK KwkgICAgIChwbHVzOjxEV0k+CisJICAgICAgIChwbHVzOjxEV0k+CisJCSAo bWF0Y2hfZHVwIDMpCisJCSAoc2lnbl9leHRlbmQ6PERXST4KKwkJICAgKG1h dGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQor CSAgICAgICAoc2lnbl9leHRlbmQ6PERXST4KKwkJIChtYXRjaF9vcGVyYW5k OkdQSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKwkgICAoc2lnbl9l eHRlbmQ6PERXST4KKwkgICAgIChwbHVzOkdQSQorCSAgICAgICAocGx1czpH UEkgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDEpKQorCSAgICAgICAobWF0 Y2hfZHVwIDIpKSkpKQorICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpHUEkg MCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgKHBsdXM6R1BJCisJICAgICAo cGx1czpHUEkgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDEpKQorCSAgICAg KG1hdGNoX2R1cCAyKSkpXSldCisgICAiIgoreworICBydHggY2MgPSBnZW5f cnR4X1JFRyAoQ0NfQ21vZGUsIENDX1JFR05VTSk7CisgIG9wZXJhbmRzWzNd ID0gZ2VuX3J0eF9ORSAoPERXST5tb2RlLCBjYywgY29uc3QwX3J0eCk7Cisg IG9wZXJhbmRzWzRdID0gZ2VuX3J0eF9ORSAoPE1PREU+bW9kZSwgY2MsIGNv bnN0MF9ydHgpOworfSkKKworKGRlZmluZV9pbnNuICIqYWRkPG1vZGU+M19j YXJyeWluVl96ZXJvIgorICBbKHNldCAocmVnOkNDX1YgQ0NfUkVHTlVNKQor CShuZTpDQ19WCisJICAocGx1czo8RFdJPgorCSAgICAobWF0Y2hfb3BlcmFu ZDo8RFdJPiAyICJhYXJjaDY0X2NhcnJ5X29wZXJhdGlvbiIgIiIpCisJICAg IChzaWduX2V4dGVuZDo8RFdJPiAobWF0Y2hfb3BlcmFuZDpHUEkgMSAicmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkpCisJICAoc2lnbl9leHRlbmQ6PERXST4K KwkgICAgKHBsdXM6R1BJCisJICAgICAgKG1hdGNoX29wZXJhbmQ6R1BJIDMg ImFhcmNoNjRfY2Fycnlfb3BlcmF0aW9uIiAiIikKKwkgICAgICAobWF0Y2hf ZHVwIDEpKSkpKQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVn aXN0ZXJfb3BlcmFuZCIpCisJKHBsdXM6R1BJIChtYXRjaF9kdXAgMykgKG1h dGNoX2R1cCAxKSkpXQorICAgIiIKKyAgICJhZGNzXFx0JTx3PjAsICU8dz4x LCA8dz56ciIKKyAgWyhzZXRfYXR0ciAidHlwZSIgImFkY19yZWciKV0KKykK KworKGRlZmluZV9pbnNuICIqYWRkPG1vZGU+M19jYXJyeWluViIKKyAgWyhz ZXQgKHJlZzpDQ19WIENDX1JFR05VTSkKKwkobmU6Q0NfVgorCSAgKHBsdXM6 PERXST4KKwkgICAgKHBsdXM6PERXST4KKwkgICAgICAobWF0Y2hfb3BlcmFu ZDo8RFdJPiAzICJhYXJjaDY0X2NhcnJ5X29wZXJhdGlvbiIgIiIpCisJICAg ICAgKHNpZ25fZXh0ZW5kOjxEV0k+IChtYXRjaF9vcGVyYW5kOkdQSSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKwkgICAgKHNpZ25fZXh0ZW5kOjxE V0k+IChtYXRjaF9vcGVyYW5kOkdQSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAi ciIpKSkKKwkgIChzaWduX2V4dGVuZDo8RFdJPgorCSAgICAocGx1czpHUEkK KwkgICAgICAocGx1czpHUEkKKwkJKG1hdGNoX29wZXJhbmQ6R1BJIDQgImFh cmNoNjRfY2Fycnlfb3BlcmF0aW9uIiAiIikKKwkJKG1hdGNoX2R1cCAxKSkK KwkgICAgICAobWF0Y2hfZHVwIDIpKSkpKQorICAgKHNldCAobWF0Y2hfb3Bl cmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKHBsdXM6R1BJCisJ ICAocGx1czpHUEkgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDEpKQorCSAg KG1hdGNoX2R1cCAyKSkpXQorICAgIiIKKyAgICJhZGNzXFx0JTx3PjAsICU8 dz4xLCAlPHc+MiIKKyAgWyhzZXRfYXR0ciAidHlwZSIgImFkY19yZWciKV0K KykKKwogKGRlZmluZV9pbnNuICIqYWRkX3V4dDxtb2RlPl9zaGlmdDIiCiAg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXJrIikKIAkocGx1czpHUEkgKGFuZDpHUEkKQEAgLTIyOTIsMjIgKzI2 MTQsMTU4IEBACiAgICAoc2V0X2F0dHIgInNpbWQiICIqLHllcyIpXQogKQog CisoZGVmaW5lX2V4cGFuZCAic3Vidjxtb2RlPjQiCisgIFsobWF0Y2hfb3Bl cmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0Y2hfb3Bl cmFuZDpHUEkgMSAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisgICAobWF0Y2hf b3BlcmFuZDpHUEkgMiAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisgICAobWF0 Y2hfb3BlcmFuZCAzICIiKV0KKyAgIiIKK3sKKyAgZW1pdF9pbnNuIChnZW5f c3ViPG1vZGU+M19jb21wYXJlMSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFd LCBvcGVyYW5kc1syXSkpOworCisgIHJ0eCB4OworICB4ID0gZ2VuX3J0eF9O RSAoVk9JRG1vZGUsIGdlbl9ydHhfUkVHIChDQ19WbW9kZSwgQ0NfUkVHTlVN KSwgY29uc3QwX3J0eCk7CisgIHggPSBnZW5fcnR4X0lGX1RIRU5fRUxTRSAo Vk9JRG1vZGUsIHgsCisJCQkgICAgZ2VuX3J0eF9MQUJFTF9SRUYgKFZPSURt b2RlLCBvcGVyYW5kc1szXSksCisJCQkgICAgcGNfcnR4KTsKKyAgZW1pdF9q dW1wX2luc24gKGdlbl9ydHhfU0VUIChwY19ydHgsIHgpKTsKKyAgRE9ORTsK K30pCisKKyhkZWZpbmVfZXhwYW5kICJ1c3Vidjxtb2RlPjQiCisgIFsobWF0 Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0 Y2hfb3BlcmFuZDpHUEkgMSAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisgICAo bWF0Y2hfb3BlcmFuZDpHUEkgMiAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisg ICAobWF0Y2hfb3BlcmFuZCAzICIiKV0KKyAgIiIKK3sKKyAgZW1pdF9pbnNu IChnZW5fc3ViPG1vZGU+M19jb21wYXJlMSAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSkpOworCisgIHJ0eCB4OworICB4ID0gZ2Vu X3J0eF9MVFUgKFZPSURtb2RlLCBnZW5fcnR4X1JFRyAoQ0Ntb2RlLCBDQ19S RUdOVU0pLCBjb25zdDBfcnR4KTsKKyAgeCA9IGdlbl9ydHhfSUZfVEhFTl9F TFNFIChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5fcnR4X0xBQkVMX1JFRiAo Vk9JRG1vZGUsIG9wZXJhbmRzWzNdKSwKKwkJCSAgICBwY19ydHgpOworICBl bWl0X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0eCwgeCkpOworICBE T05FOworfSkKKwogKGRlZmluZV9leHBhbmQgInN1YnRpMyIKICAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6VEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCi0J KG1pbnVzOlRJIChtYXRjaF9vcGVyYW5kOlRJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIiKQorCShtaW51czpUSSAobWF0Y2hfb3BlcmFuZDpUSSAxICJhYXJj aDY0X3JlZ19vcl96ZXJvIiAiIikKIAkJICAobWF0Y2hfb3BlcmFuZDpUSSAy ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpKV0KICAgIiIKIHsKLSAgcnR4IGxv dyA9IGdlbl9yZWdfcnR4IChESW1vZGUpOwotICBlbWl0X2luc24gKGdlbl9z dWJkaTNfY29tcGFyZTEgKGxvdywgZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3Bl cmFuZHNbMV0pLAotCQkJCSAgZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3BlcmFu ZHNbMl0pKSk7CisgIHJ0eCBsMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOwor ICBydHggbDEgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9wZXJh bmRzWzFdLCBUSW1vZGUsCisJCQkJc3VicmVnX2xvd3BhcnRfb2Zmc2V0IChE SW1vZGUsIFRJbW9kZSkpOworICBydHggbDIgPSBnZW5fbG93cGFydCAoRElt b2RlLCBvcGVyYW5kc1syXSk7CisgIHJ0eCBoMCA9IGdlbl9yZWdfcnR4IChE SW1vZGUpOworICBydHggaDEgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1v ZGUsIG9wZXJhbmRzWzFdLCBUSW1vZGUsCisJCQkJc3VicmVnX2hpZ2hwYXJ0 X29mZnNldCAoREltb2RlLCBUSW1vZGUpKTsKKyAgcnR4IGgyID0gZ2VuX2hp Z2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzJdKTsKIAotICBydHggaGlnaCA9 IGdlbl9yZWdfcnR4IChESW1vZGUpOwotICBlbWl0X2luc24gKGdlbl9zdWJk aTNfY2FycnlpbiAoaGlnaCwgZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJh bmRzWzFdKSwKLQkJCQkgZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJhbmRz WzJdKSkpOworICBlbWl0X2luc24gKGdlbl9zdWJkaTNfY29tcGFyZTEgKGww LCBsMSwgbDIpKTsKKyAgZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NhcnJ5aW4g KGgwLCBoMSwgaDIpKTsKIAotICBlbWl0X21vdmVfaW5zbiAoZ2VuX2xvd3Bh cnQgKERJbW9kZSwgb3BlcmFuZHNbMF0pLCBsb3cpOwotICBlbWl0X21vdmVf aW5zbiAoZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzBdKSwgaGln aCk7CisgIGVtaXRfbW92ZV9pbnNuIChnZW5fbG93cGFydCAoREltb2RlLCBv cGVyYW5kc1swXSksIGwwKTsKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9oaWdo cGFydCAoREltb2RlLCBvcGVyYW5kc1swXSksIGgwKTsKKyAgRE9ORTsKK30p CisKKyhkZWZpbmVfZXhwYW5kICJzdWJ2dGk0IgorICBbKG1hdGNoX29wZXJh bmQ6VEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0Y2hfb3BlcmFu ZDpUSSAxICJhYXJjaDY0X3JlZ19vcl96ZXJvIikKKyAgIChtYXRjaF9vcGVy YW5kOlRJIDIgImFhcmNoNjRfcmVnX29yX2ltbSIpCisgICAobWF0Y2hfb3Bl cmFuZCAzICIiKV0KKyAgIiIKK3sKKyAgcnR4IGwwID0gZ2VuX3JlZ19ydHgg KERJbW9kZSk7CisgIHJ0eCBsMSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJ bW9kZSwgb3BlcmFuZHNbMV0sIFRJbW9kZSwKKwkJCQlzdWJyZWdfbG93cGFy dF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7CisgIHJ0eCBsMiA9IHNpbXBs aWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0sIFRJbW9kZSwK KwkJCQlzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7 CisgIHJ0eCBoMCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICBydHggaDEg PSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9wZXJhbmRzWzFdLCBU SW1vZGUsCisJCQkJc3VicmVnX2hpZ2hwYXJ0X29mZnNldCAoREltb2RlLCBU SW1vZGUpKTsKKyAgcnR4IGgyID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoRElt b2RlLCBvcGVyYW5kc1syXSwgVEltb2RlLAorCQkJCXN1YnJlZ19oaWdocGFy dF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7CisKKyAgaWYgKGwyID09IGNv bnN0MF9ydHgpCisgICAgeworICAgICAgbDAgPSBsMTsKKyAgICAgIGVtaXRf aW5zbiAoZ2VuX3N1YmRpM19jb21wYXJlMSAoaDAsIGgxLCBmb3JjZV9yZWcg KERJbW9kZSwgaDIpKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg aWYgKENPTlNUX0lOVF9QIChsMikpCisJeworCSAgbDIgPSBmb3JjZV9yZWcg KERJbW9kZSwgR0VOX0lOVCAoLVVJTlRWQUwgKGwyKSkpOworCSAgaDIgPSBm b3JjZV9yZWcgKERJbW9kZSwgaDIpOworCSAgZW1pdF9pbnNuIChnZW5fYWRk ZGkzX2NvbXBhcmVDIChsMCwgbDEsIGwyKSk7CisJfQorICAgICAgZWxzZQor CWVtaXRfaW5zbiAoZ2VuX3N1YmRpM19jb21wYXJlMSAobDAsIGwxLCBsMikp OworICAgICAgZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NhcnJ5aW5DViAoaDAs IGZvcmNlX3JlZyAoREltb2RlLCBoMSksIGgyKSk7CisgICAgfQorCisgIGVt aXRfbW92ZV9pbnNuIChnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1sw XSksIGwwKTsKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9oaWdocGFydCAoRElt b2RlLCBvcGVyYW5kc1swXSksIGgwKTsKKworICBydHggeDsKKyAgeCA9IGdl bl9ydHhfTkUgKFZPSURtb2RlLCBnZW5fcnR4X1JFRyAoQ0NfVm1vZGUsIEND X1JFR05VTSksIGNvbnN0MF9ydHgpOworICB4ID0gZ2VuX3J0eF9JRl9USEVO X0VMU0UgKFZPSURtb2RlLCB4LAorCQkJICAgIGdlbl9ydHhfTEFCRUxfUkVG IChWT0lEbW9kZSwgb3BlcmFuZHNbM10pLAorCQkJICAgIHBjX3J0eCk7Cisg IGVtaXRfanVtcF9pbnNuIChnZW5fcnR4X1NFVCAocGNfcnR4LCB4KSk7Cisg IERPTkU7Cit9KQorCisoZGVmaW5lX2V4cGFuZCAidXN1YnZ0aTQiCisgIFso bWF0Y2hfb3BlcmFuZDpUSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICht YXRjaF9vcGVyYW5kOlRJIDEgImFhcmNoNjRfcmVnX29yX3plcm8iKQorICAg KG1hdGNoX29wZXJhbmQ6VEkgMiAiYWFyY2g2NF9yZWdfb3JfaW1tIikKKyAg IChtYXRjaF9vcGVyYW5kIDMgIiIpXQorICAiIgoreworICBydHggbDAgPSBn ZW5fcmVnX3J0eCAoREltb2RlKTsKKyAgcnR4IGwxID0gc2ltcGxpZnlfZ2Vu X3N1YnJlZyAoREltb2RlLCBvcGVyYW5kc1sxXSwgVEltb2RlLAorCQkJCXN1 YnJlZ19sb3dwYXJ0X29mZnNldCAoREltb2RlLCBUSW1vZGUpKTsKKyAgcnR4 IGwyID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoREltb2RlLCBvcGVyYW5kc1sy XSwgVEltb2RlLAorCQkJCXN1YnJlZ19sb3dwYXJ0X29mZnNldCAoREltb2Rl LCBUSW1vZGUpKTsKKyAgcnR4IGgwID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7 CisgIHJ0eCBoMSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3Bl cmFuZHNbMV0sIFRJbW9kZSwKKwkJCQlzdWJyZWdfaGlnaHBhcnRfb2Zmc2V0 IChESW1vZGUsIFRJbW9kZSkpOworICBydHggaDIgPSBzaW1wbGlmeV9nZW5f c3VicmVnIChESW1vZGUsIG9wZXJhbmRzWzJdLCBUSW1vZGUsCisJCQkJc3Vi cmVnX2hpZ2hwYXJ0X29mZnNldCAoREltb2RlLCBUSW1vZGUpKTsKKworICBp ZiAobDIgPT0gY29uc3QwX3J0eCkKKyAgICB7CisgICAgICBsMCA9IGwxOwor ICAgICAgZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NvbXBhcmUxIChoMCwgaDEs IGZvcmNlX3JlZyAoREltb2RlLCBoMikpKTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBpZiAoQ09OU1RfSU5UX1AgKGwyKSkKKwl7CisJICBsMiA9 IGZvcmNlX3JlZyAoREltb2RlLCBHRU5fSU5UICgtVUlOVFZBTCAobDIpKSk7 CisJICBoMiA9IGZvcmNlX3JlZyAoREltb2RlLCBoMik7CisJICBlbWl0X2lu c24gKGdlbl9hZGRkaTNfY29tcGFyZUMgKGwwLCBsMSwgbDIpKTsKKwl9Cisg ICAgICBlbHNlCisJZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NvbXBhcmUxIChs MCwgbDEsIGwyKSk7CisgICAgICBlbWl0X2luc24gKGdlbl9zdWJkaTNfY2Fy cnlpbkNWIChoMCwgZm9yY2VfcmVnIChESW1vZGUsIGgxKSwgaDIpKTsKKyAg ICB9CisKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9sb3dwYXJ0IChESW1vZGUs IG9wZXJhbmRzWzBdKSwgbDApOworICBlbWl0X21vdmVfaW5zbiAoZ2VuX2hp Z2hwYXJ0IChESW1vZGUsIG9wZXJhbmRzWzBdKSwgaDApOworCisgIHJ0eCB4 OworICB4ID0gZ2VuX3J0eF9MVFUgKFZPSURtb2RlLCBnZW5fcnR4X1JFRyAo Q0Ntb2RlLCBDQ19SRUdOVU0pLCBjb25zdDBfcnR4KTsKKyAgeCA9IGdlbl9y dHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5fcnR4 X0xBQkVMX1JFRiAoVk9JRG1vZGUsIG9wZXJhbmRzWzNdKSwKKwkJCSAgICBw Y19ydHgpOworICBlbWl0X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0 eCwgeCkpOwogICBET05FOwogfSkKIApAQCAtMjMzNiw2ICsyNzk0LDIyIEBA CiAgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVzX3NyZWciKV0KICkKIAorKGRl ZmluZV9pbnNuICIqc3ViPG1vZGU+M19jb21wYXJlMV9pbW0iCisgIFsoc2V0 IChyZWc6Q0MgQ0NfUkVHTlVNKQorCShjb21wYXJlOkNDCisJICAobWF0Y2hf b3BlcmFuZDpHUEkgMSAiYWFyY2g2NF9yZWdfb3JfemVybyIgInJaLHJaIikK KwkgIChtYXRjaF9vcGVyYW5kOkdQSSAyICJhYXJjaDY0X3BsdXNfaW1tZWRp YXRlIiAiSSxKIikpKQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpHUEkgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQorCShwbHVzOkdQSQorCSAgKG1h dGNoX2R1cCAxKQorCSAgKG1hdGNoX29wZXJhbmQ6R1BJIDMgImFhcmNoNjRf cGx1c19pbW1lZGlhdGUiICJKLEkiKSkpXQorICAiVUlOVFZBTCAob3BlcmFu ZHNbMl0pID09IC1VSU5UVkFMIChvcGVyYW5kc1szXSkiCisgICJACisgIHN1 YnNcXHQlPHc+MCwgJTx3PjEsICU8dz4yCisgIGFkZHNcXHQlPHc+MCwgJTx3 PjEsICU8dz4zIgorICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1c19pbW0iKV0K KykKKwogKGRlZmluZV9pbnNuICJzdWI8bW9kZT4zX2NvbXBhcmUxIgogICBb KHNldCAocmVnOkNDIENDX1JFR05VTSkKIAkoY29tcGFyZTpDQwpAQCAtMjU2 Myw2ICszMDM3LDg1IEBACiAgIFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVn IildCiApCiAKKyhkZWZpbmVfZXhwYW5kICJzdWI8bW9kZT4zX2NhcnJ5aW5D ViIKKyAgWyhwYXJhbGxlbAorICAgICBbKHNldCAocmVnOkNDIENDX1JFR05V TSkKKwkgICAoY29tcGFyZTpDQworCSAgICAgKHNpZ25fZXh0ZW5kOjxEV0k+ CisJICAgICAgIChtYXRjaF9vcGVyYW5kOkdQSSAxICJhYXJjaDY0X3JlZ19v cl96ZXJvIiAicloiKSkKKwkgICAgIChwbHVzOjxEV0k+CisJICAgICAgIChz aWduX2V4dGVuZDo8RFdJPgorCQkgKG1hdGNoX29wZXJhbmQ6R1BJIDIgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpCisJICAgICAgIChsdHU6PERXST4gKHJl ZzpDQyBDQ19SRUdOVU0pIChjb25zdF9pbnQgMCkpKSkpCisgICAgICAoc2V0 IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIi KQorCSAgIChtaW51czpHUEkKKwkgICAgIChtaW51czpHUEkgKG1hdGNoX2R1 cCAxKSAobWF0Y2hfZHVwIDIpKQorCSAgICAgKGx0dTpHUEkgKHJlZzpDQyBD Q19SRUdOVU0pIChjb25zdF9pbnQgMCkpKSldKV0KKyAgICIiCispCisKKyhk ZWZpbmVfaW5zbiAiKnN1Yjxtb2RlPjNfY2FycnlpbkNWX3oxX3oyIgorICBb KHNldCAocmVnOkNDIENDX1JFR05VTSkKKwkoY29tcGFyZTpDQworCSAgKGNv bnN0X2ludCAwKQorCSAgKG1hdGNoX29wZXJhbmQ6PERXST4gMiAiYWFyY2g2 NF9ib3Jyb3dfb3BlcmF0aW9uIiAiIikpKQorICAgKHNldCAobWF0Y2hfb3Bl cmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobmVnOkdQ SSAobWF0Y2hfb3BlcmFuZDpHUEkgMSAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0 aW9uIiAiIikpKV0KKyAgICIiCisgICAic2Jjc1xcdCU8dz4wLCA8dz56ciwg PHc+enIiCisgIFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIildCispCisK KyhkZWZpbmVfaW5zbiAiKnN1Yjxtb2RlPjNfY2FycnlpbkNWX3oxIgorICBb KHNldCAocmVnOkNDIENDX1JFR05VTSkKKwkoY29tcGFyZTpDQworCSAgKGNv bnN0X2ludCAwKQorCSAgKHBsdXM6PERXST4KKwkgICAgKHNpZ25fZXh0ZW5k OjxEV0k+CisJICAgICAgKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVy X29wZXJhbmQiICJyIikpCisJICAgIChtYXRjaF9vcGVyYW5kOjxEV0k+IDIg ImFhcmNoNjRfYm9ycm93X29wZXJhdGlvbiIgIiIpKSkpCisgICAoc2V0ICht YXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQor CShtaW51czpHUEkKKwkgIChuZWc6R1BJIChtYXRjaF9kdXAgMSkpCisJICAo bWF0Y2hfb3BlcmFuZDpHUEkgMyAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0aW9u IiAiIikpKV0KKyAgICIiCisgICAic2Jjc1xcdCU8dz4wLCA8dz56ciwgJTx3 PjEiCisgIFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIildCispCisKKyhk ZWZpbmVfaW5zbiAiKnN1Yjxtb2RlPjNfY2FycnlpbkNWX3oyIgorICBbKHNl dCAocmVnOkNDIENDX1JFR05VTSkKKwkoY29tcGFyZTpDQworCSAgKHNpZ25f ZXh0ZW5kOjxEV0k+CisJICAgIChtYXRjaF9vcGVyYW5kOkdQSSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiciIpKQorCSAgKG1hdGNoX29wZXJhbmQ6PERXST4g MiAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0aW9uIiAiIikpKQorICAgKHNldCAo bWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikK KwkobWludXM6R1BJCisJICAobWF0Y2hfZHVwIDEpCisJICAobWF0Y2hfb3Bl cmFuZDpHUEkgMyAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0aW9uIiAiIikpKV0K KyAgICIiCisgICAic2Jjc1xcdCU8dz4wLCAlPHc+MSwgPHc+enIiCisgIFso c2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIildCispCisKKyhkZWZpbmVfaW5z biAiKnN1Yjxtb2RlPjNfY2FycnlpbkNWIgorICBbKHNldCAocmVnOkNDIEND X1JFR05VTSkKKwkoY29tcGFyZTpDQworCSAgKHNpZ25fZXh0ZW5kOjxEV0k+ CisJICAgIChtYXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKQorCSAgKHBsdXM6PERXST4KKwkgICAgKHNpZ25fZXh0ZW5kOjxE V0k+CisJICAgICAgKG1hdGNoX29wZXJhbmQ6R1BJIDIgInJlZ2lzdGVyX29w ZXJhbmQiICJyIikpCisJICAgIChtYXRjaF9vcGVyYW5kOjxEV0k+IDMgImFh cmNoNjRfYm9ycm93X29wZXJhdGlvbiIgIiIpKSkpCisgICAoc2V0IChtYXRj aF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCSht aW51czpHUEkKKwkgIChtaW51czpHUEkgKG1hdGNoX2R1cCAxKSAobWF0Y2hf ZHVwIDIpKQorCSAgKG1hdGNoX29wZXJhbmQ6R1BJIDQgImFhcmNoNjRfYm9y cm93X29wZXJhdGlvbiIgIiIpKSldCisgICAiIgorICAgInNiY3NcXHQlPHc+ MCwgJTx3PjEsICU8dz4yIgorICBbKHNldF9hdHRyICJ0eXBlIiAiYWRjX3Jl ZyIpXQorKQorCiAoZGVmaW5lX2luc24gIipzdWJfdXh0PG1vZGU+X3NoaWZ0 MiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9cmsiKQogCShtaW51czpHUEkgKG1hdGNoX29wZXJhbmQ6R1BJ IDQgInJlZ2lzdGVyX29wZXJhbmQiICJyayIpCi0tIAoxLjkuMQoK --_002_HE1PR0802MB2377F28869A4E53BA8235772958C0HE1PR0802MB2377_--