Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lWdgQ-0001va-Df for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Apr 2021 11:27:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lWdgO-0003Uv-82 for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Apr 2021 11:27:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lWdgN-0003Uo-Hl for pgsql-hackers@lists.postgresql.org; Wed, 14 Apr 2021 11:27:44 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lWdgI-0006oC-NW for pgsql-hackers@lists.postgresql.org; Wed, 14 Apr 2021 11:27:42 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 2016F21C7F02; Wed, 14 Apr 2021 14:27:36 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1618399656; bh=yw+dM0BbAgxFShX2gRHheC+FISmxOhvV/1P3Y8udSJY=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=LBe6OgxsrGEjqCcBbnkt1IBEf/eu2XhnFicJ3khrJHrc2KcPCY0pudLvttkiY6Fvz wudU+99l2X1zr4QfK85x+i+l3bfEhGHzI8PQJY1ZhAFJRbTRE611aw1jrYsdH/R1TV 12+zpGPTfxQncEAVgqyrE2H4uQFr4RpoOtPoUmuc= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_31ce438d4a424a6db46984e134e4c239" Content-Transfer-Encoding: 7bit Date: Wed, 14 Apr 2021 14:27:36 +0300 From: e.sokolova@postgrespro.ru To: Justin Pryzby Cc: pgsql-hackers@lists.postgresql.org Subject: Re: [PATCH] Add extra statistics to explain for Nested Loop In-Reply-To: <20210325153031.GQ15100@telsasoft.com> References: <0fd149448c2d3391ab493e9a34e6ace1@postgrespro.ru> <20201031012053.arjh7eehmlzud45p@development> <35976aa41e4ca6f7782d336e7758636e@postgrespro.ru> <20210128213713.f46ddb449328eed36521e45b@sraoss.co.jp> <32513912fb3f4b4042a3834b2e5afd5c@postgrespro.ru> <20210325153031.GQ15100@telsasoft.com> User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: e.sokolova@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_31ce438d4a424a6db46984e134e4c239 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Thank you for working on this issue. Your comments helped me make this patch more correct. > Lines with "colon" format shouldn't use equal signs, and should use two > spaces > between fields. Done. Now extra line looks like "Loop min_rows: %.0f max_rows: %.0f total_rows: %.0f" or "Loop min_time: %.3f max_time: %.3f min_rows: %.0f max_rows: %.0f total_rows: %.0f". > Since this is now on a separate line, the "if (nloops > 1 && > es->verbose)" > can be after the existing "if (es->timing)", and shouldn't need its own > "if (es->timing)". It should conditionally add a separate line, rather > than > duplicating the "(actual.*" line. > >> - if (es->timing) >> + if (nloops > 1 && es->verbose) New version of patch contains this correction. It helped make the patch shorter. > In non-text mode, think you should not check "nloops > 1". Rather, > print the > field as 0. The fields will not be zeros. New line will almost repeat the line with main sttistics. > I think the labels in non-text format should say "Loop Min Time" or > similar. > > And these variables should have a loop_ prefix like loop_min_t ? There are good ideas. I changed it. I apply new version of this patch. I hope it got better. Please don't hesitate to share any thoughts on this topic. -- Ekaterina Sokolova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_31ce438d4a424a6db46984e134e4c239 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=extra_statistics_v4.patch Content-Disposition: attachment; filename=extra_statistics_v4.patch; size=15204 RnJvbTogIkVrYXRlcmluYSBTb2tvbG92YSIgPGUuc29rb2xvdmFAcG9zdGdyZXNwcm8ucnU+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKaW5kZXggYjYyYTc2ZTdlNWEuLmJmOGMzN2JhZWZkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCkBAIC0xNjE1LDYgKzE2MTUsMTEgQEAgRXhwbGFpbk5vZGUoUGxhblN0 YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJZG91YmxlCQlzdGFydHVwX21zID0g MTAwMC4wICogcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5zdGFydHVwIC8gbmxvb3BzOwogCQlkb3Vi bGUJCXRvdGFsX21zID0gMTAwMC4wICogcGxhbnN0YXRlLT5pbnN0cnVtZW50LT50b3RhbCAvIG5s b29wczsKIAkJZG91YmxlCQlyb3dzID0gcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzIC8g bmxvb3BzOworCQlkb3VibGUJCWxvb3BfdG90YWxfcm93cyA9IHBsYW5zdGF0ZS0+aW5zdHJ1bWVu dC0+bnR1cGxlczsKKwkJZG91YmxlCQlsb29wX21pbl9yID0gcGxhbnN0YXRlLT5pbnN0cnVtZW50 LT5taW5fdHVwbGVzOworCQlkb3VibGUJCWxvb3BfbWF4X3IgPSBwbGFuc3RhdGUtPmluc3RydW1l bnQtPm1heF90dXBsZXM7CisJCWRvdWJsZQkJbG9vcF9taW5fdF9tcyA9IDEwMDAuMCAqIHBsYW5z dGF0ZS0+aW5zdHJ1bWVudC0+bWluX3Q7CisJCWRvdWJsZQkJbG9vcF9tYXhfdF9tcyA9IDEwMDAu MCAqIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+bWF4X3Q7CiAKIAkJaWYgKGVzLT5mb3JtYXQgPT0g RVhQTEFJTl9GT1JNQVRfVEVYVCkKIAkJewpAQCAtMTYyNiw2ICsxNjMxLDE5IEBAIEV4cGxhaW5O b2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJYXBwZW5kU3Ry aW5nSW5mbyhlcy0+c3RyLAogCQkJCQkJCQkgIiAoYWN0dWFsIHJvd3M9JS4wZiBsb29wcz0lLjBm KSIsCiAJCQkJCQkJCSByb3dzLCBubG9vcHMpOworCQkJaWYgKG5sb29wcyA+IDEgJiYgZXMtPnZl cmJvc2UpCisJCQl7CisgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAi XG4iKTsKKwkJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCQkJaWYgKGVzLT50aW1pbmcpCisJ CQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJCQkJCQkJCSAiTG9vcCBtaW5fdGltZTog JS4zZiAgbWF4X3RpbWU6ICUuM2YgIG1pbl9yb3dzOiAlLjBmICBtYXhfcm93czogJS4wZiAgdG90 YWxfcm93czogJS4wZiIsCisJCQkJCQkJCQkgbG9vcF9taW5fdF9tcywgbG9vcF9tYXhfdF9tcywg bG9vcF9taW5fciwgbG9vcF9tYXhfciwgbG9vcF90b3RhbF9yb3dzKTsKKwkJCQllbHNlCisJCQkJ CWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJCQkJCQkJCSAiTG9vcCBtaW5fcm93czogJS4w ZiAgbWF4X3Jvd3M6ICUuMGYgIHRvdGFsX3Jvd3M6ICUuMGYiLAorCQkJCQkJCQkJIGxvb3BfbWlu X3IsIGxvb3BfbWF4X3IsIGxvb3BfdG90YWxfcm93cyk7CisJCQl9CiAJCX0KIAkJZWxzZQogCQl7 CkBAIC0xNjM1LDggKzE2NTMsMjEgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUs IExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkJCSAzLCBlcyk7CiAJCQkJRXhwbGFpblByb3BlcnR5 RmxvYXQoIkFjdHVhbCBUb3RhbCBUaW1lIiwgInMiLCB0b3RhbF9tcywKIAkJCQkJCQkJCSAzLCBl cyk7CisJCQkJaWYgKG5sb29wcyA+IDEgJiYgZXMtPnZlcmJvc2UpCisJCQkJeworCQkJCQlFeHBs YWluUHJvcGVydHlGbG9hdCgiTG9vcCBNaW4gVGltZSIsICJzIiwgbG9vcF9taW5fdF9tcywKKwkJ CQkJCQkJCQkgMywgZXMpOworCQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiTG9vcCBNYXggVGlt ZSIsICJzIiwgbG9vcF9tYXhfdF9tcywKKwkJCQkJCQkJCQkgMywgZXMpOworCQkJCX0KIAkJCX0K IAkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgUm93cyIsIE5VTEwsIHJvd3MsIDAsIGVz KTsKKwkJCWlmIChubG9vcHMgPiAxICYmIGVzLT52ZXJib3NlKQorCQkJeworCQkJCUV4cGxhaW5Q cm9wZXJ0eUZsb2F0KCJMb29wIE1pbiBSb3dzIiwgTlVMTCwgbG9vcF9taW5fciwgMCwgZXMpOwor CQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJMb29wIE1heCBSb3dzIiwgTlVMTCwgbG9vcF9tYXhf ciwgMCwgZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJMb29wIFRvdGFsIFJvd3MiLCBO VUxMLCBsb29wX3RvdGFsX3Jvd3MsIDAsIGVzKTsKKwkJCX0KIAkJCUV4cGxhaW5Qcm9wZXJ0eUZs b2F0KCJBY3R1YWwgTG9vcHMiLCBOVUxMLCBubG9vcHMsIDAsIGVzKTsKIAkJfQogCX0KQEAgLTE2 NDYsNiArMTY3Nyw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICph bmNlc3RvcnMsCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGVzLT5zdHIsICIgKG5ldmVyIGV4 ZWN1dGVkKSIpOwogCQllbHNlCiAJCXsKKwkJCS8qIHdpdGhvdXQgbWluIGFuZCBtYXggdmFsdWVz IGJlY2F1c2UgYWN0dWFsIHJlc3VsdCBpcyAwICovCiAJCQlpZiAoZXMtPnRpbWluZykKIAkJCXsK IAkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFN0YXJ0dXAgVGltZSIsICJtcyIsIDAu MCwgMywgZXMpOwpAQCAtMTY3MiwxMiArMTcwNCwyMiBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJZG91YmxlCQlzdGFydHVwX21zOwogCQkJ ZG91YmxlCQl0b3RhbF9tczsKIAkJCWRvdWJsZQkJcm93czsKKwkJCWRvdWJsZQkJbG9vcF9taW5f dF9tczsKKwkJCWRvdWJsZQkJbG9vcF9tYXhfdF9tczsKKwkJCWRvdWJsZQkJbG9vcF9taW5fcjsK KwkJCWRvdWJsZQkJbG9vcF9tYXhfcjsKKwkJCWRvdWJsZQkJbG9vcF90b3RhbF9yb3dzOwogCiAJ CQlpZiAobmxvb3BzIDw9IDApCiAJCQkJY29udGludWU7CiAJCQlzdGFydHVwX21zID0gMTAwMC4w ICogaW5zdHJ1bWVudC0+c3RhcnR1cCAvIG5sb29wczsKIAkJCXRvdGFsX21zID0gMTAwMC4wICog aW5zdHJ1bWVudC0+dG90YWwgLyBubG9vcHM7CiAJCQlyb3dzID0gaW5zdHJ1bWVudC0+bnR1cGxl cyAvIG5sb29wczsKKwkJCWxvb3BfbWluX3RfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50LT5taW5f dDsKKwkJCWxvb3BfbWF4X3RfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50LT5tYXhfdDsKKwkJCWxv b3BfbWluX3IgPSBpbnN0cnVtZW50LT5taW5fdHVwbGVzOworCQkJbG9vcF9tYXhfciA9IGluc3Ry dW1lbnQtPm1heF90dXBsZXM7CisJCQlsb29wX3RvdGFsX3Jvd3MgPSBpbnN0cnVtZW50LT5udHVw bGVzOwogCiAJCQlFeHBsYWluT3BlbldvcmtlcihuLCBlcyk7CiAKQEAgLTE2OTIsNiArMTczNCwx OSBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAog CQkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsCiAJCQkJCQkJCQkgImFjdHVhbCByb3dzPSUu MGYgbG9vcHM9JS4wZlxuIiwKIAkJCQkJCQkJCSByb3dzLCBubG9vcHMpOworCQkJCWlmIChubG9v cHMgPiAxKQorCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nSW5mbyhlcy0+ c3RyLCAiXG4iKTsKKwkJCQkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQkJCQlpZiAoZXMtPnRp bWluZykKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJCQkJCQkJCQkgIkxvb3Ag bWluX3RpbWU6ICUuM2YgIG1heF90aW1lOiAlLjNmICBtaW5fcm93czogJS4wZiAgbWF4X3Jvd3M6 ICUuMGYgIHRvdGFsX3Jvd3M6ICUuMGYiLAorCQkJCQkJCQkJCSBsb29wX21pbl90X21zLCBsb29w X21heF90X21zLCBsb29wX21pbl9yLCBsb29wX21heF9yLCBsb29wX3RvdGFsX3Jvd3MpOworCQkJ CQllbHNlCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsCisJCQkJCQkJCQkJICJMb29w IG1pbl9yb3dzOiAlLjBmICBtYXhfcm93czogJS4wZiAgdG90YWxfcm93czogJS4wZiIsCisJCQkJ CQkJCQkJIGxvb3BfbWluX3IsIGxvb3BfbWF4X3IsIGxvb3BfdG90YWxfcm93cyk7CisJCQkJfQog CQkJfQogCQkJZWxzZQogCQkJewpAQCAtMTcwMSw4ICsxNzU2LDIxIEBAIEV4cGxhaW5Ob2RlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJCQkJIHN0YXJ0dXBf bXMsIDMsIGVzKTsKIAkJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBUb3RhbCBUaW1l IiwgIm1zIiwKIAkJCQkJCQkJCQkgdG90YWxfbXMsIDMsIGVzKTsKKwkJCQkJaWYgKG5sb29wcyA+ IDEpCisJCQkJCXsKKwkJCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJMb29wIE1pbiBUaW1lIiwg Im1zIiwKKwkJCQkJCQkJCQkJIGxvb3BfbWluX3RfbXMsIDMsIGVzKTsKKwkJCQkJCUV4cGxhaW5Q cm9wZXJ0eUZsb2F0KCJMb29wIE1heCBUaW1lIiwgIm1zIiwKKwkJCQkJCQkJCQkJIGxvb3BfbWF4 X3RfbXMsIDMsIGVzKTsKKwkJCQkJfQogCQkJCX0KIAkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgi QWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAwLCBlcyk7CisJCQkJaWYgKG5sb29wcyA+IDEpCisJ CQkJeworCQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiTG9vcCBNaW4gUm93cyIsIE5VTEwsIGxv b3BfbWluX3IsIDAsIGVzKTsKKwkJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkxvb3AgTWF4IFJv d3MiLCBOVUxMLCBsb29wX21heF9yLCAwLCBlcyk7CisJCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0 KCJMb29wIFRvdGFsIFJvd3MiLCBOVUxMLCBsb29wX3RvdGFsX3Jvd3MsIDAsIGVzKTsKKwkJCQl9 CiAJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBMb29wcyIsIE5VTEwsIG5sb29wcywg MCwgZXMpOwogCQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVt ZW50LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKaW5kZXggMjM3ZTEzMzYx YjUuLmQyYzNlNjc4ODgyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVt ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVudC5jCkBAIC0xMzQsNyAr MTM0LDM0IEBAIEluc3RyRW5kTG9vcChJbnN0cnVtZW50YXRpb24gKmluc3RyKQogCiAJaW5zdHIt PnN0YXJ0dXAgKz0gaW5zdHItPmZpcnN0dHVwbGU7CiAJaW5zdHItPnRvdGFsICs9IHRvdGFsdGlt ZTsKKworCS8qCisJICogdGhpcyBpcyBmaXJzdCBsb29wCisJICoKKwkgKiBXZSBvbmx5IGluaXRp YWxpemUgdGhlIG1pbiB2YWx1ZXMuIFdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggdGhlCisJ ICogbWF4LCBiZWNhdXNlIHRob3NlIGFyZSAwIGFuZCB0aGUgbm9uLXplcm8gdmFsdWVzIHdpbGwg Z2V0IHVwZGF0ZWQgYQorCSAqIGNvdXBsZSBsaW5lcyBsYXRlci4KKwkgKi8KKwlpZiAoaW5zdHIt Pm5sb29wcyA9PSAwKQorCXsKKwkJaW5zdHItPm1pbl90ID0gdG90YWx0aW1lOworCQlpbnN0ci0+ bWluX3R1cGxlcyA9IGluc3RyLT50dXBsZWNvdW50OworCX0KKworCWlmIChpbnN0ci0+bWluX3Qg PiB0b3RhbHRpbWUpCisJCWluc3RyLT5taW5fdCA9IHRvdGFsdGltZTsKKworCWlmIChpbnN0ci0+ bWF4X3QgPCB0b3RhbHRpbWUpCisJCWluc3RyLT5tYXhfdCA9IHRvdGFsdGltZTsKKwogCWluc3Ry LT5udHVwbGVzICs9IGluc3RyLT50dXBsZWNvdW50OworCisJaWYgKGluc3RyLT5taW5fdHVwbGVz ID4gaW5zdHItPnR1cGxlY291bnQpCisJCWluc3RyLT5taW5fdHVwbGVzID0gaW5zdHItPnR1cGxl Y291bnQ7CisKKwlpZiAoaW5zdHItPm1heF90dXBsZXMgPCBpbnN0ci0+dHVwbGVjb3VudCkKKwkJ aW5zdHItPm1heF90dXBsZXMgPSBpbnN0ci0+dHVwbGVjb3VudDsKKwogCWluc3RyLT5ubG9vcHMg Kz0gMTsKIAogCS8qIFJlc2V0IGZvciBuZXh0IGN5Y2xlIChpZiBhbnkpICovCkBAIC0xNjcsNiAr MTk0LDEwIEBAIEluc3RyQWdnTm9kZShJbnN0cnVtZW50YXRpb24gKmRzdCwgSW5zdHJ1bWVudGF0 aW9uICphZGQpCiAJZHN0LT5ubG9vcHMgKz0gYWRkLT5ubG9vcHM7CiAJZHN0LT5uZmlsdGVyZWQx ICs9IGFkZC0+bmZpbHRlcmVkMTsKIAlkc3QtPm5maWx0ZXJlZDIgKz0gYWRkLT5uZmlsdGVyZWQy OworCWRzdC0+bWluX3QgPSBNaW4oZHN0LT5taW5fdCwgYWRkLT5taW5fdCk7CisJZHN0LT5tYXhf dCA9IE1heChkc3QtPm1heF90LCBhZGQtPm1heF90KTsKKwlkc3QtPm1pbl90dXBsZXMgPSBNaW4o ZHN0LT5taW5fdHVwbGVzLCBhZGQtPm1pbl90dXBsZXMpOworCWRzdC0+bWF4X3R1cGxlcyA9IE1h eChkc3QtPm1heF90dXBsZXMsIGFkZC0+bWF4X3R1cGxlcyk7CiAKIAkvKiBBZGQgZGVsdGEgb2Yg YnVmZmVyIHVzYWdlIHNpbmNlIGVudHJ5IHRvIG5vZGUncyB0b3RhbHMgKi8KIAlpZiAoZHN0LT5u ZWVkX2J1ZnVzYWdlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCmluZGV4IGFhOGVjZWRhNWY0 Li45M2JhN2M4MzQ2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaApAQCAtNjYsNyArNjYs MTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5zdHJ1bWVudGF0aW9uCiAJLyogQWNjdW11bGF0ZWQgc3Rh dGlzdGljcyBhY3Jvc3MgYWxsIGNvbXBsZXRlZCBjeWNsZXM6ICovCiAJZG91YmxlCQlzdGFydHVw OwkJLyogdG90YWwgc3RhcnR1cCB0aW1lIChpbiBzZWNvbmRzKSAqLwogCWRvdWJsZQkJdG90YWw7 CQkJLyogdG90YWwgdGltZSAoaW4gc2Vjb25kcykgKi8KKwlkb3VibGUJCW1pbl90OwkJCS8qIHRp bWUgb2YgZmFzdGVzdCBsb29wIChpbiBzZWNvbmRzKSAqLworCWRvdWJsZQkJbWF4X3Q7CQkJLyog dGltZSBvZiBzbG93ZXN0IGxvb3AgKGluIHNlY29uZHMpICovCiAJZG91YmxlCQludHVwbGVzOwkJ LyogdG90YWwgdHVwbGVzIHByb2R1Y2VkICovCisJZG91YmxlCQltaW5fdHVwbGVzOwkJLyogbWlu IGNvdW50ZXIgb2YgcHJvZHVjZWQgdHVwbGVzIGZvciBhbGwKKwkJCQkJCQkJICogbG9vcHMgKi8K Kwlkb3VibGUJCW1heF90dXBsZXM7CQkvKiBtYXggY291bnRlciBvZiBwcm9kdWNlZCB0dXBsZXMg Zm9yIGFsbAorCQkJCQkJCQkgKiBsb29wcyAqLwogCWRvdWJsZQkJbnR1cGxlczI7CQkvKiBzZWNv bmRhcnkgbm9kZS1zcGVjaWZpYyB0dXBsZSBjb3VudGVyICovCiAJZG91YmxlCQlubG9vcHM7CQkJ LyogIyBvZiBydW4gY3ljbGVzIGZvciB0aGlzIG5vZGUgKi8KIAlkb3VibGUJCW5maWx0ZXJlZDE7 CQkvKiAjIG9mIHR1cGxlcyByZW1vdmVkIGJ5IHNjYW5xdWFsIG9yIGpvaW5xdWFsICovCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxhaW4ub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dAppbmRleCBjZGEyODA5OGJhYS4uYjUxNjU5ZDU3 ZjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dApAQCAtMzUxLDggKzM1MSwx MyBAQCBzZWxlY3QganNvbmJfcHJldHR5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi QWN0dWFsIExvb3BzIjogMCwgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4wLCAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAgICAgKworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiTG9vcCBNYXggUm93cyI6IDAsICAgICAgICAgICAgKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiTG9vcCBNYXggVGltZSI6IDAuMCwgICAgICAgICAgKwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9vcCBNaW4gUm93cyI6IDAsICAgICAgICAg ICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9vcCBNaW4gVGltZSI6IDAuMCwg ICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6 ICJ0ZW5rMSIsICAgICAgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyYWxsZWwg QXdhcmUiOiB0cnVlLCAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9v cCBUb3RhbCBSb3dzIjogMCwgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiTG9jYWwgSGl0IEJsb2NrcyI6IDAsICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiVGVtcCBSZWFkIEJsb2NrcyI6IDAsICAgICAgICAgKwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiQWN0dWFsIFRvdGFsIFRpbWUiOiAwLjAsICAgICAgKwpAQCAtMzk3LDcg KzQwMiwxMiBAQCBzZWxlY3QganNvbmJfcHJldHR5KAogICAgICAgICAgICAgICAgICAgICAgIkFj dHVhbCBMb29wcyI6IDAsICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAg ICAgIlN0YXJ0dXAgQ29zdCI6IDAuMCwgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAg ICAgICAgICAgIkFzeW5jIENhcGFibGUiOiBmYWxzZSwgICAgICAgICAgICAgICAgKworICAgICAg ICAgICAgICAgICAgICAgIkxvb3AgTWF4IFJvd3MiOiAwLCAgICAgICAgICAgICAgICAgICAgKwor ICAgICAgICAgICAgICAgICAgICAgIkxvb3AgTWF4IFRpbWUiOiAwLjAsICAgICAgICAgICAgICAg ICAgKworICAgICAgICAgICAgICAgICAgICAgIkxvb3AgTWluIFJvd3MiOiAwLCAgICAgICAgICAg ICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgIkxvb3AgTWluIFRpbWUiOiAwLjAsICAg ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAgIlBhcmFsbGVsIEF3YXJlIjog ZmFsc2UsICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgIkxvb3AgVG90YWwg Um93cyI6IDAsICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAgIlNvcnQg U3BhY2UgVXNlZCI6IDAsICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICAgICAg IkxvY2FsIEhpdCBCbG9ja3MiOiAwLCAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAg ICAgICAgIlRlbXAgUmVhZCBCbG9ja3MiOiAwLCAgICAgICAgICAgICAgICAgKwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CmluZGV4IDFhNzE0OWJmZDU3 Li44ZDg3YWY5MjU5MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fcHJ1bmUub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X3BydW5lLm91dApAQCAtMTk2MSw2ICsxOTYxLDEwIEBAIGJlZ2luCiAgICAgICAgIGxuIDo9IHJl Z2V4cF9yZXBsYWNlKGxuLCAnSGl0czogXGQrJywgJ0hpdHM6IE4nKTsKICAgICAgICAgbG4gOj0g cmVnZXhwX3JlcGxhY2UobG4sICdNaXNzZXM6IFxkKycsICdNaXNzZXM6IE4nKTsKICAgICAgICAg bG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdNZW1vcnkgVXNhZ2U6IFxkKycsICdNZW1vcnkgVXNh Z2U6IE4nKTsKKyAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdMb29wIG1pbl90aW1l OiBcZCsgIG1heF90aW1lOiBcZCsgIG1pbl9yb3dzOiBcZCsgIG1heF9yb3dzOiBcZCsgIHRvdGFs X3Jvd3M6IFxkKycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTG9vcCBtaW5f dGltZTogTiAgbWF4X3RpbWU6IE4gIG1pbl9yb3dzOiBOICBtYXhfcm93czogTiAgdG90YWxfcm93 czogTicpOworICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ0xvb3AgbWluX3Jvd3M6 IFxkKyAgbWF4X3Jvd3M6IFxkKyAgdG90YWxfcm93czogXGQrJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdMb29wIG1pbl9yb3dzOiBOICBtYXhfcm93czogTiAgdG90YWxfcm93 czogTicpOwogICAgICAgICByZXR1cm4gbmV4dCBsbjsKICAgICBlbmQgbG9vcDsKIGVuZDsKQEAg LTI3MTgsNiArMjcyMiw3MiBAQCBvcmRlciBieSB0YmwxLmNvbDEsIHRwcnQuY29sMTsKICAxMDAx IHwgMTAwMQogKDMgcm93cykKIAorLS0gVGVzdHMgZm9yIGV4dHJhIHN0YXRpc3RpY3MKK2V4cGxh aW4gKGFuYWx5emUsIHZlcmJvc2UsIGNvc3RzIG9mZiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYp CitzZWxlY3QgKiBmcm9tIHRibDEgaW5uZXIgam9pbiB0cHJ0IG9uIHRibDEuY29sMSA+IHRwcnQu Y29sMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AgKGFjdHVhbCByb3dzPTIzIGxvb3BzPTEpCisgICBPdXRwdXQ6IHRibDEu Y29sMSwgdHBydC5jb2wxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnRibDEgKGFjdHVhbCBy b3dzPTUgbG9vcHM9MSkKKyAgICAgICAgIE91dHB1dDogdGJsMS5jb2wxCisgICAtPiAgQXBwZW5k IChhY3R1YWwgcm93cz01IGxvb3BzPTUpCisgICAgICAgICBMb29wIG1pbl9yb3dzOiAyICBtYXhf cm93czogNiAgdG90YWxfcm93czogMjMKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHRw cnQxX2lkeCBvbiBwdWJsaWMudHBydF8xIChhY3R1YWwgcm93cz0yIGxvb3BzPTUpCisgICAgICAg ICAgICAgICBMb29wIG1pbl9yb3dzOiAyICBtYXhfcm93czogMiAgdG90YWxfcm93czogMTAKKyAg ICAgICAgICAgICAgIE91dHB1dDogdHBydF8xLmNvbDEKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0cHJ0XzEuY29sMSA8IHRibDEuY29sMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIHRwcnQyX2lkeCBvbiBwdWJsaWMudHBydF8yIChhY3R1YWwgcm93cz0zIGxvb3BzPTQpCisg ICAgICAgICAgICAgICBMb29wIG1pbl9yb3dzOiAyICBtYXhfcm93czogMyAgdG90YWxfcm93czog MTEKKyAgICAgICAgICAgICAgIE91dHB1dDogdHBydF8yLmNvbDEKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICh0cHJ0XzIuY29sMSA8IHRibDEuY29sMSkKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHRwcnQzX2lkeCBvbiBwdWJsaWMudHBydF8zIChhY3R1YWwgcm93cz0xIGxvb3Bz PTIpCisgICAgICAgICAgICAgICBMb29wIG1pbl9yb3dzOiAxICBtYXhfcm93czogMSAgdG90YWxf cm93czogMgorICAgICAgICAgICAgICAgT3V0cHV0OiB0cHJ0XzMuY29sMQorICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKHRwcnRfMy5jb2wxIDwgdGJsMS5jb2wxKQorICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgdHBydDRfaWR4IG9uIHB1YmxpYy50cHJ0XzQgKG5ldmVyIGV4ZWN1dGVk KQorICAgICAgICAgICAgICAgT3V0cHV0OiB0cHJ0XzQuY29sMQorICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKHRwcnRfNC5jb2wxIDwgdGJsMS5jb2wxKQorICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgdHBydDVfaWR4IG9uIHB1YmxpYy50cHJ0XzUgKG5ldmVyIGV4ZWN1dGVkKQorICAg ICAgICAgICAgICAgT3V0cHV0OiB0cHJ0XzUuY29sMQorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRwcnRfNS5jb2wxIDwgdGJsMS5jb2wxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgdHBydDZfaWR4IG9uIHB1YmxpYy50cHJ0XzYgKG5ldmVyIGV4ZWN1dGVkKQorICAgICAgICAg ICAgICAgT3V0cHV0OiB0cHJ0XzYuY29sMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRw cnRfNi5jb2wxIDwgdGJsMS5jb2wxKQorKDI3IHJvd3MpCisKK2V4cGxhaW4gKGFuYWx5emUsIHZl cmJvc2UsIGNvc3RzIG9mZiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYpCitzZWxlY3QgKiBmcm9t IHRibDEgaW5uZXIgam9pbiB0cHJ0IG9uIHRibDEuY29sMSA9IHRwcnQuY29sMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3Ag KGFjdHVhbCByb3dzPTMgbG9vcHM9MSkKKyAgIE91dHB1dDogdGJsMS5jb2wxLCB0cHJ0LmNvbDEK KyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMudGJsMSAoYWN0dWFsIHJvd3M9NSBsb29wcz0xKQor ICAgICAgICAgT3V0cHV0OiB0YmwxLmNvbDEKKyAgIC0+ICBBcHBlbmQgKGFjdHVhbCByb3dzPTEg bG9vcHM9NSkKKyAgICAgICAgIExvb3AgbWluX3Jvd3M6IDAgIG1heF9yb3dzOiAxICB0b3RhbF9y b3dzOiAzCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0cHJ0MV9pZHggb24gcHVibGlj LnRwcnRfMSAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICBPdXRwdXQ6IHRwcnRfMS5j b2wxCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodHBydF8xLmNvbDEgPSB0YmwxLmNvbDEp CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0cHJ0Ml9pZHggb24gcHVibGljLnRwcnRf MiAoYWN0dWFsIHJvd3M9MSBsb29wcz0yKQorICAgICAgICAgICAgICAgTG9vcCBtaW5fcm93czog MSAgbWF4X3Jvd3M6IDEgIHRvdGFsX3Jvd3M6IDIKKyAgICAgICAgICAgICAgIE91dHB1dDogdHBy dF8yLmNvbDEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0cHJ0XzIuY29sMSA9IHRibDEu Y29sMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHRwcnQzX2lkeCBvbiBwdWJsaWMu dHBydF8zIChhY3R1YWwgcm93cz0wIGxvb3BzPTMpCisgICAgICAgICAgICAgICBMb29wIG1pbl9y b3dzOiAwICBtYXhfcm93czogMSAgdG90YWxfcm93czogMQorICAgICAgICAgICAgICAgT3V0cHV0 OiB0cHJ0XzMuY29sMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRwcnRfMy5jb2wxID0g dGJsMS5jb2wxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdHBydDRfaWR4IG9uIHB1 YmxpYy50cHJ0XzQgKG5ldmVyIGV4ZWN1dGVkKQorICAgICAgICAgICAgICAgT3V0cHV0OiB0cHJ0 XzQuY29sMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRwcnRfNC5jb2wxID0gdGJsMS5j b2wxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdHBydDVfaWR4IG9uIHB1YmxpYy50 cHJ0XzUgKG5ldmVyIGV4ZWN1dGVkKQorICAgICAgICAgICAgICAgT3V0cHV0OiB0cHJ0XzUuY29s MQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRwcnRfNS5jb2wxID0gdGJsMS5jb2wxKQor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdHBydDZfaWR4IG9uIHB1YmxpYy50cHJ0XzYg KG5ldmVyIGV4ZWN1dGVkKQorICAgICAgICAgICAgICAgT3V0cHV0OiB0cHJ0XzYuY29sMQorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKHRwcnRfNi5jb2wxID0gdGJsMS5jb2wxKQorKDI2IHJv d3MpCisKIC0tIExhc3QgcGFydGl0aW9uCiBkZWxldGUgZnJvbSB0YmwxOwogaW5zZXJ0IGludG8g dGJsMSB2YWx1ZXMgKDQ0MDApOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFy dGl0aW9uX3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5z cWwKaW5kZXggMjQ3MjY0ZjkzYjcuLmMxMjY4ZTIzZjI3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTQ2Nyw2ICs0NjcsMTAgQEAgYmVnaW4KICAgICAgICAg bG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdIaXRzOiBcZCsnLCAnSGl0czogTicpOwogICAgICAg ICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ01pc3NlczogXGQrJywgJ01pc3NlczogTicpOwog ICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ01lbW9yeSBVc2FnZTogXGQrJywgJ01l bW9yeSBVc2FnZTogTicpOworICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ0xvb3Ag bWluX3RpbWU6IFxkKyAgbWF4X3RpbWU6IFxkKyAgbWluX3Jvd3M6IFxkKyAgbWF4X3Jvd3M6IFxk KyAgdG90YWxfcm93czogXGQrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdM b29wIG1pbl90aW1lOiBOICBtYXhfdGltZTogTiAgbWluX3Jvd3M6IE4gIG1heF9yb3dzOiBOICB0 b3RhbF9yb3dzOiBOJyk7CisgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAnTG9vcCBt aW5fcm93czogXGQrICBtYXhfcm93czogXGQrICB0b3RhbF9yb3dzOiBcZCsnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ0xvb3AgbWluX3Jvd3M6IE4gIG1heF9yb3dzOiBOICB0 b3RhbF9yb3dzOiBOJyk7CiAgICAgICAgIHJldHVybiBuZXh0IGxuOwogICAgIGVuZCBsb29wOwog ZW5kOwpAQCAtNjU3LDYgKzY2MSwxMyBAQCBzZWxlY3QgdGJsMS5jb2wxLCB0cHJ0LmNvbDEgZnJv bSB0YmwxCiBpbm5lciBqb2luIHRwcnQgb24gdGJsMS5jb2wxID0gdHBydC5jb2wxCiBvcmRlciBi eSB0YmwxLmNvbDEsIHRwcnQuY29sMTsKIAorLS0gVGVzdHMgZm9yIGV4dHJhIHN0YXRpc3RpY3MK K2V4cGxhaW4gKGFuYWx5emUsIHZlcmJvc2UsIGNvc3RzIG9mZiwgc3VtbWFyeSBvZmYsIHRpbWlu ZyBvZmYpCitzZWxlY3QgKiBmcm9tIHRibDEgaW5uZXIgam9pbiB0cHJ0IG9uIHRibDEuY29sMSA+ IHRwcnQuY29sMTsKKworZXhwbGFpbiAoYW5hbHl6ZSwgdmVyYm9zZSwgY29zdHMgb2ZmLCBzdW1t YXJ5IG9mZiwgdGltaW5nIG9mZikKK3NlbGVjdCAqIGZyb20gdGJsMSBpbm5lciBqb2luIHRwcnQg b24gdGJsMS5jb2wxID0gdHBydC5jb2wxOworCiAtLSBMYXN0IHBhcnRpdGlvbgogZGVsZXRlIGZy b20gdGJsMTsKIGluc2VydCBpbnRvIHRibDEgdmFsdWVzICg0NDAwKTsK --=_31ce438d4a424a6db46984e134e4c239--