Making extlib compile under -safe-string

Gabriel Scherer <[email protected]> Sun, 28 Sep 2014 23:21:10 +0200
Newsgroups gmane.comp.lang.ocaml.lib.devel
Message-ID <CAPFanBEj-Q_=dExYaiXAePXiO6tiKpky9zTf=oem2cHBTdM0+g@mail.gmail.com>
--90e6ba613f7a0d1c85050426bd0b
Content-Type: multipart/alternative; boundary=90e6ba613f7a0d1c81050426bd09

--90e6ba613f7a0d1c81050426bd09
Content-Type: text/plain; charset=UTF-8

Dear all,

Attached is a patch that enables compilation of Extlib under -safe-string
(the new OCaml 4.02.0 option that makes string immutable and creates a
distinct type "bytes" of mutable sequences of bytes).
This is a relatively invasive change:
- a dependency on the Bytes compatibility package of recent ocamlfind
versions (>=1.5.3) is introduced
- a fair number of interface functions have argument or return type that
changed from "string" to "Bytes.t"
- IO.{nwrite,nread} have been duplicated to manipulate either string or
byte sequences
- a new extBuffer is added, that conditionally backports bytes-related
Buffer function

I am interested in any feedback on the change. My own interest for doing
this work on Extlib is that I plan to make a minor release of Batteries
that compiles with -safe-string. Batteries being a strict superset of the
Extlib codebase, I thought having a clean transition for Extlib would be a
good first step.

Regards

--90e6ba613f7a0d1c81050426bd09
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><div><div><div>Dear all,<br><br>Attached is a patch t=
hat enables compilation of Extlib under -safe-string (the new OCaml 4.02.0 =
option that makes string immutable and creates a distinct type &quot;bytes&=
quot; of mutable sequences of bytes).<br>This is a relatively invasive chan=
ge:<br></div>- a dependency on the Bytes compatibility package of recent oc=
amlfind versions (&gt;=3D1.5.3) is introduced<br><div>- a fair number of in=
terface functions have argument or return type that changed from &quot;stri=
ng&quot; to &quot;Bytes.t&quot;<br></div>- IO.{nwrite,nread} have been dupl=
icated to manipulate either string or byte sequences <br></div>- a new extB=
uffer is added, that conditionally backports bytes-related Buffer function<=
br><br></div>I am interested in any feedback on the change. My own interest=
 for doing this work on Extlib is that I plan to make a minor release of Ba=
tteries that compiles with -safe-string. Batteries being a strict superset =
of the Extlib codebase, I thought having a clean transition for Extlib woul=
d be a good first step.<br><br></div>Regards<br></div>

--90e6ba613f7a0d1c81050426bd09--
--90e6ba613f7a0d1c85050426bd0b
Content-Type: text/x-patch; charset=US-ASCII; name="extlib-safe-string.patch"
Content-Disposition: attachment; filename="extlib-safe-string.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i0mw5jtb0

