[MLton] nonexhaustiveMatch, redundantMatch and nonexhaustiveExnMatch

Vesa Karvonen vesa.karvonen@cs.helsinki.fi
Wed, 3 Aug 2005 00:45:39 +0300


This message is in MIME format.

---MOQ1123019139f5d4f3685fc84ee32e53e0d72cd5f5ff
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

The attachment is a patch to implement

 - nonexhaustiveMatch {warn|ignore|error} ,
 - redundantMatch {warn|ignore|error} , and
 - nonexhaustiveExnMatch {default|ignore} .

Below are notes about some issues that might be preferred otherwise
or may need correction. Feel free to fix them befory applying the patch
(if ever) or reply briefly and I'll fix them and make a second patch.
(I trust that you also review the patch.)

I introduced a new datatype 

+      datatype diagnostic =
+         Error
+       | Ignore
+       | Warn

in control-flags in order to implement the {warn|ignore|error}
annotations. Although the constructor names start with a capital letter,
the names used in annotations do not:

+		    toString = fn Error => "error"
+				| Ignore => "ignore"
+				| Warn => "warn",

+		    parseArgs = fn ["error"] => SOME Error
+				 | ["ignore"] => SOME Ignore
+				 | ["warn"] => SOME Warn
+				 | _ => NONE},

"nonexhaustiveExnMatch {default|ignore}" is internally treated as

+	    val ignoreNonexhaustiveExnMatch: (bool,bool) t

to avoid having to define a new datatype.

"warnMatch" is implemented as follows:

 	 val (warnMatch, ac) =
+	    make ({default = true,
+	           expert = false,
+	           toString = Bool.toString,
+	           name = "warnMatch",
+	           newCur = fn (_, b) =>
+			       let
+				  val d = if b then Warn else Ignore
+			       in
+				  setCur (nonexhaustiveMatch, d)
+	          		  ; setCur (redundantMatch, d)
+	          		  ; b
+			       end,
+	           newDef = fn (_, b) =>
+			       let
+				  val d = if b then Warn else Ignore
+			       in
+				  setDef (nonexhaustiveMatch, d)
+	          		  ; setDef (redundantMatch, d)
+	          		  ; b
+			       end,
+		   parseArgs = fn [arg'] => Bool.fromString arg'
+				| _ => NONE}, 
+		  ac)

The new annotations do not change the "warnMatch" setting. I'm not sure
whether this is the best way to do it. The code is basically adapted from
"allowFFI". Probably neither "allowFFI" nor "warnMatch" should have state
of their own. As with "allowFFI", it is possible to create potentially
confusing specifications:

  "warnMatch true"
  ...
  "redundantMatch false"
  "nonexhaustiveMatch false"

Now warnMatch would still be true. However, things should work as expected
as long as one only uses either "warnMatch" or "redundantMatch" +
"nonexhaustiveMatch", but not both.

I did some (probably not 100% exhaustive) interactive testing using the
source:

  exception Rec of exn

  val nonexhaustiveExnMatch = fn Rec exn => exn
  val nonexhaustiveMatch = fn SOME x => x
  val redundantMatch = fn true => false | false => true | x => not x

and the annotations seem to work as expected. If you want, I can write a
more thorough regression test.

The patch does not contain changes to the mlb files or build/test scripts.
The patch should be backwards compatible. I've built the compiler and run
the bin/regression script and saw no problems. If you like, I can send
another patch to change the mlb files and build/test scripts.

-Vesa Karvonen

---MOQ1123019139f5d4f3685fc84ee32e53e0d72cd5f5ff
Content-Type: text/x-patch; name="nonexhaustive-and-redundant.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="nonexhaustive-and-redundant.patch"

SW5kZXg6IG1sdG9uL2NvbnRyb2wvY29udHJvbC1mbGFncy5zaWcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWx0
b24vY29udHJvbC9jb250cm9sLWZsYWdzLnNpZwkocmV2aXNpb24gMzkzMykKKysrIG1sdG9uL2Nv
bnRyb2wvY29udHJvbC1mbGFncy5zaWcJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDExIEBA
CiAgICAgICAoKiBHZW5lcmF0ZSBhbiBleGVjdXRhYmxlIHdpdGggZGVidWdnaW5nIGluZm8uICop
CiAgICAgICB2YWwgZGVidWc6IGJvb2wgcmVmCiAKKyAgICAgIGRhdGF0eXBlIGRpYWdub3N0aWMg
PQorCSBFcnJvcgorICAgICAgIHwgSWdub3JlCisgICAgICAgfCBXYXJuCisKICAgICAgICgqIExp
c3Qgb2YgcGFzcyBuYW1lcyB0byBrZWVwIGRpYWdub3N0aWMgaW5mbyBvbi4gKikKICAgICAgIHZh
bCBkaWFnUGFzc2VzOiBSZWdleHAuQ29tcGlsZWQudCBsaXN0IHJlZgogCkBAIC02OSwxMCArNzQs
MTEgQEAKIAkgICAgdmFsIGRlYWRDb2RlOiAoYm9vbCxib29sKSB0CiAJICAgIHZhbCBmb3JjZVVz
ZWQ6ICh1bml0LGJvb2wpIHQKIAkgICAgdmFsIGZmaVN0cjogKHN0cmluZyxzdHJpbmcgb3B0aW9u
KSB0CisJICAgIHZhbCBpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2g6IChib29sLGJvb2wpIHQK
KwkgICAgdmFsIG5vbmV4aGF1c3RpdmVNYXRjaDogKGRpYWdub3N0aWMsZGlhZ25vc3RpYykgdAor
CSAgICB2YWwgcmVkdW5kYW50TWF0Y2g6IChkaWFnbm9zdGljLGRpYWdub3N0aWMpIHQKIAkgICAg
KCogaW4gKGUxOyBlMiksIHJlcXVpcmUgZTE6IHVuaXQuICopCiAJICAgIHZhbCBzZXF1ZW5jZVVu
aXQ6IChib29sLGJvb2wpIHQKLQkgICAgdmFsIHdhcm5NYXRjaDogKGJvb2wsYm9vbCkgdAotCSAg
ICB2YWwgd2FybkV4bk1hdGNoOiAoYm9vbCxib29sKSB0CiAJICAgIHZhbCB3YXJuVW51c2VkOiAo
Ym9vbCxib29sKSB0CiAKIAkgICAgdmFsIGN1cnJlbnQ6ICgnYXJncywgJ3N0KSB0IC0+ICdzdApJ
bmRleDogbWx0b24vY29udHJvbC9jb250cm9sLWZsYWdzLnNtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtbHRv
bi9jb250cm9sL2NvbnRyb2wtZmxhZ3Muc21sCShyZXZpc2lvbiAzOTMzKQorKysgbWx0b24vY29u
dHJvbC9jb250cm9sLWZsYWdzLnNtbAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMTEgQEAK
IAkJICAgICBkZWZhdWx0ID0gZmFsc2UsCiAJCSAgICAgdG9TdHJpbmcgPSBCb29sLnRvU3RyaW5n
fQogCitkYXRhdHlwZSBkaWFnbm9zdGljID0KKyAgIEVycm9yCisgfCBJZ25vcmUKKyB8IFdhcm4K
KwogdmFsIGRpYWdQYXNzZXMgPSAKICAgIGNvbnRyb2wge25hbWUgPSAiZGlhZyBwYXNzZXMiLAog
CSAgICBkZWZhdWx0ID0gW10sCkBAIC0yNjMsNyArMjY4LDI0IEBACiAJCQkJICBbYXJnJ10gPT4g
Qm9vbC5mcm9tU3RyaW5nIGFyZycKIAkJCQl8IF8gPT4gTk9ORX0sIAogCQkgIGFjKQotCQorCisJ
IGZ1biBtYWtlRGlhZ25vc3RpYyAoe2RlZmF1bHQ6IGRpYWdub3N0aWMsCisJCQkgICAgICBleHBl
cnQ6IGJvb2wsCisJCQkgICAgICBuYW1lOiBzdHJpbmd9LCBhYykgPQorCSAgICAgbWFrZSAoe2Rl
ZmF1bHQgPSBkZWZhdWx0LAorCQkgICAgZXhwZXJ0ID0gZXhwZXJ0LAorCQkgICAgdG9TdHJpbmcg
PSBmbiBFcnJvciA9PiAiZXJyb3IiCisJCQkJfCBJZ25vcmUgPT4gImlnbm9yZSIKKwkJCQl8IFdh
cm4gPT4gIndhcm4iLAorCQkgICAgbmFtZSA9IG5hbWUsCisJCSAgICBuZXdDdXIgPSBmbiAoXyxk
KSA9PiBkLAorCQkgICAgbmV3RGVmID0gZm4gKF8sZCkgPT4gZCwKKwkJICAgIHBhcnNlQXJncyA9
IGZuIFsiZXJyb3IiXSA9PiBTT01FIEVycm9yCisJCQkJIHwgWyJpZ25vcmUiXSA9PiBTT01FIEln
bm9yZQorCQkJCSB8IFsid2FybiJdID0+IFNPTUUgV2FybgorCQkJCSB8IF8gPT4gTk9ORX0sCisJ
CSAgIGFjKQorCiAJZnVuIHNldEN1ciAoVCB7Y3VyLCAuLi59LCB4KSA9IGN1ciA6PSB4CiAJZnVu
IHNldERlZiAoVCB7ZGVmLCAuLi59LCB4KSA9IGRlZiA6PSB4CiAgICAgICBpbgpAQCAtMzMwLDEy
ICszNTIsNDcgQEAKIAkJCQkgIFtzXSA9PiBTT01FIHMKIAkJCQl8IF8gPT4gTk9ORX0sCiAJCSAg
YWMpCisJIHZhbCAoaWdub3JlTm9uZXhoYXVzdGl2ZUV4bk1hdGNoLCBhYykgPQorCSAgICAgbWFr
ZSAoe2RlZmF1bHQgPSBmYWxzZSwKKwkJICAgIGV4cGVydCA9IGZhbHNlLAorCQkgICAgdG9TdHJp
bmcgPSBmbiB0cnVlID0+ICJpZ25vcmUiIHwgZmFsc2UgPT4gImRlZmF1bHQiLAorCQkgICAgbmFt
ZSA9ICJub25leGhhdXN0aXZlRXhuTWF0Y2giLAorCQkgICAgbmV3Q3VyID0gZm4gKF8sYikgPT4g
YiwKKwkJICAgIG5ld0RlZiA9IGZuIChfLGIpID0+IGIsCisJCSAgICBwYXJzZUFyZ3MgPSBmbiAg
WyJkZWZhdWx0Il0gPT4gU09NRSBmYWxzZQorCQkJCSAgfCBbImlnbm9yZSJdID0+IFNPTUUgdHJ1
ZQorCQkJCSAgfCBfID0+IE5PTkV9LCAKKwkJICAgYWMpCisJIHZhbCAobm9uZXhoYXVzdGl2ZU1h
dGNoLCBhYykgPQorCSAgICAgbWFrZURpYWdub3N0aWMgKHtuYW1lID0gIm5vbmV4aGF1c3RpdmVN
YXRjaCIsIGRlZmF1bHQgPSBXYXJuLCBleHBlcnQgPSBmYWxzZX0sIGFjKQorCSB2YWwgKHJlZHVu
ZGFudE1hdGNoLCBhYykgPQorCSAgICAgbWFrZURpYWdub3N0aWMgKHtuYW1lID0gInJlZHVuZGFu
dE1hdGNoIiwgZGVmYXVsdCA9IFdhcm4sIGV4cGVydCA9IGZhbHNlfSwgYWMpCiAJIHZhbCAoc2Vx
dWVuY2VVbml0LCBhYykgPQogCSAgICBtYWtlQm9vbCAoe25hbWUgPSAic2VxdWVuY2VVbml0Iiwg
ZGVmYXVsdCA9IGZhbHNlLCBleHBlcnQgPSBmYWxzZX0sIGFjKQogCSB2YWwgKHdhcm5NYXRjaCwg
YWMpID0KLQkgICAgbWFrZUJvb2wgKHtuYW1lID0gIndhcm5NYXRjaCIsIGRlZmF1bHQgPSB0cnVl
LCBleHBlcnQgPSBmYWxzZX0sIGFjKQotCSB2YWwgKHdhcm5FeG5NYXRjaCwgYWMpID0KLQkgICAg
bWFrZUJvb2wgKHtuYW1lID0gIndhcm5FeG5NYXRjaCIsIGRlZmF1bHQgPSB0cnVlLCBleHBlcnQg
PSBmYWxzZX0sIGFjKQorCSAgICBtYWtlICh7ZGVmYXVsdCA9IHRydWUsCisJCSAgIGV4cGVydCA9
IGZhbHNlLAorCQkgICB0b1N0cmluZyA9IEJvb2wudG9TdHJpbmcsCisJCSAgIG5hbWUgPSAid2Fy
bk1hdGNoIiwKKwkJICAgbmV3Q3VyID0gZm4gKF8sIGIpID0+CisJCQkgICAgICAgbGV0CisJCQkJ
ICB2YWwgZCA9IGlmIGIgdGhlbiBXYXJuIGVsc2UgSWdub3JlCisJCQkgICAgICAgaW4KKwkJCQkg
IHNldEN1ciAobm9uZXhoYXVzdGl2ZU1hdGNoLCBkKQorCQkJCSAgOyBzZXRDdXIgKHJlZHVuZGFu
dE1hdGNoLCBkKQorCQkJCSAgOyBiCisJCQkgICAgICAgZW5kLAorCQkgICBuZXdEZWYgPSBmbiAo
XywgYikgPT4KKwkJCSAgICAgICBsZXQKKwkJCQkgIHZhbCBkID0gaWYgYiB0aGVuIFdhcm4gZWxz
ZSBJZ25vcmUKKwkJCSAgICAgICBpbgorCQkJCSAgc2V0RGVmIChub25leGhhdXN0aXZlTWF0Y2gs
IGQpCisJCQkJICA7IHNldERlZiAocmVkdW5kYW50TWF0Y2gsIGQpCisJCQkJICA7IGIKKwkJCSAg
ICAgICBlbmQsCisJCSAgIHBhcnNlQXJncyA9IGZuIFthcmcnXSA9PiBCb29sLmZyb21TdHJpbmcg
YXJnJworCQkJCXwgXyA9PiBOT05FfSwgCisJCSAgYWMpCiAJIHZhbCAod2FyblVudXNlZCwgYWMp
ID0KIAkgICAgbWFrZUJvb2wgKHtuYW1lID0gIndhcm5VbnVzZWQiLCBkZWZhdWx0ID0gZmFsc2Us
IGV4cGVydCA9IGZhbHNlfSwgYWMpCiAJIHZhbCB7cGFyc2VJZCwgcGFyc2VJZEFuZEFyZ3MsIHdp
dGhEZWYsIHNuYXBzaG90fSA9IGFjCkluZGV4OiBtbHRvbi9tYWluL21haW4uZnVuCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIG1sdG9uL21haW4vbWFpbi5mdW4JKHJldmlzaW9uIDM5MzMpCisrKyBtbHRvbi9tYWlu
L21haW4uZnVuCSh3b3JraW5nIGNvcHkpCkBAIC01ODksOCArNTg5LDEwIEBACiAJIG9yZWxzZSAo
Q29udHJvbC5FbGFib3JhdGUuZW5hYmxlZCBDb250cm9sLkVsYWJvcmF0ZS53YXJuVW51c2VkKQog
CSBvcmVsc2UgKENvbnRyb2wuRWxhYm9yYXRlLmRlZmF1bHQgQ29udHJvbC5FbGFib3JhdGUud2Fy
blVudXNlZCkKICAgICAgIHZhbCB3YXJuTWF0Y2ggPQotCSAoQ29udHJvbC5FbGFib3JhdGUuZW5h
YmxlZCBDb250cm9sLkVsYWJvcmF0ZS53YXJuTWF0Y2gpCi0JIG9yZWxzZSAoQ29udHJvbC5FbGFi
b3JhdGUuZGVmYXVsdCBDb250cm9sLkVsYWJvcmF0ZS53YXJuTWF0Y2gpCisJICAoQ29udHJvbC5F
bGFib3JhdGUuZW5hYmxlZCBDb250cm9sLkVsYWJvcmF0ZS5ub25leGhhdXN0aXZlTWF0Y2gpCisJ
ICBvcmVsc2UgKENvbnRyb2wuRWxhYm9yYXRlLmVuYWJsZWQgQ29udHJvbC5FbGFib3JhdGUucmVk
dW5kYW50TWF0Y2gpCisJICBvcmVsc2UgKENvbnRyb2wuSWdub3JlIDw+IENvbnRyb2wuRWxhYm9y
YXRlLmRlZmF1bHQgQ29udHJvbC5FbGFib3JhdGUubm9uZXhoYXVzdGl2ZU1hdGNoKQorCSAgb3Jl
bHNlIChDb250cm9sLklnbm9yZSA8PiBDb250cm9sLkVsYWJvcmF0ZS5kZWZhdWx0IENvbnRyb2wu
RWxhYm9yYXRlLnJlZHVuZGFudE1hdGNoKQogICAgICAgdmFsIF8gPSBlbGFib3JhdGVPbmx5IDo9
IChzdG9wID0gUGxhY2UuVHlwZUNoZWNrCiAJCQkJYW5kYWxzbyBub3QgKHdhcm5NYXRjaCkKIAkJ
CQlhbmRhbHNvIG5vdCAoa2VlcERlZlVzZSkpCkluZGV4OiBtbHRvbi9jb3JlLW1sL2NvcmUtbWwu
c2lnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIG1sdG9uL2NvcmUtbWwvY29yZS1tbC5zaWcJKHJldmlzaW9uIDM5
MzMpCisrKyBtbHRvbi9jb3JlLW1sL2NvcmUtbWwuc2lnCSh3b3JraW5nIGNvcHkpCkBAIC03Miwx
NiArNzIsMTcgQEAKIAkgICAgZGF0YXR5cGUgbm9NYXRjaCA9IEltcG9zc2libGUgfCBSYWlzZUFn
YWluIHwgUmFpc2VCaW5kIHwgUmFpc2VNYXRjaAogCSAgICBkYXRhdHlwZSBub2RlID0KIAkgICAg
ICAgQXBwIG9mIHQgKiB0Ci0JICAgICB8IENhc2Ugb2Yge2tpbmQ6IHN0cmluZywKKwkgICAgIHwg
Q2FzZSBvZiB7aWdub3JlTm9uZXhoYXVzdGl2ZUV4bk1hdGNoOiBib29sLAorCQkJa2luZDogc3Ry
aW5nLAogCQkJbGF5OiB1bml0IC0+IExheW91dC50LAogCQkJbm9NYXRjaDogbm9NYXRjaCwKKwkJ
CW5vbmV4aGF1c3RpdmVNYXRjaDogQ29udHJvbC5kaWFnbm9zdGljLAorCQkJcmVkdW5kYW50TWF0
Y2g6IENvbnRyb2wuZGlhZ25vc3RpYywKIAkJCXJlZ2lvbjogUmVnaW9uLnQsCiAJCQlydWxlczog
e2V4cDogdCwKIAkJCQlsYXk6ICh1bml0IC0+IExheW91dC50KSBvcHRpb24sCiAJCQkJcGF0OiBQ
YXQudH0gdmVjdG9yLAotCQkJdGVzdDogdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5F
eG5NYXRjaDogYm9vbCwKLQkJCXdhcm5NYXRjaDogYm9vbH0KKwkJCXRlc3Q6IHR9CiAJICAgICB8
IENvbiBvZiBDb24udCAqIFR5cGUudCB2ZWN0b3IKIAkgICAgIHwgQ29uc3Qgb2YgdW5pdCAtPiBD
b25zdC50CiAJICAgICB8IEVudGVyTGVhdmUgb2YgdCAqIFNvdXJjZUluZm8udApAQCAtMTAwLDE2
ICsxMDEsMTcgQEAKIAkgICAgIHwgVmFyIG9mICh1bml0IC0+IFZhci50KSAqICh1bml0IC0+IFR5
cGUudCB2ZWN0b3IpCiAKIAkgICAgdmFsIGFuZEFsc286IHQgKiB0IC0+IHQKLQkgICAgdmFsIGNh
c2VlOiB7a2luZDogc3RyaW5nLAorCSAgICB2YWwgY2FzZWU6IHtpZ25vcmVOb25leGhhdXN0aXZl
RXhuTWF0Y2g6IGJvb2wsCisJCQlraW5kOiBzdHJpbmcsCiAJCQlsYXk6IHVuaXQgLT4gTGF5b3V0
LnQsCiAJCQlub01hdGNoOiBub01hdGNoLAorCQkJbm9uZXhoYXVzdGl2ZU1hdGNoOiBDb250cm9s
LmRpYWdub3N0aWMsCisJCQlyZWR1bmRhbnRNYXRjaDogQ29udHJvbC5kaWFnbm9zdGljLAogCQkJ
cmVnaW9uOiBSZWdpb24udCwKIAkJCXJ1bGVzOiB7ZXhwOiB0LAogCQkJCWxheTogKHVuaXQgLT4g
TGF5b3V0LnQpIG9wdGlvbiwKIAkJCQlwYXQ6IFBhdC50fSB2ZWN0b3IsCi0JCQl0ZXN0OiB0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgd2FybkV4bk1hdGNoOiBib29sLAotCQkJd2Fybk1hdGNo
OiBib29sfSAtPiB0CisJCQl0ZXN0OiB0fSAtPiB0CiAJICAgIHZhbCBkZXN0OiB0IC0+IG5vZGUg
KiBUeXBlLnQKIAkgICAgdmFsIGlmZjogdCAqIHQgKiB0IC0+IHQKIAkgICAgdmFsIGZhbHNlZTog
dApAQCAtMTU4LDE1ICsxNjAsMTUgQEAKIAkgICAgIHwgRnVuIG9mIHtkZWNzOiB7bGFtYmRhOiBM
YW1iZGEudCwKIAkJCSAgICAgIHZhcjogVmFyLnR9IHZlY3RvciwKIAkJICAgICAgIHR5dmFyczog
dW5pdCAtPiBUeXZhci50IHZlY3Rvcn0KLQkgICAgIHwgVmFsIG9mIHtydmJzOiB7bGFtYmRhOiBM
YW1iZGEudCwKKwkgICAgIHwgVmFsIG9mIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2g6IGJv
b2wsCisJCSAgICAgICBub25leGhhdXN0aXZlTWF0Y2g6IENvbnRyb2wuZGlhZ25vc3RpYywKKwkJ
ICAgICAgIHJ2YnM6IHtsYW1iZGE6IExhbWJkYS50LAogCQkJICAgICAgdmFyOiBWYXIudH0gdmVj
dG9yLAogCQkgICAgICAgdHl2YXJzOiB1bml0IC0+IFR5dmFyLnQgdmVjdG9yLAogCQkgICAgICAg
dmJzOiB7ZXhwOiBFeHAudCwKIAkJCSAgICAgbGF5OiB1bml0IC0+IExheW91dC50LAogCQkJICAg
ICBwYXQ6IFBhdC50LAotCQkJICAgICBwYXRSZWdpb246IFJlZ2lvbi50fSB2ZWN0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHdhcm5FeG5NYXRjaDogYm9vbCwKLQkJICAgICAgIHdhcm5NYXRj
aDogYm9vbH0KKwkJCSAgICAgcGF0UmVnaW9uOiBSZWdpb24udH0gdmVjdG9yfQogCiAJICAgIHZh
bCBsYXlvdXQ6IHQgLT4gTGF5b3V0LnQKIAkgZW5kCkluZGV4OiBtbHRvbi9jb3JlLW1sL2NvcmUt
bWwuZnVuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIG1sdG9uL2NvcmUtbWwvY29yZS1tbC5mdW4JKHJldmlzaW9u
IDM5MzMpCisrKyBtbHRvbi9jb3JlLW1sL2NvcmUtbWwuZnVuCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQsMjkgKzE0NCwzMCBAQAogIHwgRnVuIG9mIHtkZWNzOiB7bGFtYmRhOiBsYW1iZGEsCiAJCSAg
dmFyOiBWYXIudH0gdmVjdG9yLAogCSAgIHR5dmFyczogdW5pdCAtPiBUeXZhci50IHZlY3Rvcn0K
LSB8IFZhbCBvZiB7cnZiczoge2xhbWJkYTogbGFtYmRhLAorIHwgVmFsIG9mIHtpZ25vcmVOb25l
eGhhdXN0aXZlRXhuTWF0Y2g6IGJvb2wsCisJICAgbm9uZXhoYXVzdGl2ZU1hdGNoOiBDb250cm9s
LmRpYWdub3N0aWMsCisJICAgcnZiczoge2xhbWJkYTogbGFtYmRhLAogCQkgIHZhcjogVmFyLnR9
IHZlY3RvciwKIAkgICB0eXZhcnM6IHVuaXQgLT4gVHl2YXIudCB2ZWN0b3IsCiAJICAgdmJzOiB7
ZXhwOiBleHAsCiAJCSBsYXk6IHVuaXQgLT4gTGF5b3V0LnQsCiAJCSBwYXQ6IFBhdC50LAotCQkg
cGF0UmVnaW9uOiBSZWdpb24udH0gdmVjdG9yLAotICAgICAgICAgICB3YXJuRXhuTWF0Y2g6IGJv
b2wsCi0JICAgd2Fybk1hdGNoOiBib29sfQorCQkgcGF0UmVnaW9uOiBSZWdpb24udH0gdmVjdG9y
fQogYW5kIGV4cCA9IEV4cCBvZiB7bm9kZTogZXhwTm9kZSwKIAkJICB0eTogVHlwZS50fQogYW5k
IGV4cE5vZGUgPQogICAgQXBwIG9mIGV4cCAqIGV4cAotICB8IENhc2Ugb2Yge2tpbmQ6IHN0cmlu
ZywKKyAgfCBDYXNlIG9mIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2g6IGJvb2wsCisJICAg
ICBraW5kOiBzdHJpbmcsCiAJICAgICBsYXk6IHVuaXQgLT4gTGF5b3V0LnQsCiAJICAgICBub01h
dGNoOiBub01hdGNoLAorCSAgICAgbm9uZXhoYXVzdGl2ZU1hdGNoOiBDb250cm9sLmRpYWdub3N0
aWMsCisJICAgICByZWR1bmRhbnRNYXRjaDogQ29udHJvbC5kaWFnbm9zdGljLAogCSAgICAgcmVn
aW9uOiBSZWdpb24udCwKIAkgICAgIHJ1bGVzOiB7ZXhwOiBleHAsCiAJCSAgICAgbGF5OiAodW5p
dCAtPiBMYXlvdXQudCkgb3B0aW9uLAogCQkgICAgIHBhdDogUGF0LnR9IHZlY3RvciwKLQkgICAg
IHRlc3Q6IGV4cCwKLSAgICAgICAgICAgICB3YXJuRXhuTWF0Y2g6IGJvb2wsCi0JICAgICB3YXJu
TWF0Y2g6IGJvb2x9CisJICAgICB0ZXN0OiBleHB9CiAgIHwgQ29uIG9mIENvbi50ICogVHlwZS50
IHZlY3RvcgogICB8IENvbnN0IG9mIHVuaXQgLT4gQ29uc3QudAogICB8IEVudGVyTGVhdmUgb2Yg
ZXhwICogU291cmNlSW5mby50CkBAIC0zNjQsOSArMzY1LDEyIEBACiAJIGVsc2UgbWFrZSAoQ2Fz
ZSB6LCB0eSAoI2V4cCAoVmVjdG9yLnN1YiAocnVsZXMsIDApKSkpCiAKICAgICAgIGZ1biBpZmYg
KHRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSk6IHQgPQotCSBjYXNlZSB7a2luZCA9ICJpZiIsCisJ
IGNhc2VlIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBmYWxzZSwKKwkJa2luZCA9ICJp
ZiIsCiAJCWxheSA9IGZuICgpID0+IExheW91dC5lbXB0eSwKIAkJbm9NYXRjaCA9IEltcG9zc2li
bGUsCisJCW5vbmV4aGF1c3RpdmVNYXRjaCA9IENvbnRyb2wuSWdub3JlLAorCQlyZWR1bmRhbnRN
YXRjaCA9IENvbnRyb2wuSWdub3JlLAogCQlyZWdpb24gPSBSZWdpb24uYm9ndXMsCiAJCXJ1bGVz
ID0gVmVjdG9yLm5ldzIgKHtleHAgPSB0aGVuQ2FzZSwKIAkJCQkgICAgICBsYXkgPSBOT05FLApA
QCAtMzc0LDkgKzM3OCw3IEBACiAJCQkJICAgICB7ZXhwID0gZWxzZUNhc2UsCiAJCQkJICAgICAg
bGF5ID0gTk9ORSwKIAkJCQkgICAgICBwYXQgPSBQYXQuZmFsc2VlfSksCi0JCXRlc3QgPSB0ZXN0
LAotICAgICAgICAgICAgICAgIHdhcm5FeG5NYXRjaCA9IGZhbHNlLAotCQl3YXJuTWF0Y2ggPSBm
YWxzZX0KKwkJdGVzdCA9IHRlc3R9CiAKICAgICAgIGZ1biBhbmRBbHNvIChlMSwgZTIpID0gaWZm
IChlMSwgZTIsIGZhbHNlZSkKIAkgCkluZGV4OiBtbHRvbi9lbGFib3JhdGUvZWxhYm9yYXRlLWVu
di5mdW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gbWx0b24vZWxhYm9yYXRlL2VsYWJvcmF0ZS1lbnYuZnVuCShy
ZXZpc2lvbiAzOTMzKQorKysgbWx0b24vZWxhYm9yYXRlL2VsYWJvcmF0ZS1lbnYuZnVuCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNSw4ICsxNSw4IEBACiBsb2NhbAogICAgb3BlbiBDb250cm9sLkVsYWJv
cmF0ZQogaW4KLSAgIHZhbCB3YXJuRXhuTWF0Y2ggPSBmbiAoKSA9PiBjdXJyZW50IHdhcm5FeG5N
YXRjaAotICAgdmFsIHdhcm5NYXRjaCA9IGZuICgpID0+IGN1cnJlbnQgd2Fybk1hdGNoCisgICB2
YWwgaWdub3JlTm9uZXhoYXVzdGl2ZUV4bk1hdGNoID0gZm4gKCkgPT4gY3VycmVudCBpZ25vcmVO
b25leGhhdXN0aXZlRXhuTWF0Y2gKKyAgIHZhbCBub25leGhhdXN0aXZlTWF0Y2ggPSBmbiAoKSA9
PiBjdXJyZW50IG5vbmV4aGF1c3RpdmVNYXRjaAogICAgdmFsIHdhcm5VbnVzZWQgPSBmbiAoKSA9
PiBjdXJyZW50IHdhcm5VbnVzZWQKIGVuZAogCkBAIC0yODk2LDE1ICsyODk2LDE1IEBACiAJCQkg
ICAgICAgdmFsIF8gPQogCQkJCSAgTGlzdC5wdXNoCiAJCQkJICAoZGVjcywKLQkJCQkgICBEZWMu
VmFsIHtydmJzID0gVmVjdG9yLm5ldzAgKCksCisJCQkJICAgRGVjLlZhbCB7aWdub3JlTm9uZXho
YXVzdGl2ZUV4bk1hdGNoID0gaWdub3JlTm9uZXhoYXVzdGl2ZUV4bk1hdGNoICgpLAorCQkJCQkg
ICAgbm9uZXhoYXVzdGl2ZU1hdGNoID0gbm9uZXhoYXVzdGl2ZU1hdGNoICgpLAorCQkJCQkgICAg
cnZicyA9IFZlY3Rvci5uZXcwICgpLAogCQkJCQkgICAgdHl2YXJzID0gZm4gKCkgPT4gc2lnQXJn
cywKIAkJCQkJICAgIHZicyA9IChWZWN0b3IubmV3MQogCQkJCQkJICAge2V4cCA9IGUsCiAJCQkJ
CQkgICAgbGF5ID0gZm4gXyA9PiBMYXlvdXQuZW1wdHksCiAJCQkJCQkgICAgcGF0ID0gUGF0LnZh
ciAoeCwgc3RyVHlwZSksCi0JCQkJCQkgICAgcGF0UmVnaW9uID0gcmVnaW9ufSksCi0JCQkJCSAg
ICB3YXJuTWF0Y2ggPSB3YXJuTWF0Y2ggKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdhcm5FeG5NYXRjaCA9IHdhcm5FeG5NYXRjaCAoKX0pCisJCQkJCQkg
ICAgcGF0UmVnaW9uID0gcmVnaW9ufSl9KQogCQkJICAgIGluCiAJCQkgICAgICAgVmlkLlZhciB4
CiAJCQkgICAgZW5kCkluZGV4OiBtbHRvbi9lbGFib3JhdGUvZWxhYm9yYXRlLWNvcmUuZnVuCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIG1sdG9uL2VsYWJvcmF0ZS9lbGFib3JhdGUtY29yZS5mdW4JKHJldmlzaW9u
IDM5MzMpCisrKyBtbHRvbi9lbGFib3JhdGUvZWxhYm9yYXRlLWNvcmUuZnVuCSh3b3JraW5nIGNv
cHkpCkBAIC0xNSw5ICsxNSwxMCBAQAogICAgb3BlbiBDb250cm9sLkVsYWJvcmF0ZQogaW4KICAg
IHZhbCBhbGxvd1JlYmluZEVxdWFscyA9IGZuICgpID0+IGN1cnJlbnQgYWxsb3dSZWJpbmRFcXVh
bHMKKyAgIHZhbCBpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBmbiAoKSA9PiBjdXJyZW50
IGlnbm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaAorICAgdmFsIG5vbmV4aGF1c3RpdmVNYXRjaCA9
IGZuICgpID0+IGN1cnJlbnQgbm9uZXhoYXVzdGl2ZU1hdGNoCisgICB2YWwgcmVkdW5kYW50TWF0
Y2ggPSBmbiAoKSA9PiBjdXJyZW50IHJlZHVuZGFudE1hdGNoCiAgICB2YWwgc2VxdWVuY2VVbml0
ID0gZm4gKCkgPT4gY3VycmVudCBzZXF1ZW5jZVVuaXQKLSAgIHZhbCB3YXJuTWF0Y2ggPSBmbiAo
KSA9PiBjdXJyZW50IHdhcm5NYXRjaAotICAgdmFsIHdhcm5FeG5NYXRjaCA9IGZuICgpID0+IGN1
cnJlbnQgd2FybkV4bk1hdGNoCiBlbmQKIAogbG9jYWwKQEAgLTk0Nyw5ICs5NDgsMTIgQEAKIAkJ
CQkgZWxzZSBleHBhbmRlZENiVHl9CiAgICAgICBpbgogCSBpZiBub3QgaXNCb29sIHRoZW4gZmV0
Y2hFeHAgZWxzZQotICAgICAgICAgQ2V4cC5jYXNlZSB7a2luZCA9ICIiLAorCSBDZXhwLmNhc2Vl
IHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBmYWxzZSwKKwkJICAgICBraW5kID0gIiIs
CiAJCSAgICAgbGF5ID0gZm4gKCkgPT4gTGF5b3V0LmVtcHR5LAogCQkgICAgIG5vTWF0Y2ggPSBD
ZXhwLkltcG9zc2libGUsCisJCSAgICAgbm9uZXhoYXVzdGl2ZU1hdGNoID0gQ29udHJvbC5JZ25v
cmUsCisJCSAgICAgcmVkdW5kYW50TWF0Y2ggPSBDb250cm9sLklnbm9yZSwKIAkJICAgICByZWdp
b24gPSBSZWdpb24uYm9ndXMsCiAJCSAgICAgcnVsZXMgPSBWZWN0b3IubmV3MgogCQkgICAgICAg
ICAgICAgKHtleHAgPSBDZXhwLnRydWVlLCBsYXkgPSBOT05FLCBwYXQgPSBDcGF0LmZhbHNlZX0s
CkBAIC05NTcsOSArOTYxLDcgQEAKIAkJICAgICB0ZXN0ID0gcHJpbUFwcAogCQkgICAgICAgICAg
ICB7YXJncyA9IFZlY3Rvci5uZXcyIChmZXRjaEV4cCwgemVyb0V4cCksCiAJCQkgICAgIHByaW0g
PSBQcmltLndvcmRFcXVhbCBXb3JkU2l6ZS5kZWZhdWx0LAotCQkJICAgICByZXN1bHQgPSBleHBh
bmRlZENiVHl9LAotICAgICAgICAgICAgICAgICAgICAgd2FybkV4bk1hdGNoID0gZmFsc2UsCi0J
CSAgICAgd2Fybk1hdGNoID0gZmFsc2V9CisJCQkgICAgIHJlc3VsdCA9IGV4cGFuZGVkQ2JUeX19
CiAgICAgICBlbmQKIAogICAgZnVuIHN0b3JlIHtjdHlwZUNiVHksIGlzQm9vbCwKQEAgLTk2Nywx
NiArOTY5LDE3IEBACiAgICAgICBsZXQKIAkgdmFsIHZhbHVlRXhwID0KIAkgICAgaWYgbm90IGlz
Qm9vbCB0aGVuIHZhbHVlRXhwIGVsc2UKLQkgICAgQ2V4cC5jYXNlZSB7a2luZCA9ICIiLAorCSAg
ICBDZXhwLmNhc2VlIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBmYWxzZSwKKwkJCWtp
bmQgPSAiIiwKIAkJCWxheSA9IGZuICgpID0+IExheW91dC5lbXB0eSwKIAkJCW5vTWF0Y2ggPSBD
ZXhwLkltcG9zc2libGUsCisJCQlub25leGhhdXN0aXZlTWF0Y2ggPSBDb250cm9sLklnbm9yZSwK
KwkJCXJlZHVuZGFudE1hdGNoID0gQ29udHJvbC5JZ25vcmUsCiAJCQlyZWdpb24gPSBSZWdpb24u
Ym9ndXMsCiAJCQlydWxlcyA9IFZlY3Rvci5uZXcyIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoe2V4cCA9IG9uZUV4cCwgbGF5ID0gTk9ORSwgcGF0ID0gQ3BhdC50cnVlZX0sCiAJ
CQkJIHtleHAgPSB6ZXJvRXhwLCBsYXkgPSBOT05FLCBwYXQgPSBDcGF0LmZhbHNlZX0pLAotCQkJ
dGVzdCA9IHZhbHVlRXhwLAotICAgICAgICAgICAgICAgICAgICAgICAgd2FybkV4bk1hdGNoID0g
ZmFsc2UsCi0JCQl3YXJuTWF0Y2ggPSBmYWxzZX0KKwkJCXRlc3QgPSB2YWx1ZUV4cH0KICAgICAg
IGluCiAJIHByaW1BcHAge2FyZ3MgPSBWZWN0b3IubmV3MyAocHRyRXhwLCB6ZXJvRXhwLCB2YWx1
ZUV4cCksCiAJCSAgcHJpbSA9IFByaW0ucG9pbnRlclNldCBjdHlwZUNiVHksCkBAIC0xMDgxLDE0
ICsxMDg0LDE1IEBACiAJCQkgICAgIHB0ckV4cCA9IENleHAudmFyIChzZXRBcmdQdHIsIGV4cGFu
ZGVkUHRyVHkpLAogCQkJICAgICB2YWx1ZUV4cCA9IENleHAudmFyIChzZXRBcmdWYWx1ZSwgZXhw
YW5kZWRDYlR5KX0KIAkgdmFsIHNldEJvZHkgPQotCSAgICBDZXhwLmNhc2VlIHtraW5kID0gIiIs
CisJICAgIENleHAuY2FzZWUge2lnbm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaCA9IGZhbHNlLAor
CQkJa2luZCA9ICIiLAogCQkJbGF5ID0gZm4gKCkgPT4gTGF5b3V0LmVtcHR5LAogCQkJbm9NYXRj
aCA9IENleHAuSW1wb3NzaWJsZSwKKwkJCW5vbmV4aGF1c3RpdmVNYXRjaCA9IENvbnRyb2wuSWdu
b3JlLAorCQkJcmVkdW5kYW50TWF0Y2ggPSBDb250cm9sLklnbm9yZSwKIAkJCXJlZ2lvbiA9IFJl
Z2lvbi5ib2d1cywKIAkJCXJ1bGVzID0gVmVjdG9yLm5ldzEgKHtleHAgPSBzZXRFeHAsIGxheSA9
IE5PTkUsIHBhdCA9IHNldFBhdH0pLAotCQkJdGVzdCA9IENleHAudmFyIChzZXRBcmcsIGVsYWJl
ZFNldEFyZ1R5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5FeG5NYXRjaCA9IGZhbHNl
LAotCQkJd2Fybk1hdGNoID0gZmFsc2V9CisJCQl0ZXN0ID0gQ2V4cC52YXIgKHNldEFyZywgZWxh
YmVkU2V0QXJnVHkpfQogICAgICAgaW4KIAkgKENleHAudHVwbGUgbyBWZWN0b3IubmV3MikKIAkg
KHdyYXAgKChDZXhwLmxhbWJkYSBvIExhbWJkYS5tYWtlKQpAQCAtMTg4MSw5ICsxODg1LDEyIEBA
CiAJCQkJICAgICAgbGV0CiAJCQkJCSB2YWwgZSA9CiAJCQkJCSAgICBDZXhwLmNhc2VlCi0JCQkJ
CSAgICB7a2luZCA9ICJmdW5jdGlvbiIsCisJCQkJCSAgICB7aWdub3JlTm9uZXhoYXVzdGl2ZUV4
bk1hdGNoID0gaWdub3JlTm9uZXhoYXVzdGl2ZUV4bk1hdGNoICgpLAorCQkJCQkgICAgIGtpbmQg
PSAiZnVuY3Rpb24iLAogCQkJCQkgICAgIGxheSA9IGxheSwKIAkJCQkJICAgICBub01hdGNoID0g
Q2V4cC5SYWlzZU1hdGNoLAorCQkJCQkgICAgIG5vbmV4aGF1c3RpdmVNYXRjaCA9IG5vbmV4aGF1
c3RpdmVNYXRjaCAoKSwKKwkJCQkJICAgICByZWR1bmRhbnRNYXRjaCA9IHJlZHVuZGFudE1hdGNo
ICgpLAogCQkJCQkgICAgIHJlZ2lvbiA9IHJlZ2lvbiwKIAkJCQkJICAgICBydWxlcyA9CiAJCQkJ
CSAgICAgVmVjdG9yLm1hcApAQCAtMTkwMyw5ICsxOTEwLDcgQEAKIAkJCQkJICAgICB0ZXN0ID0g
CiAJCQkJCSAgICAgQ2V4cC50dXBsZQogCQkJCQkgICAgIChWZWN0b3IubWFwMgotCQkJCQkgICAg
ICAoeHMsIGFyZ1R5cGVzLCBDZXhwLnZhcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2FybkV4bk1hdGNoID0gd2FybkV4bk1hdGNoICgpLAotCQkJCQkg
ICAgIHdhcm5NYXRjaCA9IHdhcm5NYXRjaCAoKX0KKwkJCQkJICAgICAgKHhzLCBhcmdUeXBlcywg
Q2V4cC52YXIpKX0KIAkJCQkgICAgICBpbgogCQkJCQkgQ2V4cC5lbnRlckxlYXZlCiAJCQkJCSAo
ZSwgcHJvZmlsZUJvZHksIHNvdXJjZUluZm8pCkBAIC0yMDk2LDE0ICsyMTAxLDE1IEBACiAJCQkg
ICAgIHZhbCBhcmcgPSBWYXIubmV3Tm9uYW1lICgpCiAJCQkgICAgIHZhbCBib2R5ID0KIAkJCQlD
ZXhwLmVudGVyTGVhdmUKLQkJCQkoQ2V4cC5jYXNlZSB7a2luZCA9ICJmdW5jdGlvbiIsCisJCQkJ
KENleHAuY2FzZWUge2lnbm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaCA9IGlnbm9yZU5vbmV4aGF1
c3RpdmVFeG5NYXRjaCAoKSwKKwkJCQkJICAgICBraW5kID0gImZ1bmN0aW9uIiwKIAkJCQkJICAg
ICBsYXkgPSBsYXksCiAJCQkJCSAgICAgbm9NYXRjaCA9IENleHAuUmFpc2VNYXRjaCwKKwkJCQkJ
ICAgICBub25leGhhdXN0aXZlTWF0Y2ggPSBub25leGhhdXN0aXZlTWF0Y2ggKCksCisJCQkJCSAg
ICAgcmVkdW5kYW50TWF0Y2ggPSByZWR1bmRhbnRNYXRjaCAoKSwKIAkJCQkJICAgICByZWdpb24g
PSByZWdpb24sCiAJCQkJCSAgICAgcnVsZXMgPSBydWxlcywKLQkJCQkJICAgICB0ZXN0ID0gQ2V4
cC52YXIgKGFyZywgYXJnVHlwZSksCi0JCQkJCSAgICAgd2FybkV4bk1hdGNoID0gd2FybkV4bk1h
dGNoICgpLAotCQkJCQkgICAgIHdhcm5NYXRjaCA9IHdhcm5NYXRjaCAoKX0sCisJCQkJCSAgICAg
dGVzdCA9IENleHAudmFyIChhcmcsIGFyZ1R5cGUpfSwKIAkJCQkgcHJvZmlsZUJvZHksCiAJCQkJ
IGZuICgpID0+IFNvdXJjZUluZm8uZnVuY3Rpb24ge25hbWUgPSBuZXN0LAogCQkJCQkJCSAgICAg
ICByZWdpb24gPSByZWdpb259KQpAQCAtMjE5MSwxMSArMjE5NywxMSBAQAogCQkgICAgICAgKikK
IAkJICAgaW4KIAkJICAgICAgRGVjcy5zaW5nbGUKLQkJICAgICAgKENkZWMuVmFsIHtydmJzID0g
cnZicywKKwkJICAgICAgKENkZWMuVmFsIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBp
Z25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggKCksCisJCQkJIG5vbmV4aGF1c3RpdmVNYXRjaCA9
IG5vbmV4aGF1c3RpdmVNYXRjaCAoKSwKKwkJCQkgcnZicyA9IHJ2YnMsCiAJCQkJIHR5dmFycyA9
IGJvdW5kLAotCQkJCSB2YnMgPSB2YnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3YXJuRXhuTWF0Y2ggPSB3YXJuRXhuTWF0Y2ggKCksCi0JCQkJIHdhcm5NYXRjaCA9IHdhcm5N
YXRjaCAoKX0pCisJCQkJIHZicyA9IHZic30pCiAJCSAgIGVuZAogCSAgZW5kKSBhcmcKICAgICAg
IGFuZCBlbGFiRXhwIChhcmc6IEFleHAudCAqIE5lc3QudCAqIHN0cmluZyBvcHRpb24pOiBDZXhw
LnQgPQpAQCAtMjI3MSwxNCArMjI3NywxNSBAQAogCQkJICAgYWxpZ24gW3NlcSBbc3RyICJvYmpl
Y3QgdHlwZTogICIsIGwxXSwKIAkJCQkgIHNlcSBbc3RyICJydWxlcyBleHBlY3Q6ICIsIGwyXV0p
KQogCQkgICBpbgotCQkgICAgICBDZXhwLmNhc2VlIHtraW5kID0gImNhc2UiLAorCQkgICAgICBD
ZXhwLmNhc2VlIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBpZ25vcmVOb25leGhhdXN0
aXZlRXhuTWF0Y2ggKCksCisJCQkJICBraW5kID0gImNhc2UiLAogCQkJCSAgbGF5ID0gbGF5LAog
CQkJCSAgbm9NYXRjaCA9IENleHAuUmFpc2VNYXRjaCwKKwkJCQkgIG5vbmV4aGF1c3RpdmVNYXRj
aCA9IG5vbmV4aGF1c3RpdmVNYXRjaCAoKSwKKwkJCQkgIHJlZHVuZGFudE1hdGNoID0gcmVkdW5k
YW50TWF0Y2ggKCksCiAJCQkJICByZWdpb24gPSByZWdpb24sCiAJCQkJICBydWxlcyA9IHJ1bGVz
LAotCQkJCSAgdGVzdCA9IGUsCi0JCQkJICB3YXJuRXhuTWF0Y2ggPSB3YXJuRXhuTWF0Y2ggKCks
Ci0JCQkJICB3YXJuTWF0Y2ggPSB3YXJuTWF0Y2ggKCl9CisJCQkJICB0ZXN0ID0gZX0KIAkJICAg
ZW5kCiAJICAgICAgfCBBZXhwLkNvbnN0IGMgPT4KIAkJICAgZWxhYkNvbnN0CkBAIC0yNDcxLDkg
KzI0NzgsMTIgQEAKIAkJCQkJCSAgKFZhci5uZXdOb25hbWUgKCksIHQpKQogCQkJCQkgICBpbgog
CQkJCQkgICAgICBDZXhwLmNhc2VlCi0JCQkJCSAgICAgIHtraW5kID0gIiIsCisJCQkJCSAgICAg
IHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2ggPSBmYWxzZSwKKwkJCQkJICAgICAgIGtpbmQg
PSAiIiwKIAkJCQkJICAgICAgIGxheSA9IGZuIF8gPT4gTGF5b3V0LmVtcHR5LAogCQkJCQkgICAg
ICAgbm9NYXRjaCA9IENleHAuSW1wb3NzaWJsZSwKKwkJCQkJICAgICAgIG5vbmV4aGF1c3RpdmVN
YXRjaCA9IENvbnRyb2wuSWdub3JlLAorCQkJCQkgICAgICAgcmVkdW5kYW50TWF0Y2ggPSBDb250
cm9sLklnbm9yZSwKIAkJCQkJICAgICAgIHJlZ2lvbiA9IFJlZ2lvbi5ib2d1cywKIAkJCQkJICAg
ICAgIHJ1bGVzID0gVmVjdG9yLm5ldzEKIAkJCQkJICAgICAgICAgICAgICAge2V4cCA9IGFwcCAo
VmVjdG9yLm1hcApAQCAtMjQ4Miw5ICsyNDkyLDcgQEAKIAkJCQkJCQlwYXQgPSBDcGF0LnR1cGxl
IAogCQkJCQkJCSAgICAgIChWZWN0b3IubWFwIAogCQkJCQkJCSAgICAgICAodmFycywgQ3BhdC52
YXIpKX0sCi0JCQkJCSAgICAgICAgdGVzdCA9IENleHAudmFyIChhcmcsIGFyZ1R5cGUpLAotCQkJ
CQkJd2FybkV4bk1hdGNoID0gZmFsc2UsCi0JCQkJCQl3YXJuTWF0Y2ggPSBmYWxzZX0KKwkJCQkJ
ICAgICAgIHRlc3QgPSBDZXhwLnZhciAoYXJnLCBhcmdUeXBlKX0KIAkJCQkJICAgZW5kCiAJCQkg
ICAgICAgaW4KIAkJCQkgIENleHAubWFrZSAoQ2V4cC5MYW1iZGEKQEAgLTI5MDUsMTQgKzI5MTMs
MTUgQEAKIAkgICAgdmFsIGFyZyA9IFZhci5uZXdOb25hbWUgKCkKIAkgICAgdmFsIHthcmdUeXBl
LCByZWdpb24sIHJ1bGVzLCAuLi59ID0gZWxhYk1hdGNoIChtLCBwcmVFcnJvciwgbmVzdCkKIAkg
ICAgdmFsIGJvZHkgPQotCSAgICAgICBDZXhwLmNhc2VlIHtraW5kID0ga2luZCwKKwkgICAgICAg
Q2V4cC5jYXNlZSB7aWdub3JlTm9uZXhoYXVzdGl2ZUV4bk1hdGNoID0gaWdub3JlTm9uZXhoYXVz
dGl2ZUV4bk1hdGNoICgpLAorCQkJICAga2luZCA9IGtpbmQsCiAJCQkgICBsYXkgPSBsYXksCiAJ
CQkgICBub01hdGNoID0gbm9NYXRjaCwKKwkJCSAgIG5vbmV4aGF1c3RpdmVNYXRjaCA9IG5vbmV4
aGF1c3RpdmVNYXRjaCAoKSwKKwkJCSAgIHJlZHVuZGFudE1hdGNoID0gcmVkdW5kYW50TWF0Y2gg
KCksCiAJCQkgICByZWdpb24gPSByZWdpb24sCiAJCQkgICBydWxlcyA9IHJ1bGVzLAotCQkJICAg
dGVzdCA9IENleHAudmFyIChhcmcsIGFyZ1R5cGUpLAotCQkJICAgd2FybkV4bk1hdGNoID0gd2Fy
bkV4bk1hdGNoICgpLAotCQkJICAgd2Fybk1hdGNoID0gd2Fybk1hdGNoICgpfQorCQkJICAgdGVz
dCA9IENleHAudmFyIChhcmcsIGFyZ1R5cGUpfQogCSBpbgogCSAgIHthcmcgPSBhcmcsCiAJICAg
IGFyZ1R5cGUgPSBhcmdUeXBlLApJbmRleDogbWx0b24vZGVmdW5jdG9yaXplL2RlZnVuY3Rvcml6
ZS5mdW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gbWx0b24vZGVmdW5jdG9yaXplL2RlZnVuY3Rvcml6ZS5mdW4J
KHJldmlzaW9uIDM5MzMpCisrKyBtbHRvbi9kZWZ1bmN0b3JpemUvZGVmdW5jdG9yaXplLmZ1bgko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDIxICsxMDEsMjIgQEAKIGZ1biBlbnRlckxlYXZlIChlOiBY
ZXhwLnQsIHQsIHNpKTogWGV4cC50ID0KICAgIFhleHAuZnJvbUV4cCAoWG1sLkV4cC5lbnRlckxl
YXZlIChYZXhwLnRvRXhwIGUsIHQsIHNpKSwgdCkKIAotdmFsIHdhcm5pbmdzOiAodW5pdCAtPiB1
bml0KSBsaXN0IHJlZiA9IHJlZiBbXQordmFsIGRpYWdub3N0aWNzOiAodW5pdCAtPiB1bml0KSBs
aXN0IHJlZiA9IHJlZiBbXQogICAgCiBmdW4gY2FzZWUge2Nhc2VUeXBlOiBYdHlwZS50LAogCSAg
IGNhc2VzOiB7ZXhwOiBYZXhwLnQsCiAJCSAgIGxheTogKHVuaXQgLT4gTGF5b3V0LnQpIG9wdGlv
biwKIAkJICAgcGF0OiBOZXN0ZWRQYXQudH0gdmVjdG9yLAogCSAgIGNvblR5Y29uLAorCSAgIGln
bm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaDogYm9vbCwKIAkgICBraW5kOiBzdHJpbmcsCiAJICAg
bGF5OiB1bml0IC0+IExheW91dC50LAogCSAgIG5vTWF0Y2gsCisJICAgbm9uZXhoYXVzdGl2ZU1h
dGNoOiBDb250cm9sLmRpYWdub3N0aWMsCisJICAgcmVkdW5kYW50TWF0Y2g6IENvbnRyb2wuZGlh
Z25vc3RpYywKIAkgICByZWdpb246IFJlZ2lvbi50LAogCSAgIHRlc3QgPSAodGVzdDogWGV4cC50
LCB0ZXN0VHlwZTogWHR5cGUudCksCi0JICAgdHljb25Db25zLAotICAgICAgICAgICB3YXJuRXhu
TWF0Y2g6IGJvb2wsCi0gICAgICAgICAgIHdhcm5NYXRjaDogYm9vbH06IFhleHAudCA9CisJICAg
dHljb25Db25zfTogWGV4cC50ID0KICAgIGxldAogICAgICAgdmFsIGNhc2VzID0gVmVjdG9yLm1h
cCAoY2FzZXMsIGZuIHtleHAsIGxheSwgcGF0fSA9PgogCQkJICAgICAge2V4cCA9IGZuICgpID0+
IGV4cCwKQEAgLTI3MCw2OSArMjcxLDc2IEBACiAJCSAgICAgZWxzZSBtYXRjaENvbXBpbGUgKCkK
ICAgICAgICAgICAgICAgICB8IF8gPT4gbWF0Y2hDb21waWxlICgpCiAJICAgIGVuZAotICAgICAg
ZnVuIHdhcm4gKCkgPQorICAgICAgZnVuIGRpYWdub3NlTm9uZXhoYXVzdGl2ZU1hdGNoICgpID0K
KwkgaWYgbm9NYXRjaCA9IENleHAuUmFpc2VBZ2FpbgorCSAgICB0aGVuICgpCisJIGVsc2UKKwkg
ICAgY2FzZSBWZWN0b3IucGVla2kgKGNhc2VzLAorCQkJICAgICAgIGZuIChfLCB7aXNEZWZhdWx0
LCBudW1Vc2VzLCAuLi59KSA9PgorCQkJCSAgaXNEZWZhdWx0IGFuZGFsc28gIW51bVVzZXMgPiAw
KSBvZgorCSAgICAgICBOT05FID0+ICgpCisJICAgICB8IFNPTUUgKGksIF8pID0+CisJICAgICAg
IGxldAorCQkgIHZhbCBlcyA9IFZlY3Rvci5zdWIgKCFleGFtcGxlcyAoKSwgaSkKKwkJICB2YWwg
ZXMgPQorCQkgICAgICBpZiBpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2gKKwkJCSB0aGVuIFZl
Y3Rvci5rZWVwQWxsTWFwCisJCQkJIChlcywgZm4gKGUsIHtpc09ubHlFeG5zfSkgPT4KKwkJCQkg
IGlmIGlzT25seUV4bnMKKwkJCQkgICAgIHRoZW4gTk9ORQorCQkJCSAgZWxzZSBTT01FIGUpCisJ
CSAgICAgIGVsc2UgVmVjdG9yLm1hcCAoZXMsICMxKQorCisJCSAgb3BlbiBMYXlvdXQKKwkgICAg
ICAgaW4KKwkJICBpZiAwID0gVmVjdG9yLmxlbmd0aCBlcworCQkgICAgIHRoZW4gKCkKKwkJICBl
bHNlCisJCSAgICAgKGlmIENvbnRyb2wuRXJyb3IgPSBub25leGhhdXN0aXZlTWF0Y2gKKwkJCSB0
aGVuIENvbnRyb2wuZXJyb3IKKwkJICAgICAgZWxzZSBDb250cm9sLndhcm5pbmcpCisJCSAgICAg
KHJlZ2lvbiwKKwkJICAgICAgc3RyIChjb25jYXQgW2tpbmQsICIgaXMgbm90IGV4aGF1c3RpdmUi
XSksCisJCSAgICAgIGFsaWduIFtzZXEgW3N0ciAibWlzc2luZyBwYXR0ZXJuOiAiLAorCQkJCSAg
TGF5b3V0LmFsaWduUHJlZml4CisJCQkJICAgICAoVmVjdG9yLnRvTGlzdCBlcywgInwgIildLAor
CQkJICAgICBsYXkgKCldKQorCSAgICAgICBlbmQKKyAgICAgIGZ1biBkaWFnbm9zZVJlZHVuZGFu
dE1hdGNoICgpID0KIAkgbGV0Ci0JICAgIHZhbCBfID0KLQkgICAgICAgaWYgbm9NYXRjaCA9IENl
eHAuUmFpc2VBZ2FpbgotICAgICAgICAgICAgICAgICAgdGhlbiAoKQotICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgY2FzZSBWZWN0b3IucGVla2kgKGNhc2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuIChfLCB7aXNEZWZhdWx0LCBudW1Vc2Vz
LCAuLi59KSA9PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmYXVs
dCBhbmRhbHNvICFudW1Vc2VzID4gMCkgb2YKLSAgICAgICAgICAgICAgICAgICAgIE5PTkUgPT4g
KCkKLSAgICAgICAgICAgICAgICAgICB8IFNPTUUgKGksIF8pID0+Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCBlcyA9IFZlY3Rvci5z
dWIgKCFleGFtcGxlcyAoKSwgaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCBlcyA9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB3YXJuRXhuTWF0Y2gKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gVmVjdG9yLm1hcCAoZXMsICMxKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yLmtlZXBBbGxNYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChlcywgZm4gKGUsIHtpc09ubHlFeG5zfSkgPT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBpc09ubHlFeG5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhlbiBOT05FCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBTT01F
IGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuIExheW91dAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIDAgPSBWZWN0b3Iu
bGVuZ3RoIGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuICgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b250cm9sLndhcm5pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyIChjb25jYXQgW2tpbmQsICIgaXMgbm90
IGV4aGF1c3RpdmUiXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gW3Nl
cSBbc3RyICJtaXNzaW5nIHBhdHRlcm46ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0LmFsaWduUHJlZml4Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKFZlY3Rvci50b0xpc3QgZXMsICJ8ICIpXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ICgpXSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAogCSAgICB2YWwgcmVkdW5kYW50ID0KLQkgICAgICAgVmVjdG9yLmtlZXBBbGwg
KGNhc2VzLCBmbiB7aXNEZWZhdWx0LCBudW1Vc2VzLCAuLi59ID0+Ci0JCQkgICAgICAgbm90IGlz
RGVmYXVsdCBhbmRhbHNvICFudW1Vc2VzID0gMCkKLQkgICAgdmFsIF8gPQotCSAgICAgICBpZiAw
ID0gVmVjdG9yLmxlbmd0aCByZWR1bmRhbnQKLQkJICB0aGVuICgpCi0JICAgICAgIGVsc2UgCi0J
CSAgbGV0Ci0JCSAgICAgb3BlbiBMYXlvdXQKLQkJICBpbgotCQkgICAgIENvbnRyb2wud2Fybmlu
ZwotCQkgICAgIChyZWdpb24sCi0JCSAgICAgIHN0ciAoY29uY2F0IFtraW5kLCAiIGhhcyByZWR1
bmRhbnQgcnVsZXMiXSksCi0JCSAgICAgIGFsaWduCisJCVZlY3Rvci5rZWVwQWxsIChjYXNlcywg
Zm4ge2lzRGVmYXVsdCwgbnVtVXNlcywgLi4ufSA9PgorCQkJCW5vdCBpc0RlZmF1bHQgYW5kYWxz
byAhbnVtVXNlcyA9IDApCisJIGluCisJICAgIGlmIDAgPSBWZWN0b3IubGVuZ3RoIHJlZHVuZGFu
dAorCSAgICAgICB0aGVuICgpCisJICAgIGVsc2UgCisJICAgICAgIGxldAorCQkgIG9wZW4gTGF5
b3V0CisJICAgICAgIGluCisJCSAgKGlmIENvbnRyb2wuRXJyb3IgPSByZWR1bmRhbnRNYXRjaAor
CQkgICAgICB0aGVuIENvbnRyb2wuZXJyb3IKKwkJICAgZWxzZSBDb250cm9sLndhcm5pbmcpCisJ
CSAgKHJlZ2lvbiwKKwkJICAgc3RyIChjb25jYXQgW2tpbmQsICIgaGFzIHJlZHVuZGFudCBydWxl
cyJdKSwKKwkJICAgYWxpZ24KIAkJICAgICAgW3NlcSBbc3RyICJydWxlczogIiwKIAkJCSAgICBh
bGlnbiAoVmVjdG9yLnRvTGlzdE1hcAotCQkJCSAgIChyZWR1bmRhbnQsIGZuIHtsYXksIC4uLn0g
PT4KLQkJCQkgICAgY2FzZSBsYXkgb2YKLQkJCQkgICAgICAgTk9ORSA9PiBFcnJvci5idWcgIkRl
ZnVuY3Rvcml6ZS5jYXNlZTogcmVkdW5kYW50IG1hdGNoIHdpdGggbm8gbGF5IgotCQkJCSAgICAg
fCBTT01FIGwgPT4gbCAoKSkpXSwKKwkJCQkgICAgICAocmVkdW5kYW50LCBmbiB7bGF5LCAuLi59
ID0+CisJCQkJICAgICAgIGNhc2UgbGF5IG9mCisJCQkJCSAgTk9ORSA9PiBFcnJvci5idWcgIkRl
ZnVuY3Rvcml6ZS5jYXNlZTogcmVkdW5kYW50IG1hdGNoIHdpdGggbm8gbGF5IgorCQkJCQl8IFNP
TUUgbCA9PiBsICgpKSldLAogCQkgICAgICAgbGF5ICgpXSkKLQkJICBlbmQKLQkgaW4KLQkgICAg
KCkKKwkgICAgICAgZW5kCiAJIGVuZAotICAgICAgdmFsIF8gPSBpZiB3YXJuTWF0Y2ggdGhlbiBM
aXN0LnB1c2ggKHdhcm5pbmdzLCB3YXJuKSBlbHNlICgpCiAgICBpbgotICAgICAgZXhwCisgICAg
ICBpZiBDb250cm9sLklnbm9yZSA8PiByZWR1bmRhbnRNYXRjaAorCSB0aGVuIExpc3QucHVzaCAo
ZGlhZ25vc3RpY3MsIGRpYWdub3NlUmVkdW5kYW50TWF0Y2gpCisgICAgICBlbHNlICgpCisgICAg
ICA7IGlmIENvbnRyb2wuSWdub3JlIDw+IG5vbmV4aGF1c3RpdmVNYXRjaAorCSAgIHRoZW4gTGlz
dC5wdXNoIChkaWFnbm9zdGljcywgZGlhZ25vc2VOb25leGhhdXN0aXZlTWF0Y2gpCisJZWxzZSAo
KQorICAgICAgOyBleHAKICAgIGVuZAogCiB2YWwgY2FzZWUgPQpAQCAtNzE0LDcgKzcyMiw3IEBA
CiAJICAgICB8IEZ1biB7ZGVjcywgdHl2YXJzfSA9PgogCQkgIHByZWZpeCAoWGRlYy5GdW4ge2Rl
Y3MgPSBwcm9jZXNzTGFtYmRhcyBkZWNzLAogCQkJCSAgICB0eXZhcnMgPSB0eXZhcnMgKCl9KQot
CSAgICAgfCBWYWwge3J2YnMsIHR5dmFycywgdmJzLCB3YXJuRXhuTWF0Y2gsIHdhcm5NYXRjaH0g
PT4KKwkgICAgIHwgVmFsIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0Y2gsIG5vbmV4aGF1c3Rp
dmVNYXRjaCwgcnZicywgdHl2YXJzLCB2YnN9ID0+CiAJICAgICAgIGxldAogCQkgIHZhbCB0eXZh
cnMgPSB0eXZhcnMgKCkKIAkJICB2YWwgYm9keVR5cGUgPSBldApAQCAtNzMyLDE0ICs3NDAsMTcg
QEAKIAkJCQkJCQlsYXkgPSBTT01FIGxheSwKIAkJCQkJCQlwYXQgPSBwfSwKIAkJCQkgICBjb25U
eWNvbiA9IGNvblR5Y29uLAorCQkJCSAgIGlnbm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaCA9IGln
bm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaCwKIAkJCQkgICBraW5kID0gImRlY2xhcmF0aW9uIiwK
IAkJCQkgICBsYXkgPSBsYXksCiAJCQkJICAgbm9NYXRjaCA9IENleHAuUmFpc2VCaW5kLAorCQkJ
CSAgIG5vbmV4aGF1c3RpdmVNYXRjaCA9IGlmIG1heVdhcm4KKwkJCQkJCQkgICB0aGVuIG5vbmV4
aGF1c3RpdmVNYXRjaAorCQkJCQkJCWVsc2UgQ29udHJvbC5JZ25vcmUsCisJCQkJICAgcmVkdW5k
YW50TWF0Y2ggPSBDb250cm9sLklnbm9yZSwKIAkJCQkgICByZWdpb24gPSBwYXRSZWdpb24sCiAJ
CQkJICAgdGVzdCA9IChlLCBOZXN0ZWRQYXQudHkgcCksCi0JCQkJICAgdHljb25Db25zID0gdHlj
b25Db25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuRXhuTWF0Y2gg
PSB3YXJuRXhuTWF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5N
YXRjaCA9IHdhcm5NYXRjaCBhbmRhbHNvIG1heVdhcm59CisJCQkJICAgdHljb25Db25zID0gdHlj
b25Db25zfQogCQkJIHZhbCBpc0V4cGFuc2l2ZSA9IENleHAuaXNFeHBhbnNpdmUgZXhwCiAJCQkg
dmFsIChleHAsIGV4cFR5cGUpID0gbG9vcEV4cCBleHAKIAkJCSB2YWwgcGF0ID0gbG9vcFBhdCBw
YXQKQEAgLTkyMiwyMiArOTMzLDI0IEBACiAJCQkJCWZ1bmMgPSAjMSAobG9vcEV4cCBlMSksCiAJ
CQkJCXR5ID0gdHl9CiAJCSAgICAgZW5kCi0JCXwgQ2FzZSB7a2luZCwgbGF5LCBub01hdGNoLCBy
ZWdpb24sIHJ1bGVzLCB0ZXN0LCB3YXJuRXhuTWF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB3YXJuTWF0Y2gsIC4uLn0gPT4KKwkJfCBDYXNlIHtpZ25vcmVOb25leGhhdXN0aXZlRXhuTWF0
Y2gsIGtpbmQsIGxheSwgbm9NYXRjaCwKKwkJCW5vbmV4aGF1c3RpdmVNYXRjaCwgcmVkdW5kYW50
TWF0Y2gsIHJlZ2lvbiwgcnVsZXMsCisJCQl0ZXN0LCAuLi59ID0+CiAJCSAgICAgY2FzZWUge2Nh
c2VUeXBlID0gdHksCiAJCQkgICAgY2FzZXMgPSBWZWN0b3IubWFwIChydWxlcywgZm4ge2V4cCwg
bGF5LCBwYXR9ID0+CiAJCQkJCQl7ZXhwID0gIzEgKGxvb3BFeHAgZXhwKSwKIAkJCQkJCSBsYXkg
PSBsYXksCiAJCQkJCQkgcGF0ID0gbG9vcFBhdCBwYXR9KSwKIAkJCSAgICBjb25UeWNvbiA9IGNv
blR5Y29uLAorCQkJICAgIGlnbm9yZU5vbmV4aGF1c3RpdmVFeG5NYXRjaCA9IGlnbm9yZU5vbmV4
aGF1c3RpdmVFeG5NYXRjaCwKIAkJCSAgICBraW5kID0ga2luZCwKIAkJCSAgICBsYXkgPSBsYXks
CiAJCQkgICAgbm9NYXRjaCA9IG5vTWF0Y2gsCisJCQkgICAgbm9uZXhoYXVzdGl2ZU1hdGNoID0g
bm9uZXhoYXVzdGl2ZU1hdGNoLAorCQkJICAgIHJlZHVuZGFudE1hdGNoID0gcmVkdW5kYW50TWF0
Y2gsCiAJCQkgICAgcmVnaW9uID0gcmVnaW9uLAogCQkJICAgIHRlc3QgPSBsb29wRXhwIHRlc3Qs
Ci0JCQkgICAgdHljb25Db25zID0gdHljb25Db25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdhcm5FeG5NYXRjaCA9IHdhcm5FeG5NYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3YXJuTWF0Y2ggPSB3YXJuTWF0Y2h9CisJCQkgICAgdHljb25Db25zID0gdHljb25Db25z
fQogCQl8IENvbiAoY29uLCB0YXJncykgPT4KIAkJICAgICBsZXQKIAkJCXZhbCB0YXJncyA9IGNv
blRhcmdzIChjb24sIHRhcmdzKQpAQCAtMTA2MCw3ICsxMDczLDcgQEAKIAkgICAgIG1heUlubGlu
ZSA9IG1heUlubGluZX0KIAkgZW5kCiAgICAgICB2YWwgYm9keSA9IFhleHAudG9FeHAgKGxvb3BE
ZWNzIChkZWNzLCAoWGV4cC51bml0ICgpLCBYdHlwZS51bml0KSkpCi0gICAgICB2YWwgXyA9IExp
c3QuZm9yZWFjaCAoIXdhcm5pbmdzLCBmbiBmID0+IGYgKCkpCisgICAgICB2YWwgXyA9IExpc3Qu
Zm9yZWFjaCAoIWRpYWdub3N0aWNzLCBmbiBmID0+IGYgKCkpCiAgICAgICB2YWwgXyA9IChkZXN0
cm95MSAoKTsgZGVzdHJveTIgKCk7IGRlc3Ryb3kzICgpKQogICAgaW4KICAgICAgIFhtbC5Qcm9n
cmFtLlQge2JvZHkgPSBib2R5LAo=

---MOQ1123019139f5d4f3685fc84ee32e53e0d72cd5f5ff--