RnJvbSBlZDk3YzkwNDYwNDk4NDgwZGY2ZjFmOTYxYWMwODQ5ZTUyYjc2ODYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJyaWVsIFNjaGVyZXIgPGdhYnJpZWwuc2NoZXJlckBnbWFp
bC5jb20+CkRhdGU6IFN1biwgMjggU2VwIDIwMTQgMjM6MDk6MzIgKzAyMDAKU3ViamVjdDogW1BB
VENIXSB1cGRhdGUgZXh0bGliIHRvIGJlIGNvbXBpbGFibGUgdW5kZXIgLXNhZmUtc3RyaW5nCgot
LS0KIGV4dGxpYi9JTy5tbCAgICAgICAgICB8IDE0OCArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogZXh0bGliL0lPLm1saSAgICAgICAgIHwgIDg2ICsr
KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiBleHRsaWIvTUVUQSAgICAgICAgICAgfCAgIDEg
KwogZXh0bGliL01ha2VmaWxlICAgICAgIHwgIDEyICsrLS0KIGV4dGxpYi9iYXNlNjQubWwgICAg
ICB8ICAxMiArKy0tCiBleHRsaWIvYmFzZTY0Lm1saSAgICAgfCAgIDQgKy0KIGV4dGxpYi9iaXRT
ZXQubWwgICAgICB8ICAgOCArLS0KIGV4dGxpYi9jb25maWd1cmUubWwgICB8ICAgNSArLQogZXh0
bGliL2V4dEJ1ZmZlci5tbGkgIHwgIDY4ICsrKysrKysrKysrKysrKysrKysrKysrCiBleHRsaWIv
ZXh0QnVmZmVyLm1scHAgfCAgMjIgKysrKysrKysKIGV4dGxpYi9leHRTdHJpbmcubWwgICB8ICAz
OSArKysrKysrLS0tLS0tCiBleHRsaWIvZXh0U3RyaW5nLm1saSAgfCAgMTQgKystLS0KIGV4dGxp
Yi9zdGQubWwgICAgICAgICB8ICAxMyArKystLQogZXh0bGliL3VuemlwLm1sICAgICAgIHwgIDQ2
ICsrKysrKysrLS0tLS0tLS0KIGV4dGxpYi91bnppcC5tbGkgICAgICB8ICAgMiArLQogMTUgZmls
ZXMgY2hhbmdlZCwgMzE4IGluc2VydGlvbnMoKyksIDE2MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBleHRsaWIvZXh0QnVmZmVyLm1saQogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dGxp
Yi9leHRCdWZmZXIubWxwcAoKZGlmZiAtLWdpdCBhL2V4dGxpYi9JTy5tbCBiL2V4dGxpYi9JTy5t
bAppbmRleCBkZWU5Mzg3Li42ZDgzYmRkIDEwMDY0NAotLS0gYS9leHRsaWIvSU8ubWwKKysrIGIv
ZXh0bGliL0lPLm1sCkBAIC0yMCwxMyArMjAsMTMgQEAKIAogdHlwZSBpbnB1dCA9IHsKIAltdXRh
YmxlIGluX3JlYWQgOiB1bml0IC0+IGNoYXI7Ci0JbXV0YWJsZSBpbl9pbnB1dCA6IHN0cmluZyAt
PiBpbnQgLT4gaW50IC0+IGludDsKKwltdXRhYmxlIGluX2lucHV0IDogQnl0ZXMudCAtPiBpbnQg
LT4gaW50IC0+IGludDsKIAltdXRhYmxlIGluX2Nsb3NlIDogdW5pdCAtPiB1bml0OwogfQogCiB0
eXBlICdhIG91dHB1dCA9IHsKIAltdXRhYmxlIG91dF93cml0ZSA6IGNoYXIgLT4gdW5pdDsKLQlt
dXRhYmxlIG91dF9vdXRwdXQgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiBpbnQ7CisJbXV0YWJs
ZSBvdXRfb3V0cHV0IDogQnl0ZXMudCAtPiBpbnQgLT4gaW50IC0+IGludDsKIAltdXRhYmxlIG91
dF9jbG9zZSA6IHVuaXQgLT4gJ2E7CiAJbXV0YWJsZSBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7
CiB9CkBAIC01OSwxMCArNTksOSBAQCBsZXQgcmVhZCBpID0gaS5pbl9yZWFkKCkKIAogbGV0IG5y
ZWFkIGkgbiA9CiAJaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyAiSU8ubnJlYWQiOwotCWlmIG4g
PSAwIHRoZW4KLQkJIiIKKwlpZiBuID0gMCB0aGVuIEJ5dGVzLmVtcHR5CiAJZWxzZQotCWxldCBz
ID0gU3RyaW5nLmNyZWF0ZSBuIGluCisJbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpbgogCWxldCBs
ID0gcmVmIG4gaW4KIAlsZXQgcCA9IHJlZiAwIGluCiAJdHJ5CkBAIC03NiwxNCArNzUsMTkgQEAg
bGV0IG5yZWFkIGkgbiA9CiAJd2l0aAogCQlOb19tb3JlX2lucHV0IGFzIGUgLT4KIAkJCWlmICFw
ID0gMCB0aGVuIHJhaXNlIGU7Ci0JCQlTdHJpbmcuc3ViIHMgMCAhcAorCQkJQnl0ZXMuc3ViIHMg
MCAhcAorCitsZXQgbnJlYWRfc3RyaW5nIGkgbiA9CisgICgqIFtucmVhZF0gdHJhbnNmZXJzIG93
bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgc3RyaW5nLCBzbworICAgICBbdW5zYWZlX3RvX3N0cmlu
Z10gaXMgc2FmZSBoZXJlICopCisgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAobnJlYWQgaSBuKQog
CiBsZXQgcmVhbGx5X291dHB1dCBvIHMgcCBsJyA9Ci0JbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBz
IGluCisJbGV0IHNsID0gQnl0ZXMubGVuZ3RoIHMgaW4KIAlpZiBwICsgbCcgPiBzbCB8fCBwIDwg
MCB8fCBsJyA8IDAgdGhlbiBpbnZhbGlkX2FyZyAiSU8ucmVhbGx5X291dHB1dCI7CiAgICAJbGV0
IGwgPSByZWYgbCcgaW4KIAlsZXQgcCA9IHJlZiBwIGluCi0Jd2hpbGUgIWwgPiAwIGRvIAorCXdo
aWxlICFsID4gMCBkbwogCQlsZXQgdyA9IG8ub3V0X291dHB1dCBzICFwICFsIGluCiAJCWlmIHcg
PSAwIHRoZW4gcmFpc2UgU3lzX2Jsb2NrZWRfaW87CiAJCXAgOj0gIXAgKyB3OwpAQCAtOTIsNyAr
OTYsNyBAQCBsZXQgcmVhbGx5X291dHB1dCBvIHMgcCBsJyA9CiAJbCcKIAogbGV0IGlucHV0IGkg
cyBwIGwgPQotCWxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpbgorCWxldCBzbCA9IEJ5dGVzLmxl
bmd0aCBzIGluCiAJaWYgcCArIGwgPiBzbCB8fCBwIDwgMCB8fCBsIDwgMCB0aGVuIGludmFsaWRf
YXJnICJJTy5pbnB1dCI7CiAJaWYgbCA9IDAgdGhlbgogCQkwCkBAIC0xMDAsNyArMTA0LDcgQEAg
bGV0IGlucHV0IGkgcyBwIGwgPQogCQlpLmluX2lucHV0IHMgcCBsCiAKIGxldCByZWFsbHlfaW5w
dXQgaSBzIHAgbCcgPQotCWxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpbgorCWxldCBzbCA9IEJ5
dGVzLmxlbmd0aCBzIGluCiAJaWYgcCArIGwnID4gc2wgfHwgcCA8IDAgfHwgbCcgPCAwIHRoZW4g
aW52YWxpZF9hcmcgIklPLnJlYWxseV9pbnB1dCI7CiAJbGV0IGwgPSByZWYgbCcgaW4KIAlsZXQg
cCA9IHJlZiBwIGluCkBAIC0xMTQsMTMgKzExOCwxOCBAQCBsZXQgcmVhbGx5X2lucHV0IGkgcyBw
IGwnID0KIAogbGV0IHJlYWxseV9ucmVhZCBpIG4gPQogCWlmIG4gPCAwIHRoZW4gaW52YWxpZF9h
cmcgIklPLnJlYWxseV9ucmVhZCI7Ci0JaWYgbiA9IDAgdGhlbiAiIgorCWlmIG4gPSAwIHRoZW4g
Qnl0ZXMuZW1wdHkKIAllbHNlCi0JbGV0IHMgPSBTdHJpbmcuY3JlYXRlIG4gCisJbGV0IHMgPSBC
eXRlcy5jcmVhdGUgbgogCWluCiAJaWdub3JlKHJlYWxseV9pbnB1dCBpIHMgMCBuKTsKIAlzCiAK
K2xldCByZWFsbHlfbnJlYWRfc3RyaW5nIGkgbiA9CisgICgqIFtyZWFsbHlfbnJlYWRdIHRyYW5z
ZmVycyBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHN0cmluZywKKyAgICAgc28gW3Vuc2FmZV90
b19zdHJpbmddIGlzIHNhZmUgaGVyZSAqKQorICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIChyZWFs
bHlfbnJlYWQgaSBuKQorCiBsZXQgY2xvc2VfaW4gaSA9CiAJbGV0IGYgXyA9IHJhaXNlIElucHV0
X2Nsb3NlZCBpbgogCWkuaW5fY2xvc2UoKTsKQEAgLTEzMiw3ICsxNDEsNyBAQCBsZXQgd3JpdGUg
byB4ID0gby5vdXRfd3JpdGUgeAogCiBsZXQgbndyaXRlIG8gcyA9CiAJbGV0IHAgPSByZWYgMCBp
bgotCWxldCBsID0gcmVmIChTdHJpbmcubGVuZ3RoIHMpIGluCisgICAgICAgIGxldCBsID0gcmVm
IChCeXRlcy5sZW5ndGggcykgaW4KIAl3aGlsZSAhbCA+IDAgZG8KIAkJbGV0IHcgPSBvLm91dF9v
dXRwdXQgcyAhcCAhbCBpbgogCQlpZiB3ID0gMCB0aGVuIHJhaXNlIFN5c19ibG9ja2VkX2lvOwpA
QCAtMTQwLDggKzE0OSwxMyBAQCBsZXQgbndyaXRlIG8gcyA9CiAJCWwgOj0gIWwgLSB3OwogCWRv
bmUKIAorbGV0IG53cml0ZV9zdHJpbmcgbyBzID0KKyAgKCogW253cml0ZV0gZG9lcyBub3QgbXV0
YXRlIG9yIGNhcHR1cmUgaXRzIFtieXRlc10gaW5wdXQsCisgICAgIHNvIHVzaW5nIFtCeXRlcy51
bnNhZmVfb2Zfc3RyaW5nXSBpcyBzYWZlIGhlcmUgKikKKyAgbndyaXRlIG8gKEJ5dGVzLnVuc2Fm
ZV9vZl9zdHJpbmcgcykKKwogbGV0IG91dHB1dCBvIHMgcCBsID0KLQlsZXQgc2wgPSBTdHJpbmcu
bGVuZ3RoIHMgaW4KKwlsZXQgc2wgPSBCeXRlcy5sZW5ndGggcyBpbgogCWlmIHAgKyBsID4gc2wg
fHwgcCA8IDAgfHwgbCA8IDAgdGhlbiBpbnZhbGlkX2FyZyAiSU8ub3V0cHV0IjsKIAlvLm91dF9v
dXRwdXQgcyBwIGwKIApAQCAtMTUwLDcgKzE2NCw3IEBAIGxldCBzY2FuZiBpIGZtdCA9CiAJU2Nh
bmYua3NjYW5mIGliIChmdW4gXyBleG4gLT4gcmFpc2UgZXhuKSBmbXQKIAogbGV0IHByaW50ZiBv
IGZtdCA9Ci0JUHJpbnRmLmtwcmludGYgKGZ1biBzIC0+IG53cml0ZSBvIHMpIGZtdAorICBQcmlu
dGYua3ByaW50ZiAoZnVuIHMgLT4gbndyaXRlX3N0cmluZyBvIHMpIGZtdAogCiBsZXQgZmx1c2gg
byA9IG8ub3V0X2ZsdXNoKCkKIApAQCAtMTcwLDE4ICsxODQsMTkgQEAgbGV0IHJlYWRfYWxsIGkg
PQogCWxldCByZWMgbG9vcCgpID0KIAkJbGV0IHMgPSBucmVhZCBpIG1heGxlbiBpbgogCQlzdHIg
Oj0gKHMsIXBvcykgOjogIXN0cjsKLQkJcG9zIDo9ICFwb3MgKyBTdHJpbmcubGVuZ3RoIHM7CisJ
CXBvcyA6PSAhcG9zICsgQnl0ZXMubGVuZ3RoIHM7CiAJCWxvb3AoKQogCWluCiAJdHJ5CiAJCWxv
b3AoKQogCXdpdGgKIAkJTm9fbW9yZV9pbnB1dCAtPgotCQkJbGV0IGJ1ZiA9IFN0cmluZy5jcmVh
dGUgIXBvcyBpbgorCQkJbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSAhcG9zIGluCiAJCQlMaXN0Lml0
ZXIgKGZ1biAocyxwKSAtPgotCQkJCVN0cmluZy51bnNhZmVfYmxpdCBzIDAgYnVmIHAgKFN0cmlu
Zy5sZW5ndGggcykKKwkJCQlCeXRlcy5ibGl0IHMgMCBidWYgcCAoQnl0ZXMubGVuZ3RoIHMpCiAJ
CQkpICFzdHI7Ci0JCQlidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICgqICdidWYnIGRvZXNu
J3QgZXNjYXBlLCBpdCB3b24ndCBiZSBtdXRhdGVkIGFnYWluICopCisJCQlCeXRlcy51bnNhZmVf
dG9fc3RyaW5nIGJ1ZgogCiBsZXQgcG9zX2luIGkgPQogCWxldCBwID0gcmVmIDAgaW4KQEAgLTIx
OCwzOSArMjMzLDQ0IEBAIGxldCBwb3Nfb3V0IG8gPQogKCogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKikKICgqIFN0YW5kYXJk
IElPICopCiAKLWxldCBpbnB1dF9zdHJpbmcgcyA9CitsZXQgaW5wdXRfYnl0ZXMgcyA9CiAJbGV0
IHBvcyA9IHJlZiAwIGluCi0JbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpbgorCWxldCBsZW4g
PSBCeXRlcy5sZW5ndGggcyBpbgogCXsKIAkJaW5fcmVhZCA9IChmdW4gKCkgLT4KIAkJCWlmICFw
b3MgPj0gbGVuIHRoZW4gcmFpc2UgTm9fbW9yZV9pbnB1dDsKLQkJCWxldCBjID0gU3RyaW5nLnVu
c2FmZV9nZXQgcyAhcG9zIGluCisJCQlsZXQgYyA9IEJ5dGVzLnVuc2FmZV9nZXQgcyAhcG9zIGlu
CiAJCQlpbmNyIHBvczsKIAkJCWMKIAkJKTsKIAkJaW5faW5wdXQgPSAoZnVuIHNvdXQgcCBsIC0+
CiAJCQlpZiAhcG9zID49IGxlbiB0aGVuIHJhaXNlIE5vX21vcmVfaW5wdXQ7CiAJCQlsZXQgbiA9
IChpZiAhcG9zICsgbCA+IGxlbiB0aGVuIGxlbiAtICFwb3MgZWxzZSBsKSBpbgotCQkJU3RyaW5n
LnVuc2FmZV9ibGl0IHMgIXBvcyBzb3V0IHAgbjsKKwkJCUJ5dGVzLnVuc2FmZV9ibGl0IHMgIXBv
cyBzb3V0IHAgbjsKIAkJCXBvcyA6PSAhcG9zICsgbjsKIAkJCW4KIAkJKTsKIAkJaW5fY2xvc2Ug
PSAoZnVuICgpIC0+ICgpKTsKIAl9CiAKLWxldCBvdXRwdXRfc3RyaW5nKCkgPQotCWxldCBiID0g
QnVmZmVyLmNyZWF0ZSAwIGluCi0JewotCQlvdXRfd3JpdGUgPSAoZnVuIGMgLT4KLQkJCUJ1ZmZl
ci5hZGRfY2hhciBiIGMKLQkJKTsKLQkJb3V0X291dHB1dCA9IChmdW4gcyBwIGwgLT4KLQkJCUJ1
ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyBwIGw7Ci0JCQlsCi0JCSk7Ci0JCW91dF9jbG9zZSA9IChm
dW4gKCkgLT4gQnVmZmVyLmNvbnRlbnRzIGIpOwotCQlvdXRfZmx1c2ggPSAoZnVuICgpIC0+ICgp
KTsKLQl9CitsZXQgaW5wdXRfc3RyaW5nIHMgPQorICAoKiBCeXRlcy51bnNhZmVfb2Zfc3RyaW5n
IGlzIHNhZmUgaGVyZSBhcyBpbnB1dF9ieXRlcyBkb2VzIG5vdAorICAgICBtdXRhdGUgdGhlIGJ5
dGUgc2VxdWVuY2UgKikKKyAgaW5wdXRfYnl0ZXMgKEJ5dGVzLnVuc2FmZV9vZl9zdHJpbmcgcykK
Kworb3BlbiBFeHRCdWZmZXIKKworbGV0IG91dHB1dF9idWZmZXIgY2xvc2UgPQorICBsZXQgYiA9
IEJ1ZmZlci5jcmVhdGUgMCBpbgorICB7CisgICAgb3V0X3dyaXRlID0gKGZ1biBjIC0+IEJ1ZmZl
ci5hZGRfY2hhciBiIGMpOworICAgIG91dF9vdXRwdXQgPSAoZnVuIHMgcCBsIC0+IEJ1ZmZlci5h
ZGRfc3ViYnl0ZXMgYiBzIHAgbDsgbCk7CisgICAgb3V0X2Nsb3NlID0gKGZ1biAoKSAtPiBjbG9z
ZSBiKTsKKyAgICBvdXRfZmx1c2ggPSAoZnVuICgpIC0+ICgpKTsKKyAgfQorCitsZXQgb3V0cHV0
X3N0cmluZyAoKSA9IG91dHB1dF9idWZmZXIgQnVmZmVyLmNvbnRlbnRzCitsZXQgb3V0cHV0X2J5
dGVzICgpID0gb3V0cHV0X2J1ZmZlciBCdWZmZXIudG9fYnl0ZXMKIAogbGV0IG91dHB1dF9zdHJp
bmdzKCkgPQogCWxldCBzbCA9IHJlZiBbXSBpbgpAQCAtMjcxLDcgKzI5MSw3IEBAIGxldCBvdXRw
dXRfc3RyaW5ncygpID0KIAkJCQlCdWZmZXIuY2xlYXIgYjsKIAkJCQlzaXplIDo9IDA7CiAJCQll
bmQgZWxzZSBzaXplIDo9ICFzaXplICsgbDsKLQkJCUJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyBw
IGw7CisJCQlCdWZmZXIuYWRkX3N1YmJ5dGVzIGIgcyBwIGw7CiAJCQlsCiAJCSk7CiAJCW91dF9j
bG9zZSA9IChmdW4gKCkgLT4gc2wgOj0gQnVmZmVyLmNvbnRlbnRzIGIgOjogIXNsOyBMaXN0LnJl
diAoIXNsKSk7CkBAIC0zMjEsNyArMzQxLDcgQEAgbGV0IGlucHV0X2VudW0gZSA9CiAJCQkJCW1h
dGNoIEVudW0uZ2V0IGUgd2l0aAogCQkJCQl8IE5vbmUgLT4gbAogCQkJCQl8IFNvbWUgYyAtPgot
CQkJCQkJU3RyaW5nLnVuc2FmZV9zZXQgcyBwIGM7CisJCQkJCQlCeXRlcy51bnNhZmVfc2V0IHMg
cCBjOwogCQkJCQkJbG9vcCAocCArIDEpIChsIC0gMSkKIAkJCWluCiAJCQlsZXQgayA9IGxvb3Ag
cCBsIGluCkBAIC0zMzgsNyArMzU4LDcgQEAgbGV0IG91dHB1dF9lbnVtKCkgPQogCQkJQnVmZmVy
LmFkZF9jaGFyIGIgeAogCQkpOwogCQlvdXRfb3V0cHV0ID0gKGZ1biBzIHAgbCAtPgotCQkJQnVm
ZmVyLmFkZF9zdWJzdHJpbmcgYiBzIHAgbDsKKwkJCUJ1ZmZlci5hZGRfc3ViYnl0ZXMgYiBzIHAg
bDsKIAkJCWwKIAkJKTsKIAkJb3V0X2Nsb3NlID0gKGZ1biAoKSAtPgpAQCAtMzc1LDcgKzM5NSw3
IEBAIGxldCBwaXBlKCkgPQogCQlCdWZmZXIuYWRkX2NoYXIgb3V0cHV0IGMKIAlpbgogCWxldCBv
dXRwdXQgcyBwIGwgPQotCQlCdWZmZXIuYWRkX3N1YnN0cmluZyBvdXRwdXQgcyBwIGw7CisJCUJ1
ZmZlci5hZGRfc3ViYnl0ZXMgb3V0cHV0IHMgcCBsOwogCQlsCiAJaW4KIAlsZXQgaW5wdXQgPSB7
CkBAIC00MDcsMTcgKzQyNywyNSBAQCBsZXQgcmVhZF9zaWduZWRfYnl0ZSBpID0KIAllbHNlCiAJ
CWMKIAorbGV0IHJlYWRfc3RyaW5nX2ludG9fYnVmZmVyIGkgPQorICBsZXQgYiA9IEJ1ZmZlci5j
cmVhdGUgOCBpbgorICBsZXQgcmVjIGxvb3AoKSA9CisgICAgbGV0IGMgPSBpLmluX3JlYWQoKSBp
bgorICAgIGlmIGMgPD4gJ1wwMDAnIHRoZW4gYmVnaW4KKyAgICAgIEJ1ZmZlci5hZGRfY2hhciBi
IGM7CisgICAgICBsb29wKCk7CisgICAgZW5kOworICBpbgorICBsb29wKCk7CisgIGIKKwogbGV0
IHJlYWRfc3RyaW5nIGkgPQotCWxldCBiID0gQnVmZmVyLmNyZWF0ZSA4IGluCi0JbGV0IHJlYyBs
b29wKCkgPQotCQlsZXQgYyA9IGkuaW5fcmVhZCgpIGluCi0JCWlmIGMgPD4gJ1wwMDAnIHRoZW4g
YmVnaW4KLQkJCUJ1ZmZlci5hZGRfY2hhciBiIGM7Ci0JCQlsb29wKCk7Ci0JCWVuZDsKLQlpbgot
CWxvb3AoKTsKLQlCdWZmZXIuY29udGVudHMgYgorICBCdWZmZXIuY29udGVudHMKKyAgICAocmVh
ZF9zdHJpbmdfaW50b19idWZmZXIgaSkKKworbGV0IHJlYWRfYnl0ZXMgaSA9CisgIEJ1ZmZlci50
b19ieXRlcworICAgIChyZWFkX3N0cmluZ19pbnRvX2J1ZmZlciBpKQogCiBsZXQgcmVhZF9saW5l
IGkgPQogCWxldCBiID0gQnVmZmVyLmNyZWF0ZSA4IGluCkBAIC01MDYsMTEgKzUzNCwxNSBAQCBs
ZXQgd3JpdGVfYnl0ZSBvIG4gPQogCXdyaXRlIG8gKENoYXIudW5zYWZlX2NociAobiBsYW5kIDB4
RkYpKQogCiBsZXQgd3JpdGVfc3RyaW5nIG8gcyA9CisJbndyaXRlX3N0cmluZyBvIHM7CisJd3Jp
dGUgbyAnXDAwMCcKKworbGV0IHdyaXRlX2J5dGVzIG8gcyA9CiAJbndyaXRlIG8gczsKIAl3cml0
ZSBvICdcMDAwJwogCiBsZXQgd3JpdGVfbGluZSBvIHMgPQotCW53cml0ZSBvIHM7CisJbndyaXRl
X3N0cmluZyBvIHM7CiAJd3JpdGUgbyAnXG4nCiAKIGxldCB3cml0ZV91aTE2IGNoIG4gPQpAQCAt
Njg3LDcgKzcxOSw3IEBAIGxldCByZWMgcmVhZF9iaXRzIGIgbiA9CiAJCQliLmJpdHMgPC0gazsK
IAkJCWIubmJpdHMgPC0gYzsKIAkJCWQKLQkJZW5kIGVsc2UgYmVnaW4JCQkKKwkJZW5kIGVsc2Ug
YmVnaW4KIAkJCWIuYml0cyA8LSAoYi5iaXRzIGxzbCA4KSBsb3IgazsKIAkJCWIubmJpdHMgPC0g
Yi5uYml0cyArIDg7CiAJCQlyZWFkX2JpdHMgYiBuOwpAQCAtNzQ5LDExICs3ODEsMTEgQEAgY2xh
c3Mgb3V0X2NoYXJzIGNoID0KICAgZW5kCiAKIGxldCBmcm9tX2luX2NoYW5uZWwgY2ggPQotCWxl
dCBjYnVmID0gU3RyaW5nLmNyZWF0ZSAxIGluCisJbGV0IGNidWYgPSBCeXRlcy5jcmVhdGUgMSBp
bgogCWxldCByZWFkKCkgPQogCQl0cnkKIAkJCWlmIGNoI2lucHV0IGNidWYgMCAxID0gMCB0aGVu
IHJhaXNlIFN5c19ibG9ja2VkX2lvOwotCQkJU3RyaW5nLnVuc2FmZV9nZXQgY2J1ZiAwCisJCQlC
eXRlcy51bnNhZmVfZ2V0IGNidWYgMAogCQl3aXRoCiAJCQlFbmRfb2ZfZmlsZSAtPiByYWlzZSBO
b19tb3JlX2lucHV0CiAJaW4KQEAgLTc2Niw5ICs3OTgsOSBAQCBsZXQgZnJvbV9pbl9jaGFubmVs
IGNoID0KIAkJfmNsb3NlOmNoI2Nsb3NlX2luCiAKIGxldCBmcm9tX291dF9jaGFubmVsIGNoID0K
LQlsZXQgY2J1ZiA9IFN0cmluZy5jcmVhdGUgMSBpbgorCWxldCBjYnVmID0gQnl0ZXMuY3JlYXRl
IDEgaW4KIAlsZXQgd3JpdGUgYyA9Ci0JCVN0cmluZy51bnNhZmVfc2V0IGNidWYgMCBjOworCQlC
eXRlcy51bnNhZmVfc2V0IGNidWYgMCBjOwogCQlpZiBjaCNvdXRwdXQgY2J1ZiAwIDEgPSAwIHRo
ZW4gcmFpc2UgU3lzX2Jsb2NrZWRfaW87CiAJaW4KIAlsZXQgb3V0cHV0IHMgcCBsID0KQEAgLTc4
NSw3ICs4MTcsNyBAQCBsZXQgZnJvbV9pbl9jaGFycyBjaCA9CiAJCWxldCBpID0gcmVmIDAgaW4K
IAkJdHJ5CiAJCQl3aGlsZSAhaSA8IGwgZG8KLQkJCQlTdHJpbmcudW5zYWZlX3NldCBzIChwICsg
IWkpIChjaCNnZXQoKSk7CisJCQkJQnl0ZXMudW5zYWZlX3NldCBzIChwICsgIWkpIChjaCNnZXQo
KSk7CiAJCQkJaW5jciBpCiAJCQlkb25lOwogCQkJbApAQCAtODAxLDcgKzgzMyw3IEBAIGxldCBm
cm9tX2luX2NoYXJzIGNoID0KIGxldCBmcm9tX291dF9jaGFycyBjaCA9CiAJbGV0IG91dHB1dCBz
IHAgbCA9CiAJCWZvciBpID0gcCB0byBwICsgbCAtIDEgZG8KLQkJCWNoI3B1dCAoU3RyaW5nLnVu
c2FmZV9nZXQgcyBpKQorCQkJY2gjcHV0IChCeXRlcy51bnNhZmVfZ2V0IHMgaSkKIAkJZG9uZTsK
IAkJbAogCWluCmRpZmYgLS1naXQgYS9leHRsaWIvSU8ubWxpIGIvZXh0bGliL0lPLm1saQppbmRl
eCA4ODBiZmZjLi40ZjAyNGU3IDEwMDY0NAotLS0gYS9leHRsaWIvSU8ubWxpCisrKyBiL2V4dGxp
Yi9JTy5tbGkKQEAgLTEsNCArMSw0IEBACi0oKiAKKygqCiAgKiBJTyAtIEFic3RyYWN0IGlucHV0
L291dHB1dAogICogQ29weXJpZ2h0IChDKSAyMDAzIE5pY29sYXMgQ2FubmFzc2UKICAqCkBAIC00
OSwyOSArNDksMzUgQEAgdmFsIHJlYWQgOiBpbnB1dCAtPiBjaGFyCiAoKiogUmVhZCBhIHNpbmds
ZSBjaGFyIGZyb20gYW4gaW5wdXQgb3IgcmFpc2UgW05vX21vcmVfaW5wdXRdIGlmCiAgIG5vIGlu
cHV0IGF2YWlsYWJsZS4gKikKIAotdmFsIG5yZWFkIDogaW5wdXQgLT4gaW50IC0+IHN0cmluZwot
KCoqIFtucmVhZCBpIG5dIHJlYWRzIGEgc3RyaW5nIG9mIHNpemUgdXAgdG8gW25dIGZyb20gYW4g
aW5wdXQuCit2YWwgbnJlYWQgOiBpbnB1dCAtPiBpbnQgLT4gQnl0ZXMudAorKCoqIFtucmVhZCBp
IG5dIHJlYWRzIGEgYnl0ZSBzZXF1ZW5jZSBvZiBzaXplIHVwIHRvIFtuXSBmcm9tIGFuIGlucHV0
LgogICBUaGUgZnVuY3Rpb24gd2lsbCByYWlzZSBbTm9fbW9yZV9pbnB1dF0gaWYgbm8gaW5wdXQg
aXMgYXZhaWxhYmxlLgogICBJdCB3aWxsIHJhaXNlIFtJbnZhbGlkX2FyZ3VtZW50XSBpZiBbbl0g
PCAwLiAqKQogCi12YWwgcmVhbGx5X25yZWFkIDogaW5wdXQgLT4gaW50IC0+IHN0cmluZwotKCoq
IFtyZWFsbHlfbnJlYWQgaSBuXSByZWFkcyBhIHN0cmluZyBvZiBleGFjdGx5IFtuXSBjaGFyYWN0
ZXJzCit2YWwgcmVhbGx5X25yZWFkIDogaW5wdXQgLT4gaW50IC0+IEJ5dGVzLnQKKygqKiBbcmVh
bGx5X25yZWFkIGkgbl0gcmVhZHMgYSBieXRlIHNlcXVlbmNlIG9mIGV4YWN0bHkgW25dIGNoYXJh
Y3RlcnMKICAgZnJvbSB0aGUgaW5wdXQuIFJhaXNlcyBbTm9fbW9yZV9pbnB1dF0gaWYgYXQgbGVh
c3QgW25dIGNoYXJhY3RlcnMgYXJlCiAgIG5vdCBhdmFpbGFibGUuIFJhaXNlcyBbSW52YWxpZF9h
cmd1bWVudF0gaWYgW25dIDwgMC4gKikKIAotdmFsIGlucHV0IDogaW5wdXQgLT4gc3RyaW5nIC0+
IGludCAtPiBpbnQgLT4gaW50Ci0oKiogW2lucHV0IGkgcyBwIGxdIHJlYWRzIHVwIHRvIFtsXSBj
aGFyYWN0ZXJzIGZyb20gdGhlIGdpdmVuIGlucHV0LCBzdG9yaW5nCi0gIHRoZW0gaW4gc3RyaW5n
IFtzXSwgc3RhcnRpbmcgYXQgY2hhcmFjdGVyIG51bWJlciBbcF0uIEl0IHJldHVybnMgdGhlIGFj
dHVhbAordmFsIG5yZWFkX3N0cmluZyA6IGlucHV0IC0+IGludCAtPiBzdHJpbmcKKygqKiBhcyBb
bnJlYWRdLCBidXQgcmVhZHMgYSBzdHJpbmcuICopCisKK3ZhbCByZWFsbHlfbnJlYWRfc3RyaW5n
IDogaW5wdXQgLT4gaW50IC0+IHN0cmluZworKCoqIGFzIFtyZWFsbHlfbnJlYWRdLCBidXQgcmVh
ZHMgYSBzdHJpbmcuICopCisKK3ZhbCBpbnB1dCA6IGlucHV0IC0+IEJ5dGVzLnQgLT4gaW50IC0+
IGludCAtPiBpbnQKKygqKiBbaW5wdXQgaSBiIHAgbF0gcmVhZHMgdXAgdG8gW2xdIGNoYXJhY3Rl
cnMgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQsIHN0b3JpbmcKKyAgdGhlbSBpbiBidWZmZXIgW2JdLCBz
dGFydGluZyBhdCBjaGFyYWN0ZXIgbnVtYmVyIFtwXS4gSXQgcmV0dXJucyB0aGUgYWN0dWFsCiAg
IG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgb3IgcmFpc2UgW05vX21vcmVfaW5wdXRdIGlmIG5v
IGNoYXJhY3RlciBjYW4gYmUKICAgcmVhZC4gSXQgd2lsbCByYWlzZSBbSW52YWxpZF9hcmd1bWVu
dF0gaWYgW3BdIGFuZCBbbF0gZG8gbm90IGRlc2lnbmF0ZSBhCi0gIHZhbGlkIHN1YnN0cmluZyBv
ZiBbc10uICopCisgIHZhbGlkIHN1YnNlcXVlbmNlIG9mIFtiXS4gKikKIAotdmFsIHJlYWxseV9p
bnB1dCA6IGlucHV0IC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IGludAotKCoqIFtyZWFsbHlf
aW5wdXQgaSBzIHAgbF0gcmVhZHMgZXhhY3RseSBbbF0gY2hhcmFjdGVycyBmcm9tIHRoZSBnaXZl
biBpbnB1dCwKLSAgc3RvcmluZyB0aGVtIGluIHRoZSBzdHJpbmcgW3NdLCBzdGFydGluZyBhdCBw
b3NpdGlvbiBbcF0uIEZvciBjb25zaXN0ZW5jeSB3aXRoCit2YWwgcmVhbGx5X2lucHV0IDogaW5w
dXQgLT4gQnl0ZXMudCAtPiBpbnQgLT4gaW50IC0+IGludAorKCoqIFtyZWFsbHlfaW5wdXQgaSBi
IHAgbF0gcmVhZHMgZXhhY3RseSBbbF0gY2hhcmFjdGVycyBmcm9tIHRoZSBnaXZlbiBpbnB1dCwK
KyAgc3RvcmluZyB0aGVtIGluIHRoZSBidWZmZXIgW2JdLCBzdGFydGluZyBhdCBwb3NpdGlvbiBb
cF0uIEZvciBjb25zaXN0ZW5jeSB3aXRoCiAgIHshSU8uaW5wdXR9IGl0IHJldHVybnMgW2xdLiBS
YWlzZXMgW05vX21vcmVfaW5wdXRdIGlmIGF0IFtsXSBjaGFyYWN0ZXJzIGFyZQogICBub3QgYXZh
aWxhYmxlLiBSYWlzZXMgW0ludmFsaWRfYXJndW1lbnRdIGlmIFtwXSBhbmQgW2xdIGRvIG5vdCBk
ZXNpZ25hdGUgYQotICB2YWxpZCBzdWJzdHJpbmcgb2YgW3NdLiAqKQorICB2YWxpZCBzdWJzZXF1
ZW5jZSBvZiBbYl0uICopCiAKIHZhbCBjbG9zZV9pbiA6IGlucHV0IC0+IHVuaXQKICgqKiBDbG9z
ZSB0aGUgaW5wdXQuIEl0IGNhbiBubyBsb25nZXIgYmUgcmVhZCBmcm9tLiAqKQpAQCAtNzksMTkg
Kzg1LDIyIEBAIHZhbCBjbG9zZV9pbiA6IGlucHV0IC0+IHVuaXQKIHZhbCB3cml0ZSA6ICdhIG91
dHB1dCAtPiBjaGFyIC0+IHVuaXQKICgqKiBXcml0ZSBhIHNpbmdsZSBjaGFyIHRvIGFuIG91dHB1
dC4gKikKIAotdmFsIG53cml0ZSA6ICdhIG91dHB1dCAtPiBzdHJpbmcgLT4gdW5pdAordmFsIG53
cml0ZSA6ICdhIG91dHB1dCAtPiBCeXRlcy50IC0+IHVuaXQKKygqKiBXcml0ZSBhIGJ5dGUgc2Vx
dWVuY2UgdG8gYW4gb3V0cHV0LiAqKQorCit2YWwgbndyaXRlX3N0cmluZyA6ICdhIG91dHB1dCAt
PiBzdHJpbmcgLT4gdW5pdAogKCoqIFdyaXRlIGEgc3RyaW5nIHRvIGFuIG91dHB1dC4gKikKIAot
dmFsIG91dHB1dCA6ICdhIG91dHB1dCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiBpbnQKLSgq
KiBbb3V0cHV0IG8gcyBwIGxdIHdyaXRlcyB1cCB0byBbbF0gY2hhcmFjdGVycyBmcm9tIHN0cmlu
ZyBbc10sIHN0YXJ0aW5nIGF0Cit2YWwgb3V0cHV0IDogJ2Egb3V0cHV0IC0+IEJ5dGVzLnQgLT4g
aW50IC0+IGludCAtPiBpbnQKKygqKiBbb3V0cHV0IG8gYiBwIGxdIHdyaXRlcyB1cCB0byBbbF0g
Y2hhcmFjdGVycyBmcm9tIGJ5dGUgc2VxdWVuY2UgW2JdLCBzdGFydGluZyBhdAogICBvZmZzZXQg
W3BdLiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLiBJdCB3aWxs
IHJhaXNlCi0gIFtJbnZhbGlkX2FyZ3VtZW50XSBpZiBbcF0gYW5kIFtsXSBkbyBub3QgZGVzaWdu
YXRlIGEgdmFsaWQgc3Vic3RyaW5nIG9mIFtzXS4gKikKKyAgW0ludmFsaWRfYXJndW1lbnRdIGlm
IFtwXSBhbmQgW2xdIGRvIG5vdCBkZXNpZ25hdGUgYSB2YWxpZCBzdWJzZXF1ZW5jZSBvZiBbYl0u
ICopCiAKLXZhbCByZWFsbHlfb3V0cHV0IDogJ2Egb3V0cHV0IC0+IHN0cmluZyAtPiBpbnQgLT4g
aW50IC0+IGludAotKCoqIFtyZWFsbHlfb3V0cHV0IG8gcyBwIGxdIHdyaXRlcyBleGFjdGx5IFts
XSBjaGFyYWN0ZXJzIGZyb20gc3RyaW5nIFtzXSBvbnRvCit2YWwgcmVhbGx5X291dHB1dCA6ICdh
IG91dHB1dCAtPiBCeXRlcy50IC0+IGludCAtPiBpbnQgLT4gaW50CisoKiogW3JlYWxseV9vdXRw
dXQgbyBiIHAgbF0gd3JpdGVzIGV4YWN0bHkgW2xdIGNoYXJhY3RlcnMgZnJvbSBieXRlIHNlcXVl
bmNlIFtiXSBvbnRvCiAgIHRoZSB0aGUgb3V0cHV0LCBzdGFydGluZyB3aXRoIHRoZSBjaGFyYWN0
ZXIgYXQgb2Zmc2V0IFtwXS4gRm9yIGNvbnNpc3RlbmN5IHdpdGgKICAgeyFJTy5vdXRwdXR9IGl0
IHJldHVybnMgW2xdLiBSYWlzZXMgW0ludmFsaWRfYXJndW1lbnRdIGlmIFtwXSBhbmQgW2xdIGRv
IG5vdAotICBkZXNpZ25hdGUgYSB2YWxpZCBzdWJzdHJpbmcgb2YgW3NdLiAqKQorICBkZXNpZ25h
dGUgYSB2YWxpZCBzdWJzZXF1ZW5jZSBvZiBbYl0uICopCiAKIHZhbCBmbHVzaCA6ICdhIG91dHB1
dCAtPiB1bml0CiAoKiogRmx1c2ggYW4gb3V0cHV0LiAqKQpAQCAtMTA1LDEzICsxMTQsMjAgQEAg
dmFsIGNsb3NlX291dCA6ICdhIG91dHB1dCAtPiAnYQogdmFsIGlucHV0X3N0cmluZyA6IHN0cmlu
ZyAtPiBpbnB1dAogKCoqIENyZWF0ZSBhbiBpbnB1dCB0aGF0IHdpbGwgcmVhZCBmcm9tIGEgc3Ry
aW5nLiAqKQogCit2YWwgaW5wdXRfYnl0ZXMgOiBCeXRlcy50IC0+IGlucHV0CisoKiogQ3JlYXRl
IGFuIGlucHV0IHRoYXQgd2lsbCByZWFkIGZyb20gYSBieXRlIHNlcXVlbmNlLiAqKQorCiB2YWwg
b3V0cHV0X3N0cmluZyA6IHVuaXQgLT4gc3RyaW5nIG91dHB1dAogKCoqIENyZWF0ZSBhbiBvdXRw
dXQgdGhhdCB3aWxsIHdyaXRlIGludG8gYSBzdHJpbmcgaW4gYW4gZWZmaWNpZW50IHdheS4KICAg
V2hlbiBjbG9zZWQsIHRoZSBvdXRwdXQgcmV0dXJucyBhbGwgdGhlIGRhdGEgd3JpdHRlbiBpbnRv
IGl0LiAqKQogCit2YWwgb3V0cHV0X2J5dGVzIDogdW5pdCAtPiBCeXRlcy50IG91dHB1dAorKCoq
IENyZWF0ZSBhbiBvdXRwdXQgdGhhdCB3aWxsIHdyaXRlIGludG8gYSBieXRlIHNlcXVlbmNlIGlu
IGFuIGVmZmljaWVudCB3YXkuCisgIFdoZW4gY2xvc2VkLCB0aGUgb3V0cHV0IHJldHVybnMgYWxs
IHRoZSBkYXRhIHdyaXR0ZW4gaW50byBpdC4gKikKKwogdmFsIG91dHB1dF9zdHJpbmdzIDogdW5p
dCAtPiBzdHJpbmcgbGlzdCBvdXRwdXQKICgqKiBDcmVhdGUgYW4gb3V0cHV0IHRoYXQgd2lsbCB3
cml0ZSBpbnRvIGEgc3RyaW5nIGluIGFuIGVmZmljaWVudCB3YXkuCi0gIFdoZW4gY2xvc2VkLCB0
aGUgb3V0cHV0IHJldHVybnMgYWxsIHRoZSBkYXRhIHdyaXR0ZW4gaW50byBpdC4gCisgIFdoZW4g
Y2xvc2VkLCB0aGUgb3V0cHV0IHJldHVybnMgYWxsIHRoZSBkYXRhIHdyaXR0ZW4gaW50byBpdC4K
ICAgU2V2ZXJhbCBzdHJpbmdzIGFyZSB1c2VkIGluIGNhc2UgdGhlIG91dHB1dCBzaXplIGV4Y2Vz
cyBtYXhfc3RyaW5nX2xlbmd0aAogKikKIApAQCAtMTE5LDIzICsxMzUsMjMgQEAgdmFsIGlucHV0
X2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGlucHV0CiAoKiogQ3JlYXRlIGFuIGlucHV0IHRoYXQg
d2lsbCByZWFkIGZyb20gYSBjaGFubmVsLiAqKQogCiB2YWwgb3V0cHV0X2NoYW5uZWwgOiBvdXRf
Y2hhbm5lbCAtPiB1bml0IG91dHB1dAotKCoqIENyZWF0ZSBhbiBvdXRwdXQgdGhhdCB3aWxsIHdy
aXRlIGludG8gYSBjaGFubmVsLiAqKSAKKygqKiBDcmVhdGUgYW4gb3V0cHV0IHRoYXQgd2lsbCB3
cml0ZSBpbnRvIGEgY2hhbm5lbC4gKikKIAogdmFsIGlucHV0X2VudW0gOiBjaGFyIEVudW0udCAt
PiBpbnB1dAogKCoqIENyZWF0ZSBhbiBpbnB1dCB0aGF0IHdpbGwgcmVhZCBmcm9tIGFuIFtlbnVt
XS4gKikKIAogdmFsIG91dHB1dF9lbnVtIDogdW5pdCAtPiBjaGFyIEVudW0udCBvdXRwdXQKLSgq
KiBDcmVhdGUgYW4gb3V0cHV0IHRoYXQgd2lsbCB3cml0ZSBpbnRvIGFuIFtlbnVtXS4gVGhlIAor
KCoqIENyZWF0ZSBhbiBvdXRwdXQgdGhhdCB3aWxsIHdyaXRlIGludG8gYW4gW2VudW1dLiBUaGUK
ICAgZmluYWwgZW51bSBpcyByZXR1cm5lZCB3aGVuIHRoZSBvdXRwdXQgaXMgY2xvc2VkLiAqKQog
CiB2YWwgY3JlYXRlX2luIDoKICAgcmVhZDoodW5pdCAtPiBjaGFyKSAtPgotICBpbnB1dDooc3Ry
aW5nIC0+IGludCAtPiBpbnQgLT4gaW50KSAtPiBjbG9zZToodW5pdCAtPiB1bml0KSAtPiBpbnB1
dAorICBpbnB1dDooQnl0ZXMudCAtPiBpbnQgLT4gaW50IC0+IGludCkgLT4gY2xvc2U6KHVuaXQg
LT4gdW5pdCkgLT4gaW5wdXQKICgqKiBGdWxseSBjcmVhdGUgYW4gaW5wdXQgYnkgZ2l2aW5nIGFs
bCB0aGUgbmVlZGVkIGZ1bmN0aW9ucy4gKikKIAogdmFsIGNyZWF0ZV9vdXQgOgogICB3cml0ZToo
Y2hhciAtPiB1bml0KSAtPgotICBvdXRwdXQ6KHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IGludCkg
LT4gICAKKyAgb3V0cHV0OihCeXRlcy50IC0+IGludCAtPiBpbnQgLT4gaW50KSAtPgogICBmbHVz
aDoodW5pdCAtPiB1bml0KSAtPiBjbG9zZToodW5pdCAtPiAnYSkgLT4gJ2Egb3V0cHV0CiAoKiog
RnVsbHkgY3JlYXRlIGFuIG91dHB1dCBieSBnaXZpbmcgYWxsIHRoZSBuZWVkZWQgZnVuY3Rpb25z
LiAqKQogCkBAIC0xNTUsMTUgKzE3MSwxNSBAQCB2YWwgcGlwZSA6IHVuaXQgLT4gaW5wdXQgKiB1
bml0IG91dHB1dAogICB0aGUgb3V0cHV0IGNhbiBiZSByZWFkIGZyb20gdGhlIGlucHV0LiAqKQog
CiB2YWwgcG9zX2luIDogaW5wdXQgLT4gaW5wdXQgKiAodW5pdCAtPiBpbnQpCi0oKiogQ3JlYXRl
IGFuIGlucHV0IHRoYXQgcHJvdmlkZSBhIGNvdW50IGZ1bmN0aW9uIG9mIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMKKygqKiBDcmVhdGUgYW4gaW5wdXQgdGhhdCBwcm92aWRlIGEgY291bnQgZnVuY3Rpb24g
b2YgdGhlIG51bWJlciBvZiBCeXRlcy50CiAgIHJlYWQgZnJvbSBpdC4gKikKIAogdmFsIHBvc19v
dXQgOiAnYSBvdXRwdXQgLT4gJ2Egb3V0cHV0ICogKHVuaXQgLT4gaW50KQotKCoqIENyZWF0ZSBh
biBvdXRwdXQgdGhhdCBwcm92aWRlIGEgY291bnQgZnVuY3Rpb24gb2YgdGhlIG51bWJlciBvZiBi
eXRlcworKCoqIENyZWF0ZSBhbiBvdXRwdXQgdGhhdCBwcm92aWRlIGEgY291bnQgZnVuY3Rpb24g
b2YgdGhlIG51bWJlciBvZiBCeXRlcy50CiAgIHdyaXR0ZW4gdGhyb3VnaCBpdC4gKikKIAogZXh0
ZXJuYWwgY2FzdF9vdXRwdXQgOiAnYSBvdXRwdXQgLT4gdW5pdCBvdXRwdXQgPSAiJWlkZW50aXR5
IgotKCoqIFlvdSBjYW4gc2FmZWx5IHRyYW5zZm9ybSBhbnkgb3V0cHV0IHRvIGFuIHVuaXQgb3V0
cHV0IGluIGEgc2FmZSB3YXkgCisoKiogWW91IGNhbiBzYWZlbHkgdHJhbnNmb3JtIGFueSBvdXRw
dXQgdG8gYW4gdW5pdCBvdXRwdXQgaW4gYSBzYWZlIHdheQogICBieSB1c2luZyB0aGlzIGZ1bmN0
aW9uLiAqKQogCiAoKiogezYgQmluYXJ5IGZpbGVzIEFQSX0KQEAgLTIwOCw2ICsyMjQsOSBAQCB2
YWwgcmVhZF9kb3VibGUgOiBpbnB1dCAtPiBmbG9hdAogdmFsIHJlYWRfc3RyaW5nIDogaW5wdXQg
LT4gc3RyaW5nCiAoKiogUmVhZCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICopCiAKK3ZhbCBy
ZWFkX2J5dGVzIDogaW5wdXQgLT4gQnl0ZXMudAorKCoqIFJlYWQgYSBudWxsLXRlcm1pbmF0ZWQg
Ynl0ZSBzZXF1ZW5jZS4gKikKKwogdmFsIHJlYWRfbGluZSA6IGlucHV0IC0+IHN0cmluZwogKCoq
IFJlYWQgYSBMRiBvciBDUkxGIHRlcm1pbmF0ZWQgc3RyaW5nLiAqKQogCkBAIC0yMjEsNyArMjQw
LDcgQEAgdmFsIHdyaXRlX2kxNiA6ICdhIG91dHB1dCAtPiBpbnQgLT4gdW5pdAogKCoqIFdyaXRl
IGEgc2lnbmVkIDE2LWJpdCB3b3JkLiAqKQogCiB2YWwgd3JpdGVfaTMyIDogJ2Egb3V0cHV0IC0+
IGludCAtPiB1bml0Ci0oKiogV3JpdGUgYSBzaWduZWQgMzItYml0IGludGVnZXIuICopIAorKCoq
IFdyaXRlIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiAqKQogCiB2YWwgd3JpdGVfcmVhbF9pMzIg
OiAnYSBvdXRwdXQgLT4gaW50MzIgLT4gdW5pdAogKCoqIFdyaXRlIGFuIE9DYW1sIGludDMyLiAq
KQpAQCAtMjM4LDYgKzI1Nyw5IEBAIHZhbCB3cml0ZV9kb3VibGUgOiAnYSBvdXRwdXQgLT4gZmxv
YXQgLT4gdW5pdAogdmFsIHdyaXRlX3N0cmluZyA6ICdhIG91dHB1dCAtPiBzdHJpbmcgLT4gdW5p
dAogKCoqIFdyaXRlIGEgc3RyaW5nIGFuZCBhcHBlbmQgYW4gbnVsbCBjaGFyYWN0ZXIuICopCiAK
K3ZhbCB3cml0ZV9ieXRlcyA6ICdhIG91dHB1dCAtPiBCeXRlcy50IC0+IHVuaXQKKygqKiBXcml0
ZSBhIGJ5dGUgc2VxdWVuY2UgYW5kIGFwcGVuZCBhbiBudWxsIGNoYXJhY3Rlci4gKikKKwogdmFs
IHdyaXRlX2xpbmUgOiAnYSBvdXRwdXQgLT4gc3RyaW5nIC0+IHVuaXQKICgqKiBXcml0ZSBhIGxp
bmUgYW5kIGFwcGVuZCBhIExGIChpdCBtaWdodCBiZSBjb252ZXJ0ZWQKIAl0byBDUkxGIG9uIHNv
bWUgc3lzdGVtcyBkZXBlbmRpbmcgb24gdGhlIHVuZGVybHlpbmcgSU8pLiAqKQpAQCAtMjUzLDcg
KzI3NSw3IEBAIHNpZwogCXZhbCByZWFkX2k2NCA6IGlucHV0IC0+IGludDY0CiAJdmFsIHJlYWRf
ZmxvYXQzMiA6IGlucHV0IC0+IGZsb2F0CiAJdmFsIHJlYWRfZG91YmxlIDogaW5wdXQgLT4gZmxv
YXQKLQkKKwogCXZhbCB3cml0ZV91aTE2IDogJ2Egb3V0cHV0IC0+IGludCAtPiB1bml0CiAJdmFs
IHdyaXRlX2kxNiA6ICdhIG91dHB1dCAtPiBpbnQgLT4gdW5pdAogCXZhbCB3cml0ZV9pMzIgOiAn
YSBvdXRwdXQgLT4gaW50IC0+IHVuaXQKQEAgLTMwOCwxMyArMzMwLDEzIEBAIHZhbCBkcm9wX2Jp
dHMgOiBpbl9iaXRzIC0+IHVuaXQKIAogY2xhc3MgaW5fY2hhbm5lbCA6IGlucHV0IC0+CiAgIG9i
amVjdAotCW1ldGhvZCBpbnB1dCA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IGludAorCW1ldGhv
ZCBpbnB1dCA6IEJ5dGVzLnQgLT4gaW50IC0+IGludCAtPiBpbnQKIAltZXRob2QgY2xvc2VfaW4g
OiB1bml0IC0+IHVuaXQKICAgZW5kCiAKIGNsYXNzIG91dF9jaGFubmVsIDogJ2Egb3V0cHV0IC0+
CiAgIG9iamVjdAotCW1ldGhvZCBvdXRwdXQgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiBpbnQK
KwltZXRob2Qgb3V0cHV0IDogQnl0ZXMudCAtPiBpbnQgLT4gaW50IC0+IGludAogCW1ldGhvZCBm
bHVzaCA6IHVuaXQgLT4gdW5pdAogCW1ldGhvZCBjbG9zZV9vdXQgOiB1bml0IC0+IHVuaXQKICAg
ZW5kCmRpZmYgLS1naXQgYS9leHRsaWIvTUVUQSBiL2V4dGxpYi9NRVRBCmluZGV4IGExN2Q0ODQu
LjVmNmRiNTUgMTAwNjQ0Ci0tLSBhL2V4dGxpYi9NRVRBCisrKyBiL2V4dGxpYi9NRVRBCkBAIC0x
LDQgKzEsNSBAQAogZGVzY3JpcHRpb249IkV4dGVuZGVkIHN0YW5kYXJkIGxpYnJhcnkiCityZXF1
aXJlcz0iYnl0ZXMiCiBhcmNoaXZlKGJ5dGUpPSJleHRMaWIuY21hIgogYXJjaGl2ZShuYXRpdmUp
PSJleHRMaWIuY214YSIKIGFyY2hpdmUoYnl0ZSwgcGx1Z2luKSA9ICJleHRMaWIuY21hIgpkaWZm
IC0tZ2l0IGEvZXh0bGliL01ha2VmaWxlIGIvZXh0bGliL01ha2VmaWxlCmluZGV4IGYwODhiMjcu
LjRkMGE1YzUgMTAwNjQ0Ci0tLSBhL2V4dGxpYi9NYWtlZmlsZQorKysgYi9leHRsaWIvTWFrZWZp
bGUKQEAgLTQsMTUgKzQsMTUgQEAgVkVSU0lPTiA9IDEuNi4xCiAKICMgdGhlIGxpc3QgaXMgdG9w
b2xvZ2ljYWxseSBzb3J0ZWQKIE1PRFVMRVMgOj0gXAotIGVudW0gYml0U2V0IGR5bkFycmF5IGV4
dEFycmF5IGV4dEhhc2h0YmwgZXh0TGlzdCBleHRTdHJpbmcgZ2xvYmFsIElPIG9wdGlvbiBcCi0g
cE1hcCBzdGQgdUNoYXIgdVRGOCBiYXNlNjQgdW56aXAgcmVmTGlzdCBvcHRQYXJzZSBkbGxpc3Qg
ZXh0TGliCisgZW51bSBiaXRTZXQgZHluQXJyYXkgZXh0QXJyYXkgZXh0SGFzaHRibCBleHRMaXN0
IGV4dFN0cmluZyBleHRCdWZmZXIgXAorIGdsb2JhbCBJTyBvcHRpb24gcE1hcCBzdGQgdUNoYXIg
dVRGOCBiYXNlNjQgdW56aXAgcmVmTGlzdCBvcHRQYXJzZSBkbGxpc3QgZXh0TGliCiAKIGlmZGVm
IG1pbmltYWwKIE1PRFVMRVMgOj0gJChmaWx0ZXItb3V0IHVuemlwIHVDaGFyIHVURjgsICQoTU9E
VUxFUykpCiBlbmRpZgogCi1PQ0FNTEMgPSBvY2FtbGMgLWcKLU9DQU1MT1BUID0gb2NhbWxvcHQg
LWcKK09DQU1MQyA9IG9jYW1sZmluZCBvY2FtbGMgLWcgLXBhY2thZ2UgYnl0ZXMKK09DQU1MT1BU
ID0gb2NhbWxmaW5kIG9jYW1sb3B0IC1nIC1wYWNrYWdlIGJ5dGVzCiAKIE1MSSA9ICQoZmlsdGVy
LW91dCBleHRMaWIubWxpLCAkKE1PRFVMRVM6PS5tbGkpKQogQ01JID0gJChNT0RVTEVTOj0uY21p
KQpAQCAtNDgsNiArNDgsOCBAQCBleHRMaWIuY214OiBleHRMaWIubWwKIAkkKE9DQU1MT1BUKSAt
YyAkPAogZXh0SGFzaHRibC5tbDogZXh0SGFzaHRibC5tbHBwCiAJY2FtbHA0b2YgcHJfby5jbW8g
JChzaGVsbCBvY2FtbCBjb25maWd1cmUubWwpIC1pbXBsICQ8IC1vICRACitleHRCdWZmZXIubWw6
IGV4dEJ1ZmZlci5tbHBwCisJY2FtbHA0b2YgcHJfby5jbW8gJChzaGVsbCBvY2FtbCBjb25maWd1
cmUubWwpIC1pbXBsICQ8IC1vICRACiAKIGluc3RhbGw6CiAJb2NhbWxmaW5kIGluc3RhbGwgLXBh
dGNoLXZlcnNpb24gJChWRVJTSU9OKSBleHRsaWIgTUVUQSBleHRMaWIuY21hICQoTUxJKSAkKENN
SSkgLW9wdGlvbmFsIGV4dExpYi5jbXhhICQoQ01YKSBleHRMaWIuY214cyBleHRMaWIuYSBleHRM
aWIubGliCkBAIC01Niw3ICs1OCw3IEBAIHVuaW5zdGFsbDoKIAlvY2FtbGZpbmQgcmVtb3ZlIGV4
dGxpYgogCiBjbGVhbjoKLQlybSAtZiAqLmNtbyAqLmNteCAqLm8gKi5vYmogKi5jbWkgKi5jbWEg
Ki5jbXhhICouY214cyAqLmEgKi5saWIgZG9jLyouaHRtbCBleHRIYXNodGJsLm1sCisJcm0gLWYg
Ki5jbW8gKi5jbXggKi5vICoub2JqICouY21pICouY21hICouY214YSAqLmNteHMgKi5hICoubGli
IGRvYy8qLmh0bWwgZXh0SGFzaHRibC5tbCBleHRCdWZmZXIubWwKIAogcmVsZWFzZToKIAlzdm4g
ZXhwb3J0IC4gZXh0bGliLSQoVkVSU0lPTikKZGlmZiAtLWdpdCBhL2V4dGxpYi9iYXNlNjQubWwg
Yi9leHRsaWIvYmFzZTY0Lm1sCmluZGV4IDBhYzk2MTMuLjZjMmZmNTIgMTAwNjQ0Ci0tLSBhL2V4
dGxpYi9iYXNlNjQubWwKKysrIGIvZXh0bGliL2Jhc2U2NC5tbApAQCAtNjUsNyArNjUsNyBAQCBs
ZXQgZW5jb2RlID8odGJsPWNoYXJzKSBjaCA9CiAJaW4KIAlsZXQgb3V0cHV0IHMgcCBsID0KIAkJ
Zm9yIGkgPSBwIHRvIHAgKyBsIC0gMSBkbwotCQkJd3JpdGUgKFN0cmluZy51bnNhZmVfZ2V0IHMg
aSkKKwkJCXdyaXRlIChCeXRlcy51bnNhZmVfZ2V0IHMgaSkKIAkJZG9uZTsKIAkJbAogCWluCkBA
IC05NSw3ICs5NSw3IEBAIGxldCBkZWNvZGUgPyh0Ymw9aW52X2NoYXJzKSBjaCA9CiAJCWxldCBp
ID0gcmVmIDAgaW4KIAkJdHJ5CiAJCQl3aGlsZSAhaSA8IGwgZG8KLQkJCQlTdHJpbmcudW5zYWZl
X3NldCBzIChwICsgIWkpIChmZXRjaCgpKTsKKwkJCQlCeXRlcy51bnNhZmVfc2V0IHMgKHAgKyAh
aSkgKGZldGNoKCkpOwogCQkJCWluY3IgaTsKIAkJCWRvbmU7CiAJCQlsCkBAIC0xMTAsMTAgKzEx
MCwxMCBAQCBsZXQgZGVjb2RlID8odGJsPWludl9jaGFycykgY2ggPQogCUlPLmNyZWF0ZV9pbiB+
cmVhZCB+aW5wdXQgfmNsb3NlCiAKIGxldCBzdHJfZW5jb2RlID8odGJsPWNoYXJzKSBzID0KLQls
ZXQgY2ggPSBlbmNvZGUgfnRibCAoSU8ub3V0cHV0X3N0cmluZygpKSBpbgotCUlPLm53cml0ZSBj
aCBzOworCWxldCBjaCA9IGVuY29kZSB+dGJsIChJTy5vdXRwdXRfYnl0ZXMoKSkgaW4KKwlJTy5u
d3JpdGVfc3RyaW5nIGNoIHM7CiAJSU8uY2xvc2Vfb3V0IGNoCiAKIGxldCBzdHJfZGVjb2RlID8o
dGJsPWludl9jaGFycykgcyA9Ci0JbGV0IGNoID0gZGVjb2RlIH50YmwgKElPLmlucHV0X3N0cmlu
ZyBzKSBpbgotCUlPLm5yZWFkIGNoICgoU3RyaW5nLmxlbmd0aCBzICogNikgLyA4KQorCWxldCBj
aCA9IGRlY29kZSB+dGJsIChJTy5pbnB1dF9ieXRlcyBzKSBpbgorCUlPLm5yZWFkX3N0cmluZyBj
aCAoKEJ5dGVzLmxlbmd0aCBzICogNikgLyA4KQpkaWZmIC0tZ2l0IGEvZXh0bGliL2Jhc2U2NC5t
bGkgYi9leHRsaWIvYmFzZTY0Lm1saQppbmRleCAzOGRkOWI0Li42ODcwYmUyIDEwMDY0NAotLS0g
YS9leHRsaWIvYmFzZTY0Lm1saQorKysgYi9leHRsaWIvYmFzZTY0Lm1saQpAQCAtNDEsMTEgKzQx
LDExIEBAIHR5cGUgZW5jb2RpbmdfdGFibGUgPSBjaGFyIGFycmF5CiB0eXBlIGRlY29kaW5nX3Rh
YmxlID0gaW50IGFycmF5CiAKICgqKiBFbmNvZGUgYSBzdHJpbmcgaW50byBCYXNlNjQuICopCi12
YWwgc3RyX2VuY29kZSA6ID90Ymw6ZW5jb2RpbmdfdGFibGUgLT4gc3RyaW5nIC0+IHN0cmluZwor
dmFsIHN0cl9lbmNvZGUgOiA/dGJsOmVuY29kaW5nX3RhYmxlIC0+IHN0cmluZyAtPiBCeXRlcy50
CiAKICgqKiBEZWNvZGUgYSBzdHJpbmcgZW5jb2RlZCBpbnRvIEJhc2U2NCwgcmFpc2UgW0ludmFs
aWRfY2hhcl0gaWYgYQogCWNoYXJhY3RlciBpbiB0aGUgaW5wdXQgc3RyaW5nIGlzIG5vdCBhIHZh
bGlkIG9uZS4gKikKLXZhbCBzdHJfZGVjb2RlIDogP3RibDpkZWNvZGluZ190YWJsZSAtPiBzdHJp
bmcgLT4gc3RyaW5nCit2YWwgc3RyX2RlY29kZSA6ID90Ymw6ZGVjb2RpbmdfdGFibGUgLT4gQnl0
ZXMudCAtPiBzdHJpbmcKIAogKCoqIEdlbmVyaWMgYmFzZTY0IGVuY29kaW5nIG92ZXIgYW4gb3V0
cHV0LiAqKQogdmFsIGVuY29kZSA6ID90Ymw6ZW5jb2RpbmdfdGFibGUgLT4gJ2EgSU8ub3V0cHV0
IC0+ICdhIElPLm91dHB1dApkaWZmIC0tZ2l0IGEvZXh0bGliL2JpdFNldC5tbCBiL2V4dGxpYi9i
aXRTZXQubWwKaW5kZXggNjU1NmJiMC4uZWMyMWUyNSAxMDA2NDQKLS0tIGEvZXh0bGliL2JpdFNl
dC5tbAorKysgYi9leHRsaWIvYml0U2V0Lm1sCkBAIC0yMCwxMyArMjAsMTMgQEAKIAogdHlwZSBp
bnRlcm4KIAotbGV0IGJjcmVhdGUgOiBpbnQgLT4gaW50ZXJuID0gT2JqLm1hZ2ljIFN0cmluZy5j
cmVhdGUKK2xldCBiY3JlYXRlIDogaW50IC0+IGludGVybiA9IE9iai5tYWdpYyBCeXRlcy5jcmVh
dGUKIGV4dGVybmFsIGZhc3RfZ2V0IDogaW50ZXJuIC0+IGludCAtPiBpbnQgPSAiJXN0cmluZ191
bnNhZmVfZ2V0IgogZXh0ZXJuYWwgZmFzdF9zZXQgOiBpbnRlcm4gLT4gaW50IC0+IGludCAtPiB1
bml0ID0gIiVzdHJpbmdfdW5zYWZlX3NldCIKIGV4dGVybmFsIGZhc3RfYm9vbCA6IGludCAtPiBi
b29sID0gIiVpZGVudGl0eSIKLWxldCBmYXN0X2JsaXQgOiBpbnRlcm4gLT4gaW50IC0+IGludGVy
biAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBPYmoubWFnaWMgU3RyaW5nLmJsaXQKLWxldCBmYXN0
X2ZpbGwgOiBpbnRlcm4gLT4gaW50IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IE9iai5tYWdpYyBT
dHJpbmcuZmlsbAotbGV0IGZhc3RfbGVuZ3RoIDogaW50ZXJuIC0+IGludD0gT2JqLm1hZ2ljIFN0
cmluZy5sZW5ndGgKK2xldCBmYXN0X2JsaXQgOiBpbnRlcm4gLT4gaW50IC0+IGludGVybiAtPiBp
bnQgLT4gaW50IC0+IHVuaXQgPSBPYmoubWFnaWMgQnl0ZXMuYmxpdAorbGV0IGZhc3RfZmlsbCA6
IGludGVybiAtPiBpbnQgLT4gaW50IC0+IGludCAtPiB1bml0ID0gT2JqLm1hZ2ljIEJ5dGVzLmZp
bGwKK2xldCBmYXN0X2xlbmd0aCA6IGludGVybiAtPiBpbnQ9IE9iai5tYWdpYyBCeXRlcy5sZW5n
dGgKIAogbGV0IGJnZXQgcyBuZHggPQogICBhc3NlcnQgKG5keCA+PSAwICYmIG5keCA8IGZhc3Rf
bGVuZ3RoIHMpOwpkaWZmIC0tZ2l0IGEvZXh0bGliL2NvbmZpZ3VyZS5tbCBiL2V4dGxpYi9jb25m
aWd1cmUubWwKaW5kZXggNGJhNzA1Yy4uZDgxZDk2NSAxMDA2NDQKLS0tIGEvZXh0bGliL2NvbmZp
Z3VyZS5tbAorKysgYi9leHRsaWIvY29uZmlndXJlLm1sCkBAIC0xICsxLDQgQEAKLWxldCAoKSA9
IHByaW50X2VuZGxpbmUgKGlmIFN5cy5vY2FtbF92ZXJzaW9uID49ICI0LjAwLjAiIHRoZW4gIi1E
IE9DQU1MNCIgZWxzZSAiIik7IGV4aXQgMAorbGV0ICgpID0KKyAgcHJpbnRfZW5kbGluZSAoaWYg
U3lzLm9jYW1sX3ZlcnNpb24gPj0gIjQuMDAuMCIgdGhlbiAiLUQgT0NBTUw0ICIgZWxzZSAiIik7
CisgIHByaW50X2VuZGxpbmUgKGlmIFN5cy5vY2FtbF92ZXJzaW9uID49ICI0LjAyLjAiIHRoZW4g
Ii1EIE9DQU1MNF8wMiAiIGVsc2UgIiIpOworICBleGl0IDAKZGlmZiAtLWdpdCBhL2V4dGxpYi9l
eHRCdWZmZXIubWxpIGIvZXh0bGliL2V4dEJ1ZmZlci5tbGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWRjNTA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2V4dGxpYi9leHRCdWZm
ZXIubWxpCkBAIC0wLDAgKzEsNjggQEAKKygqCisgKiBFeHRCdWZmZXIgLSBleHRyYSBmdW5jdGlv
bnMgb3ZlciBidWZmZXJzLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEdhYnJpZWwgU2NoZXJlcgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24sCisgKiB3aXRoIHRoZSBzcGVj
aWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv
biwgTUEgIDAyMTExLTEzMDcgIFVTQQorICopCisKKygqKiBFeHRyYSBmdW5jdGlvbnMgb3ZlciB0
ZXh0IGJ1ZmZlcnMuCisKKyAgIFdlIGluIGZhY3QgcHJvdmlkZSB0aGUgZXhhY3Qgc2FtZSBpbnRl
cmZhY2UgYXMgQnVmZmVyIG9uIDQuMDIgT0NhbWwKKyAgIHZlcnNpb25zLCB3aXRoIHRoZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgdGhlIDQuMDItYW5kLWFib3ZlCisgICBieXRlcy1zcGVjaWZpYyBmdW5j
dGlvbnMgYmFja3BvcnRlZC4KKyopCisKK21vZHVsZSBCdWZmZXIgOiBzaWcKKwordHlwZSB0CisK
K3ZhbCBjcmVhdGUgOiBpbnQgLT4gdAorCit2YWwgY29udGVudHMgOiB0IC0+IHN0cmluZworCit2
YWwgdG9fYnl0ZXMgOiB0IC0+IEJ5dGVzLnQKKwordmFsIHN1YiA6IHQgLT4gaW50IC0+IGludCAt
PiBzdHJpbmcKKwordmFsIGJsaXQgOiB0IC0+IGludCAtPiBCeXRlcy50IC0+IGludCAtPiBpbnQg
LT4gdW5pdAorCit2YWwgbnRoIDogdCAtPiBpbnQgLT4gY2hhcgorCit2YWwgbGVuZ3RoIDogdCAt
PiBpbnQKKwordmFsIGNsZWFyIDogdCAtPiB1bml0CisKK3ZhbCByZXNldCA6IHQgLT4gdW5pdAor
Cit2YWwgYWRkX2NoYXIgOiB0IC0+IGNoYXIgLT4gdW5pdAorCit2YWwgYWRkX3N0cmluZyA6IHQg
LT4gc3RyaW5nIC0+IHVuaXQKKwordmFsIGFkZF9ieXRlcyA6IHQgLT4gQnl0ZXMudCAtPiB1bml0
CisKK3ZhbCBhZGRfc3Vic3RyaW5nIDogdCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0
CisKK3ZhbCBhZGRfc3ViYnl0ZXMgOiB0IC0+IEJ5dGVzLnQgLT4gaW50IC0+IGludCAtPiB1bml0
CisKK3ZhbCBhZGRfc3Vic3RpdHV0ZSA6IHQgLT4gKHN0cmluZyAtPiBzdHJpbmcpIC0+IHN0cmlu
ZyAtPiB1bml0CisKK3ZhbCBhZGRfYnVmZmVyIDogdCAtPiB0IC0+IHVuaXQKKwordmFsIGFkZF9j
aGFubmVsIDogdCAtPiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0CisKK3ZhbCBvdXRwdXRfYnVm
ZmVyIDogb3V0X2NoYW5uZWwgLT4gdCAtPiB1bml0CisKK2VuZApkaWZmIC0tZ2l0IGEvZXh0bGli
L2V4dEJ1ZmZlci5tbHBwIGIvZXh0bGliL2V4dEJ1ZmZlci5tbHBwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjEzY2U2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9leHRsaWIvZXh0
QnVmZmVyLm1scHAKQEAgLTAsMCArMSwyMiBAQAorbW9kdWxlIEJ1ZmZlciA9IHN0cnVjdAorCisg
IGluY2x1ZGUgQnVmZmVyCisKKyAgSUZOREVGIE9DQU1MNF80MDIgVEhFTgorICAoKiBUaGUgdXNl
cyBvZiB1bnNhZmVfe29mLHRvfV9zdHJpbmcgYWJvdmUgYXJlIG5vdCBzZW1hbnRpY2FsbHkKKyAg
ICAganVzdGlmaWVkLCBhcyB0aGUgQnVmZmVyIGltcGxlbWVudGF0aW9uIG1heSB2ZXJ5IHdlbGwg
Y2FwdHVyZSBhbmQKKyAgICAgc2hhcmUgcGFydHMgb2YgaXRzIGludGVybmFsIGJ1ZmZlciwgb3Ig
b2YgaW5wdXQgc3RyaW5nIGdpdmVuIGFzCisgICAgIGlucHV0LgorCisgICAgIFRoZXkgYXJlIGhv
d2V2ZXIgY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gdGhlIGltcGxlbWVudGF0aW9uIGJlaW5nCisg
ICAgIHVzZWQgaW4gT0NhbWwgNC4wMi4wOyB0aGlzIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcmV2
aXNpdGVkIGlmCisgICAgIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gY2hhbmdlcy4gKikKKyAg
bGV0IHRvX2J5dGVzIGIgPQorICAgIEJ5dGVzLnVuc2FmZV9vZl9zdHJpbmcgKGNvbnRlbnRzIGIp
CisKKyAgbGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9CisgICAgYWRkX3N1YnN0cmlu
ZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW4KKworICBsZXQgYWRkX2J5
dGVzIGIgcyA9IGFkZF9zdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKQorICBFTkQK
K2VuZApkaWZmIC0tZ2l0IGEvZXh0bGliL2V4dFN0cmluZy5tbCBiL2V4dGxpYi9leHRTdHJpbmcu
bWwKaW5kZXggNzFkY2FhZC4uMGVkNTU0NiAxMDA2NDQKLS0tIGEvZXh0bGliL2V4dFN0cmluZy5t
bAorKysgYi9leHRsaWIvZXh0U3RyaW5nLm1sCkBAIC0yNSwxMSArMjUsMTIgQEAgbW9kdWxlIFN0
cmluZyA9IHN0cnVjdAogaW5jbHVkZSBTdHJpbmcKIAogbGV0IGluaXQgbGVuIGYgPQotCWxldCBz
ID0gY3JlYXRlIGxlbiBpbgorCWxldCBzID0gQnl0ZXMuY3JlYXRlIGxlbiBpbgogCWZvciBpID0g
MCB0byBsZW4gLSAxIGRvCi0JCXVuc2FmZV9zZXQgcyBpIChmIGkpCisJCUJ5dGVzLnVuc2FmZV9z
ZXQgcyBpIChmIGkpCiAJZG9uZTsKLQlzCisgICAgICAgICgqICdzJyBkb2Vzbid0IGVzY2FwZSBh
bmQgd2lsbCBuZXZlciBiZSBtdXRhdGVkIGFnYWluICopCisJQnl0ZXMudW5zYWZlX3RvX3N0cmlu
ZyBzCiAKIGxldCBzdGFydHNfd2l0aCBzdHIgcCA9CiAJaWYgbGVuZ3RoIHN0ciA8IGxlbmd0aCBw
IHRoZW4gCkBAIC0xMjMsNyArMTI0LDcgQEAgbGV0IHNsaWNlID8oZmlyc3Q9MCkgPyhsYXN0PVN5
cy5tYXhfc3RyaW5nX2xlbmd0aCkgcyA9CiAJCShpZiAobGFzdDwwKSB0aGVuIChsZW5ndGggcykg
KyBsYXN0IGVsc2UgbGFzdCkKIAlpbgogCWlmIGk+PWogfHwgaT1sZW5ndGggcyB0aGVuCi0JCWNy
ZWF0ZSAwCisJCW1ha2UgMCAnICcKICAgICAgICAgZWxzZQogICAgICAgICAgIAlzdWIgcyBpIChq
LWkpCiAKQEAgLTE3MCwxOCArMTcxLDIwIEBAIGxldCBlbnVtIHMgPQogCiBsZXQgb2ZfZW51bSBl
ID0KIAlsZXQgbCA9IEVudW0uY291bnQgZSBpbgotCWxldCBzID0gY3JlYXRlIGwgaW4KKwlsZXQg
cyA9IEJ5dGVzLmNyZWF0ZSBsIGluCiAJbGV0IGkgPSByZWYgMCBpbgotCUVudW0uaXRlciAoZnVu
IGMgLT4gdW5zYWZlX3NldCBzICFpIGM7IGluY3IgaSkgZTsKLQlzCisJRW51bS5pdGVyIChmdW4g
YyAtPiBCeXRlcy51bnNhZmVfc2V0IHMgIWkgYzsgaW5jciBpKSBlOworICAgICAgICAoKiAncycg
ZG9lc24ndCBlc2NhcGUgYW5kIHdpbGwgbmV2ZXIgYmUgbXV0YXRlZCBhZ2FpbiAqKQorCUJ5dGVz
LnVuc2FmZV90b19zdHJpbmcgcwogCiBsZXQgbWFwIGYgcyA9CiAJbGV0IGxlbiA9IGxlbmd0aCBz
IGluCi0JbGV0IHNjID0gY3JlYXRlIGxlbiBpbgorCWxldCBzYyA9IEJ5dGVzLmNyZWF0ZSBsZW4g
aW4KIAlmb3IgaSA9IDAgdG8gbGVuIC0gMSBkbwotCQl1bnNhZmVfc2V0IHNjIGkgKGYgKHVuc2Fm
ZV9nZXQgcyBpKSkKKwkJQnl0ZXMudW5zYWZlX3NldCBzYyBpIChmICh1bnNhZmVfZ2V0IHMgaSkp
CiAJZG9uZTsKLQlzYworICAgICAgICAoKiAnc2MnIGRvZXNuJ3QgZXNjYXBlIGFuZCB3aWxsIG5l
dmVyIGJlIG11dGF0ZWQgYWdhaW4gKikKKwlCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHNjCiAKICgq
IGZvbGRfbGVmdCBhbmQgZm9sZF9yaWdodCBieSBFcmljIEMuIENvb3BlciAqKQogbGV0IGZvbGRf
bGVmdCBmIGluaXQgc3RyID0KQEAgLTIwOSwxMiArMjEyLDEzIEBAIGxldCBleHBsb2RlIHMgPQog
ICBleHAgKFN0cmluZy5sZW5ndGggcyAtIDEpIFtdCiAKIGxldCBpbXBsb2RlIGwgPQotICBsZXQg
cmVzID0gU3RyaW5nLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW4KKyAgbGV0IHJlcyA9IEJ5dGVz
LmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW4KICAgbGV0IHJlYyBpbXAgaSA9IGZ1bmN0aW9uCiAg
IHwgW10gLT4gcmVzCi0gIHwgYyA6OiBsIC0+IHJlcy5baV0gPC0gYzsgaW1wIChpICsgMSkgbCBp
bgotICBpbXAgMCBsCi0KKyAgfCBjIDo6IGwgLT4gQnl0ZXMuc2V0IHJlcyBpIGM7IGltcCAoaSAr
IDEpIGwgaW4KKyAgbGV0IHMgPSBpbXAgMCBsIGluCisgICgqICdzJyBkb2Vzbid0IGVzY2FwZSBh
bmQgd2lsbCBuZXZlciBiZSBtdXRhdGVkIGFnYWluICopCisgIEJ5dGVzLnVuc2FmZV90b19zdHJp
bmcgcwogCiBsZXQgcmVwbGFjZV9jaGFycyBmIHMgPQogCWxldCBsZW4gPSBTdHJpbmcubGVuZ3Ro
IHMgaW4KQEAgLTIyOCw3ICsyMzIsNyBAQCBsZXQgcmVwbGFjZV9jaGFycyBmIHMgPQogCQkJbG9v
cCAoaSsxKSAocyA6OiBhY2MpCiAJaW4KIAlsZXQgc3RycyA9IGxvb3AgMCBbXSBpbgotCWxldCBz
YnVmID0gY3JlYXRlICF0bGVuIGluCisJbGV0IHNidWYgPSBCeXRlcy5jcmVhdGUgIXRsZW4gaW4K
IAlsZXQgcG9zID0gcmVmICF0bGVuIGluCiAJbGV0IHJlYyBsb29wMiA9IGZ1bmN0aW9uCiAJCXwg
W10gLT4gKCkKQEAgLTIzOSw3ICsyNDMsOCBAQCBsZXQgcmVwbGFjZV9jaGFycyBmIHMgPQogCQkJ
bG9vcDIgYWNjCiAJaW4KIAlsb29wMiBzdHJzOwotCXNidWYKKyAgICAgICAgKCogJ3NidWYnIGRv
ZXNuJ3QgZXNjYXBlIGFuZCB3aWxsIG5ldmVyIGJlIG11dGF0ZWQgYWdhaW4gKikKKwlCeXRlcy51
bnNhZmVfdG9fc3RyaW5nIHNidWYKIAogbGV0IHJlcGxhY2UgfnN0ciB+c3ViIH5ieSA9CiAJdHJ5
CkBAIC0yNDcsNiArMjUyLDYgQEAgbGV0IHJlcGxhY2UgfnN0ciB+c3ViIH5ieSA9CiAJCSh0cnVl
LCAoc2xpY2Ugfmxhc3Q6aSBzdHIpIF4gYnkgXiAKICAgICAgICAgICAgICAgICAgICAoc2xpY2Ug
fmZpcnN0OihpKyhTdHJpbmcubGVuZ3RoIHN1YikpIHN0cikpCiAgICAgICAgIHdpdGgKLQkJSW52
YWxpZF9zdHJpbmcgLT4gKGZhbHNlLCBTdHJpbmcuY29weSBzdHIpCisJCUludmFsaWRfc3RyaW5n
IC0+IChmYWxzZSwgU3RyaW5nLnN1YiBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpKQogCiBlbmQK
ZGlmZiAtLWdpdCBhL2V4dGxpYi9leHRTdHJpbmcubWxpIGIvZXh0bGliL2V4dFN0cmluZy5tbGkK
aW5kZXggODhmYjRjZC4uYTI2YWRlMiAxMDA2NDQKLS0tIGEvZXh0bGliL2V4dFN0cmluZy5tbGkK
KysrIGIvZXh0bGliL2V4dFN0cmluZy5tbGkKQEAgLTE1MywxMyArMTUzLDEzIEBAIG1vZHVsZSBT
dHJpbmcgOgogCiAJdmFsIGxlbmd0aCA6IHN0cmluZyAtPiBpbnQKIAl2YWwgZ2V0IDogc3RyaW5n
IC0+IGludCAtPiBjaGFyCi0JdmFsIHNldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciAtPiB1bml0
Ci0JdmFsIGNyZWF0ZSA6IGludCAtPiBzdHJpbmcKKwl2YWwgc2V0IDogQnl0ZXMudCAtPiBpbnQg
LT4gY2hhciAtPiB1bml0CisJdmFsIGNyZWF0ZSA6IGludCAtPiBCeXRlcy50CiAJdmFsIG1ha2Ug
OiBpbnQgLT4gY2hhciAtPiBzdHJpbmcKIAl2YWwgY29weSA6IHN0cmluZyAtPiBzdHJpbmcKIAl2
YWwgc3ViIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gc3RyaW5nCi0JdmFsIGZpbGwgOiBzdHJp
bmcgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXQKLQl2YWwgYmxpdCA6IHN0cmluZyAtPiBp
bnQgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdAorCXZhbCBmaWxsIDogQnl0ZXMudCAt
PiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdAorCXZhbCBibGl0IDogc3RyaW5nIC0+IGludCAt
PiBCeXRlcy50IC0+IGludCAtPiBpbnQgLT4gdW5pdAogCXZhbCBjb25jYXQgOiBzdHJpbmcgLT4g
c3RyaW5nIGxpc3QgLT4gc3RyaW5nCiAJdmFsIGl0ZXIgOiAoY2hhciAtPiB1bml0KSAtPiBzdHJp
bmcgLT4gdW5pdAogCXZhbCBlc2NhcGVkIDogc3RyaW5nIC0+IHN0cmluZwpAQCAtMTgxLDggKzE4
MSw4IEBAIG1vZHVsZSBTdHJpbmcgOgogCSgqKi8qKikKIAogCWV4dGVybmFsIHVuc2FmZV9nZXQg
OiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSAiJXN0cmluZ191bnNhZmVfZ2V0IgotCWV4dGVybmFs
IHVuc2FmZV9zZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9ICIlc3RyaW5nX3Vu
c2FmZV9zZXQiCi0JZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmlu
ZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSAiY2FtbF9ibGl0X3N0cmluZyIgIm5vYWxsb2MiCi0J
ZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVu
aXQgPSAiY2FtbF9maWxsX3N0cmluZyIgIm5vYWxsb2MiCisJZXh0ZXJuYWwgdW5zYWZlX3NldCA6
IEJ5dGVzLnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9ICIlc3RyaW5nX3Vuc2FmZV9zZXQiCisJ
ZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IEJ5dGVzLnQgLT4gaW50IC0+
IGludCAtPiB1bml0ID0gImNhbWxfYmxpdF9zdHJpbmciICJub2FsbG9jIgorCWV4dGVybmFsIHVu
c2FmZV9maWxsIDogQnl0ZXMudCAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9ICJjYW1s
X2ZpbGxfc3RyaW5nIiAibm9hbGxvYyIKIAogICBlbmQKZGlmZiAtLWdpdCBhL2V4dGxpYi9zdGQu
bWwgYi9leHRsaWIvc3RkLm1sCmluZGV4IDEzYzg3NzYuLjYzMTU1ZTEgMTAwNjQ0Ci0tLSBhL2V4
dGxpYi9zdGQubWwKKysrIGIvZXh0bGliL3N0ZC5tbApAQCAtNDksMjIgKzQ5LDIzIEBAIGxldCBp
bnB1dF9hbGwgaWMgPQogICBsZXQgcmVjIGxvb3AgYWNjIHRvdGFsIGJ1ZiBvZnMgPQogICAgIGxl
dCBuID0gaW5wdXQgaWMgYnVmIG9mcyAoYnVmX2xlbiAtIG9mcykgaW4KICAgICBpZiBuID0gMCB0
aGVuCi0gICAgICBsZXQgcmVzID0gU3RyaW5nLmNyZWF0ZSB0b3RhbCBpbgorICAgICAgbGV0IHJl
cyA9IEJ5dGVzLmNyZWF0ZSB0b3RhbCBpbgogICAgICAgbGV0IHBvcyA9IHRvdGFsIC0gb2ZzIGlu
Ci0gICAgICBsZXQgXyA9IFN0cmluZy5ibGl0IGJ1ZiAwIHJlcyBwb3Mgb2ZzIGluCisgICAgICBs
ZXQgXyA9IEJ5dGVzLmJsaXQgYnVmIDAgcmVzIHBvcyBvZnMgaW4KICAgICAgIGxldCBjb2xsIHBv
cyBidWYgPQogICAgICAgICBsZXQgbmV3X3BvcyA9IHBvcyAtIGJ1Zl9sZW4gaW4KLSAgICAgICAg
U3RyaW5nLmJsaXQgYnVmIDAgcmVzIG5ld19wb3MgYnVmX2xlbjsKKyAgICAgICAgQnl0ZXMuYmxp
dCBidWYgMCByZXMgbmV3X3BvcyBidWZfbGVuOwogICAgICAgICBuZXdfcG9zIGluCiAgICAgICBs
ZXQgXyA9IExpc3QuZm9sZF9sZWZ0IGNvbGwgcG9zIGFjYyBpbgotICAgICAgcmVzCisgICAgICAo
KiBbcmVzXSBkb2Vzbid0IGVzY2FwZSBhbmQgd2lsbCBub3QgYmUgbXV0YXRlZCBhZ2FpbiAqKQor
ICAgICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXMKICAgICBlbHNlCiAgICAgICBsZXQgbmV3
X29mcyA9IG9mcyArIG4gaW4KICAgICAgIGxldCBuZXdfdG90YWwgPSB0b3RhbCArIG4gaW4KICAg
ICAgIGlmIG5ld19vZnMgPSBidWZfbGVuIHRoZW4KLSAgICAgICAgbG9vcCAoYnVmIDo6IGFjYykg
bmV3X3RvdGFsIChTdHJpbmcuY3JlYXRlIGJ1Zl9sZW4pIDAKKyAgICAgICAgbG9vcCAoYnVmIDo6
IGFjYykgbmV3X3RvdGFsIChCeXRlcy5jcmVhdGUgYnVmX2xlbikgMAogICAgICAgZWxzZSBsb29w
IGFjYyBuZXdfdG90YWwgYnVmIG5ld19vZnMgaW4KLSAgbG9vcCBbXSAwIChTdHJpbmcuY3JlYXRl
IGJ1Zl9sZW4pIDAKKyAgbG9vcCBbXSAwIChCeXRlcy5jcmVhdGUgYnVmX2xlbikgMAogCiBsZXQg
aW5wdXRfZmlsZSA/KGJpbj1mYWxzZSkgZm5hbWUgPQogICBsZXQgY2ggPSAoaWYgYmluIHRoZW4g
b3Blbl9pbl9iaW4gZWxzZSBvcGVuX2luKSBmbmFtZSBpbgpkaWZmIC0tZ2l0IGEvZXh0bGliL3Vu
emlwLm1sIGIvZXh0bGliL3VuemlwLm1sCmluZGV4IGMxYjEyNWMuLjRlMDE4Y2QgMTAwNjQ0Ci0t
LSBhL2V4dGxpYi91bnppcC5tbAorKysgYi9leHRsaWIvdW56aXAubWwKQEAgLTMxLDcgKzMxLDcg
QEAgdHlwZSBhZGxlcjMyID0gewogfQogCiB0eXBlIHdpbmRvdyA9IHsKLQltdXRhYmxlIHdidWZm
ZXIgOiBzdHJpbmc7CisJbXV0YWJsZSB3YnVmZmVyIDogQnl0ZXMudDsKIAltdXRhYmxlIHdwb3Mg
OiBpbnQ7CiAJd2NyYyA6IGFkbGVyMzI7CiB9CkBAIC01Niw3ICs1Niw3IEBAIHR5cGUgdCA9IHsK
IAltdXRhYmxlIHpsZW4gOiBpbnQ7CiAJbXV0YWJsZSB6ZGlzdCA6IGludDsKIAltdXRhYmxlIHpu
ZWVkZWQgOiBpbnQ7Ci0JbXV0YWJsZSB6b3V0cHV0IDogc3RyaW5nOworCW11dGFibGUgem91dHB1
dCA6IEJ5dGVzLnQ7CiAJbXV0YWJsZSB6b3V0cG9zIDogaW50OwogCXppbnB1dCA6IElPLmlucHV0
OwogCXpsZW5ndGhzIDogaW50IGFycmF5OwpAQCAtMTQ2LDcgKzE0Niw3IEBAIGxldCBhZGxlcjMy
X2NyZWF0ZSgpID0gewogbGV0IGFkbGVyMzJfdXBkYXRlIGEgcyBwIGwgPQogCWxldCBwID0gcmVm
IHAgaW4KIAlmb3IgaSA9IDAgdG8gbCAtIDEgZG8KLQkJbGV0IGMgPSBpbnRfb2ZfY2hhciAoU3Ry
aW5nLnVuc2FmZV9nZXQgcyAhcCkgaW4KKwkJbGV0IGMgPSBpbnRfb2ZfY2hhciAoQnl0ZXMudW5z
YWZlX2dldCBzICFwKSBpbgogCQlhLmExIDwtIChhLmExICsgYykgbW9kIDY1NTIxOwogCQlhLmEy
IDwtIChhLmEyICsgYS5hMSkgbW9kIDY1NTIxOwogCQlpbmNyIHA7CkBAIC0xNjksMzAgKzE2OSwz
MCBAQCBsZXQgd2luZG93X3NpemUgPSAxIGxzbCAxNQogbGV0IGJ1ZmZlcl9zaXplID0gMSBsc2wg
MTYKIAogbGV0IHdpbmRvd19jcmVhdGUgc2l6ZSA9IHsKLQkJd2J1ZmZlciA9IFN0cmluZy5jcmVh
dGUgYnVmZmVyX3NpemU7CisJCXdidWZmZXIgPSBCeXRlcy5jcmVhdGUgYnVmZmVyX3NpemU7CiAJ
CXdwb3MgPSAwOwogCQl3Y3JjID0gYWRsZXIzMl9jcmVhdGUoKQogCX0KIAogbGV0IHdpbmRvd19z
bGlkZSB3ID0gCiAJYWRsZXIzMl91cGRhdGUgdy53Y3JjIHcud2J1ZmZlciAwIHdpbmRvd19zaXpl
OwotCWxldCBiID0gU3RyaW5nLmNyZWF0ZSBidWZmZXJfc2l6ZSBpbgorCWxldCBiID0gQnl0ZXMu
Y3JlYXRlIGJ1ZmZlcl9zaXplIGluCiAJdy53cG9zIDwtIHcud3BvcyAtIHdpbmRvd19zaXplOwot
CVN0cmluZy51bnNhZmVfYmxpdCB3LndidWZmZXIgd2luZG93X3NpemUgYiAwIHcud3BvczsKKwlC
eXRlcy51bnNhZmVfYmxpdCB3LndidWZmZXIgd2luZG93X3NpemUgYiAwIHcud3BvczsKIAl3Lndi
dWZmZXIgPC0gYgogCi1sZXQgd2luZG93X2FkZF9zdHJpbmcgdyBzIHAgbGVuID0KK2xldCB3aW5k
b3dfYWRkX2J5dGVzIHcgcyBwIGxlbiA9CiAJaWYgdy53cG9zICsgbGVuID4gYnVmZmVyX3NpemUg
dGhlbiB3aW5kb3dfc2xpZGUgdzsKLQlTdHJpbmcudW5zYWZlX2JsaXQgcyBwIHcud2J1ZmZlciB3
Lndwb3MgbGVuOworCUJ5dGVzLnVuc2FmZV9ibGl0IHMgcCB3LndidWZmZXIgdy53cG9zIGxlbjsK
IAl3Lndwb3MgPC0gdy53cG9zICsgbGVuCiAKIGxldCB3aW5kb3dfYWRkX2NoYXIgdyBjID0KIAlp
ZiB3Lndwb3MgPSBidWZmZXJfc2l6ZSB0aGVuIHdpbmRvd19zbGlkZSB3OwotCVN0cmluZy51bnNh
ZmVfc2V0IHcud2J1ZmZlciB3Lndwb3MgYzsKKwlCeXRlcy51bnNhZmVfc2V0IHcud2J1ZmZlciB3
Lndwb3MgYzsKIAl3Lndwb3MgPC0gdy53cG9zICsgMQogCiBsZXQgd2luZG93X2dldF9sYXN0X2No
YXIgdyA9Ci0JU3RyaW5nLnVuc2FmZV9nZXQgdy53YnVmZmVyICh3Lndwb3MgLSAxKQorCUJ5dGVz
LnVuc2FmZV9nZXQgdy53YnVmZmVyICh3Lndwb3MgLSAxKQogCiBsZXQgd2luZG93X2F2YWlsYWJs
ZSB3ID0KIAl3Lndwb3MKQEAgLTI0OCwyNSArMjQ4LDI1IEBAIGxldCByZXNldF9iaXRzIHogPQog
CXouemJpdHMgPC0gMDsKIAl6LnpuYml0cyA8LSAwCiAKLWxldCBhZGRfc3RyaW5nIHogcyBwIGwg
PQotCXdpbmRvd19hZGRfc3RyaW5nIHouendpbmRvdyBzIHAgbDsKLQlTdHJpbmcudW5zYWZlX2Js
aXQgcyBwIHouem91dHB1dCB6LnpvdXRwb3MgbDsKK2xldCBhZGRfYnl0ZXMgeiBzIHAgbCA9CisJ
d2luZG93X2FkZF9ieXRlcyB6Lnp3aW5kb3cgcyBwIGw7CisJQnl0ZXMudW5zYWZlX2JsaXQgcyBw
IHouem91dHB1dCB6LnpvdXRwb3MgbDsKIAl6LnpuZWVkZWQgPC0gei56bmVlZGVkIC0gbDsKIAl6
LnpvdXRwb3MgPC0gei56b3V0cG9zICsgbAogCiBsZXQgYWRkX2NoYXIgeiBjID0KIAl3aW5kb3df
YWRkX2NoYXIgei56d2luZG93IGM7Ci0JU3RyaW5nLnVuc2FmZV9zZXQgei56b3V0cHV0IHouem91
dHBvcyBjOworCUJ5dGVzLnVuc2FmZV9zZXQgei56b3V0cHV0IHouem91dHBvcyBjOwogCXouem5l
ZWRlZCA8LSB6LnpuZWVkZWQgLSAxOwogCXouem91dHBvcyA8LSB6LnpvdXRwb3MgKyAxCiAKIGxl
dCBhZGRfZGlzdF9vbmUgeiBuID0KIAlsZXQgYyA9IHdpbmRvd19nZXRfbGFzdF9jaGFyIHouendp
bmRvdyBpbgotCWxldCBzID0gU3RyaW5nLm1ha2UgbiBjIGluCi0JYWRkX3N0cmluZyB6IHMgMCBu
CisJbGV0IHMgPSBCeXRlcy5tYWtlIG4gYyBpbgorCWFkZF9ieXRlcyB6IHMgMCBuCiAKIGxldCBh
ZGRfZGlzdCB6IGQgbCA9Ci0JYWRkX3N0cmluZyB6IHouendpbmRvdy53YnVmZmVyICh6Lnp3aW5k
b3cud3BvcyAtIGQpIGwKKwlhZGRfYnl0ZXMgeiB6Lnp3aW5kb3cud2J1ZmZlciAoei56d2luZG93
Lndwb3MgLSBkKSBsCiAKIGxldCByZWMgYXBwbHlfaHVmZm1hbiB6ID0gZnVuY3Rpb24KIAl8IEZv
dW5kIG4gLT4gbgpAQCAtMzYyLDkgKzM2Miw5IEBAIGxldCByZWMgaW5mbGF0ZV9sb29wIHogPQog
CXwgRmxhdCAtPgogCQlsZXQgcmxlbiA9IG1pbiB6LnpsZW4gei56bmVlZGVkIGluCiAJCWxldCBz
dHIgPSBJTy5ucmVhZCB6LnppbnB1dCBybGVuIGluCi0JCWxldCBsZW4gPSBTdHJpbmcubGVuZ3Ro
IHN0ciBpbgorCQlsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIHN0ciBpbgogCQl6LnpsZW4gPC0gei56
bGVuIC0gbGVuOwotCQlhZGRfc3RyaW5nIHogc3RyIDAgbGVuOworCQlhZGRfYnl0ZXMgeiBzdHIg
MCBsZW47CiAJCWlmIHouemxlbiA9IDAgdGhlbiB6LnpzdGF0ZSA8LSAoaWYgei56ZmluYWwgdGhl
biBDcmMgZWxzZSBCbG9jayk7CiAJCWlmIHouem5lZWRlZCA+IDAgdGhlbiBpbmZsYXRlX2xvb3Ag
egogCXwgRGlzdE9uZSAtPgpAQCAtNDAzLDcgKzQwMyw3IEBAIGxldCByZWMgaW5mbGF0ZV9sb29w
IHogPQogCQkJaW5mbGF0ZV9sb29wIHoKIAogbGV0IGluZmxhdGVfZGF0YSB6IHMgcG9zIGxlbiA9
Ci0JaWYgcG9zIDwgMCB8fCBsZW4gPCAwIHx8IHBvcyArIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0
aGVuIGludmFsaWRfYXJnICJpbmZsYXRlX2RhdGEiOworCWlmIHBvcyA8IDAgfHwgbGVuIDwgMCB8
fCBwb3MgKyBsZW4gPiBCeXRlcy5sZW5ndGggcyB0aGVuIGludmFsaWRfYXJnICJpbmZsYXRlX2Rh
dGEiOwogCXouem5lZWRlZCA8LSBsZW47CiAJei56b3V0cG9zIDwtIHBvczsKIAl6LnpvdXRwdXQg
PC0gczsKQEAgLTQyNSw3ICs0MjUsNyBAQCBsZXQgaW5mbGF0ZV9pbml0ID8oaGVhZGVyPXRydWUp
IGNoID0KIAkJemJpdHMgPSAwOwogCQl6bmJpdHMgPSAwOwogCQl6bmVlZGVkID0gMDsKLQkJem91
dHB1dCA9ICIiOworCQl6b3V0cHV0ID0gQnl0ZXMuZW1wdHk7CiAJCXpvdXRwb3MgPSAwOwogCQl6
bGVuZ3RocyA9IEFycmF5Lm1ha2UgMTkgKC0xKTsKIAkJendpbmRvdyA9IHdpbmRvd19jcmVhdGUg
KDEgbHNsIDE1KQpAQCAtNDMzLDExICs0MzMsMTEgQEAgbGV0IGluZmxhdGVfaW5pdCA/KGhlYWRl
cj10cnVlKSBjaCA9CiAKIGxldCBpbmZsYXRlID8oaGVhZGVyPXRydWUpIGNoID0KIAlsZXQgeiA9
IGluZmxhdGVfaW5pdCB+aGVhZGVyIGNoIGluCi0JbGV0IHMgPSBTdHJpbmcuY3JlYXRlIDEgaW4K
KwlsZXQgcyA9IEJ5dGVzLmNyZWF0ZSAxIGluCiAJSU8uY3JlYXRlX2luCiAJCX5yZWFkOihmdW4o
KSAtPgogCQkJbGV0IGwgPSBpbmZsYXRlX2RhdGEgeiBzIDAgMSBpbgotCQkJaWYgbCA9IDEgdGhl
biBTdHJpbmcudW5zYWZlX2dldCBzIDAgZWxzZSByYWlzZSBJTy5Ob19tb3JlX2lucHV0CisJCQlp
ZiBsID0gMSB0aGVuIEJ5dGVzLnVuc2FmZV9nZXQgcyAwIGVsc2UgcmFpc2UgSU8uTm9fbW9yZV9p
bnB1dAogCQkpCiAJCX5pbnB1dDooZnVuIHMgcCBsIC0+CiAJCQlsZXQgbiA9IGluZmxhdGVfZGF0
YSB6IHMgcCBsIGluCmRpZmYgLS1naXQgYS9leHRsaWIvdW56aXAubWxpIGIvZXh0bGliL3Vuemlw
Lm1saQppbmRleCA1YTIxY2ZjLi5jNmUwNWJiIDEwMDY0NAotLS0gYS9leHRsaWIvdW56aXAubWxp
CisrKyBiL2V4dGxpYi91bnppcC5tbGkKQEAgLTQyLDQgKzQyLDQgQEAgdmFsIGluZmxhdGUgOiA/
aGVhZGVyOmJvb2wgLT4gSU8uaW5wdXQgLT4gSU8uaW5wdXQKIHR5cGUgdAogCiB2YWwgaW5mbGF0
ZV9pbml0IDogP2hlYWRlcjpib29sIC0+IElPLmlucHV0IC0+IHQKLXZhbCBpbmZsYXRlX2RhdGEg
OiB0IC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IGludAordmFsIGluZmxhdGVfZGF0YSA6IHQg
LT4gQnl0ZXMudCAtPiBpbnQgLT4gaW50IC0+IGludAotLSAKMS45LjMKCg==
--90e6ba613f7a0d1c85050426bd0b
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
--90e6ba613f7a0d1c85050426bd0b
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
ocaml-lib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ocaml-lib-devel

--90e6ba613f7a0d1c85050426bd0b--