<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>15740</bug_id>
          
          <creation_ts>2007-10-28 18:27:31 -0700</creation_ts>
          <short_desc>Optimize ResolveNode to use direct memory access for local variables</short_desc>
          <delta_ts>2007-10-28 19:12:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14868</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59746</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-28 18:27:31 -0700</bug_when>
    <thetext>Subtask of bug 14868.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59747</commentid>
    <comment_count>1</comment_count>
      <attachid>16928</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-28 18:29:24 -0700</bug_when>
    <thetext>Created attachment 16928
Patch

Please take this albatross off my neck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59751</commentid>
    <comment_count>2</comment_count>
      <attachid>16928</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-28 18:50:46 -0700</bug_when>
    <thetext>Comment on attachment 16928
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59753</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-28 19:12:08 -0700</bug_when>
    <thetext>Committed revision 27199.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16928</attachid>
            <date>2007-10-28 18:29:24 -0700</date>
            <delta_ts>2007-10-28 18:50:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-optimize-resolve.txt</filename>
            <type>text/plain</type>
            <size>78035</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTk1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMDctMTAt
MjggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE11Y2ggc3VwcG9ydGluZyB3
b3JrIGRvbmUgYnkgTWFjaWVqIFN0YWNob3dpYWssIE1ha3MgT3Jsb3ZpY2gsIGFuZCAKKyAgICAg
ICAgQ2FtZXJvbiBad2FyaWNoLgorICAgICAgICAKKyAgICAgICAgQVNUIHRyYW5zZm9tIHRvIHJl
cGxhY2Ugc2xvdyByZXNvbHZlIG5vZGVzIHdpdGggZmFzdCBsb2NhbCB2YXJpYWJsZQorICAgICAg
ICBhbHRlcm5hdGl2ZXMgdGhhdCBkbyBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gQ3VycmVudGx5LCBv
bmx5IFJlc29sdmVOb2RlCisgICAgICAgIHByb3ZpZGVzIGEgZmFzdCBsb2NhbCB2YXJpYWJsZSBh
bHRlcm5hdGl2ZS4gNiBPdGhlcnMgYXJlIHNvb24gdG8gY29tZS4KKyAgICAgICAgCisgICAgICAg
IDE2LjclIHNwZWVkdXAgb24gU3VuU3BpZGVyLgorICAgICAgICAKKyAgICAgICAgTW9zdCBvZiB0
aGlzIHBhdGNoIGlzIGp1c3Qgc2NhZmZvbGRpbmcgdG8gc3VwcG9ydCBpdGVyYXRpbmcgYWxsIHRo
ZSAKKyAgICAgICAgcmVzb2x2ZSBub2RlcyBpbiB0aGUgQVNUIHRocm91Z2ggb3B0aW1pemVSZXNv
bHZlTm9kZXMoKS4gSW4gCisgICAgICAgIG9wdGltaXplUmVzb2x2ZU5vZGVzKCksIG1vc3QgY2xh
c3NlcyBqdXN0IHB1c2ggdGhlaXIgY2hpbGQgbm9kZXMgb250byAKKyAgICAgICAgdGhlIHByb2Nl
c3Npbmcgc3RhY2ssIHdoaWxlIFJlc29sdmVOb2RlcyBhY3R1YWxseSByZXBsYWNlIHRoZW1zZWx2
ZXMgaW4gCisgICAgICAgIHRoZSB0cmVlIHdpdGggbW9yZSBvcHRpbWl6ZWQgYWx0ZXJuYXRpdmVz
LCBpZiBwb3NzaWJsZS4KKworICAgICAgICBIZXJlIGFyZSB0aGUgaW50ZXJlc3RpbmcgYml0czoK
KworICAgICAgICAqIGtqcy9ub2Rlcy5oOiBBZGRlZCBQbGFjZW1lbnROZXdBZG9wdFRhZywgYWxv
bmcgd2l0aCBpbXBsZW1lbnRhdGlvbnMgCisgICAgICAgIGluIE5vZGUgYW5kIFJlc29sdmVOb2Rl
LiBUaGlzIHRhZyBhbGxvd3MgeW91IHRvIHVzZSBwbGFjZW1lbnQgbmV3IHRvIAorICAgICAgICBz
d2FwIG91dCBhIGJhc2UgY2xhc3MgTm9kZSBpbiBmYXZvciBvZiBhIHN1YmNsYXNzIGNvcHkgdGhh
dCBob2xkcyB0aGUKKyAgICAgICAgc2FtZSBkYXRhLiAoV2l0aG91dCB0aGlzIHRhZywgZGVmYXVs
dCBpbml0aWFsaXphdGlvbiB3b3VsZCBOVUxMIG91dAorICAgICAgICBSZWZQdHJzLCBjaGFuZ2Ug
bGluZSBudW1iZXJzLCBldGMuKQorCisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAg
KEtKUzo6UmVzb2x2ZU5vZGU6OmV2YWx1YXRlKTogU2luY2Ugd2UncmUgdGFraW5nIHRoZSBzbG93
IHBhdGgsIEFTU0VSVAorICAgICAgICB0aGF0IHRoZSBmYXN0IHBhdGggaXMgaW1wb3NzaWJsZSwg
dG8gbWFrZSBzdXJlIHdlIGRpZG4ndCBsZWF2ZSBhbnl0aGluZworICAgICAgICBvbiB0aGUgdGFi
bGUuCisKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25Cb2R5Tm9kZTo6b3B0aW1pemVSZXNvbHZlTm9k
ZXMpOiBIZXJlJ3Mgd2hlcmUgdGhlIEFTVCAKKyAgICAgICAgdHJhbnNmb3JtYXRpb24gaGFwcGVu
cy4KKyAgICAgICAgCisgICAgICAgIChLSlM6OlJlc29sdmVOb2RlOjpvcHRpbWl6ZVJlc29sdmVO
b2Rlcyk6IEhlcmUncyB3aGVyZSB0aGUgUmVzb2x2ZU5vZGUKKyAgICAgICAgb3B0aW1pemF0aW9u
IGhhcHBlbnMuCisKKyAgICAgICAgKiBranMvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKEtKUzo6
U3ltYm9sVGFibGU6OmNvbnRhaW5zKTogSW1wbGVtZW50ZWQgY29udGFpbnMoKSBmb3IgdGhlIHNh
a2Ugb2YKKyAgICAgICAgYW4gQVNTRVJULgorCisgICAgICAgICoga2pzL2Z1bmN0aW9uLmg6IEFk
ZGVkIHN5bWJvbFRhYmxlKCkgYWNjZXNzb3IgZm9yLCBmb3IgdGhlIHNha2Ugb2YgCisgICAgICAg
IGFuIEFTU0VSVC4KKwogMjAwNy0xMC0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgLSBmaXggR1RLIGJ1aWxkCkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTk1KQorKysga2pzL2Z1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDcgKzM5Miw3IEBAIGNvbnN0IENsYXNzSW5m
byBBY3RpdmF0aW9uSW1wOjppbmZvID0geyIKIAogQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbklt
cChGdW5jdGlvbkltcCogZnVuY3Rpb24sIGNvbnN0IExpc3QmIGFyZ3VtZW50cykKICAgICA6IGQo
bmV3IEFjdGl2YXRpb25JbXBQcml2YXRlKGZ1bmN0aW9uLCBhcmd1bWVudHMpKQotICAgICwgc3lt
Ym9sVGFibGUoJmZ1bmN0aW9uLT5ib2R5LT5zeW1ib2xUYWJsZSgpKQorICAgICwgbV9zeW1ib2xU
YWJsZSgmZnVuY3Rpb24tPmJvZHktPnN5bWJvbFRhYmxlKCkpCiB7CiB9CiAKQEAgLTQyMiw3ICs0
MjIsNyBAQCBib29sIEFjdGl2YXRpb25JbXA6OmdldE93blByb3BlcnR5U2xvdChFCiAKICAgICAv
LyBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3QgZ2V0IGFuZCBjaGVjayBmb3IgYSBzcGVjaWFs
IGVtcHR5CiAgICAgLy8gdmFsdWUgdGhhbiB0byBkbyBhIHNlcGFyYXRlIGNvbnRhaW5zIGNoZWNr
Ci0gICAgc2l6ZV90IGluZGV4ID0gc3ltYm9sVGFibGUtPmdldChwcm9wZXJ0eU5hbWUudXN0cmlu
ZygpLnJlcCgpKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX3N5bWJvbFRhYmxlLT5nZXQocHJvcGVy
dHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7CiAgICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xN
YXJrZXIpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJmQtPmxvY2FsU3RvcmFn
ZVtpbmRleF0udmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0Nyw3ICs0NDcsNyBA
QCBib29sIEFjdGl2YXRpb25JbXA6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTCiAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoc3ltYm9sVGFibGUtPmNvbnRhaW5zKHByb3BlcnR5TmFtZS51
c3RyaW5nKCkucmVwKCkpKQorICAgIGlmIChtX3N5bWJvbFRhYmxlLT5jb250YWlucyhwcm9wZXJ0
eU5hbWUudXN0cmluZygpLnJlcCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwpAQCAtNDYx
LDcgKzQ2MSw3IEBAIHZvaWQgQWN0aXZhdGlvbkltcDo6cHV0KEV4ZWNTdGF0ZSosIGNvbnMKIAog
ICAvLyBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3QgZ2V0IGFuZCBjaGVjayBmb3IgYSBzcGVj
aWFsIGVtcHR5CiAgIC8vIHZhbHVlIHRoYW4gdG8gZG8gYSBzZXBhcmF0ZSBjb250YWlucyBjaGVj
awotICBzaXplX3QgaW5kZXggPSBzeW1ib2xUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51c3RyaW5n
KCkucmVwKCkpOworICBzaXplX3QgaW5kZXggPSBtX3N5bWJvbFRhYmxlLT5nZXQocHJvcGVydHlO
YW1lLnVzdHJpbmcoKS5yZXAoKSk7CiAgIGlmIChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2Vy
KSB7CiAgICAgTG9jYWxTdG9yYWdlRW50cnkmIGVudHJ5ID0gZC0+bG9jYWxTdG9yYWdlW2luZGV4
XTsKICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlOwpJbmRleDoga2pzL2Z1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTk1KQorKysga2pzL2Z1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAog
ICAgIHZvaWQgcmVsZWFzZUFyZ3VtZW50cygpIHsgZC0+YXJndW1lbnRzLnJlc2V0KCk7IH0KICAg
ICAKLSAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSgpIHsgcmV0dXJuIGQtPmxvY2FsU3Rv
cmFnZTsgfTsKKyAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSgpIHsgcmV0dXJuIGQtPmxv
Y2FsU3RvcmFnZTsgfQorICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICpt
X3N5bWJvbFRhYmxlOyB9CiAKICAgcHJpdmF0ZToKICAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CkBAIC0xOTUsNyArMTk2LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKik7
CiAgICAgCiAgICAgT3duUHRyPEFjdGl2YXRpb25JbXBQcml2YXRlPiBkOwotICAgIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZTsKKyAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKICAgfTsK
IAogICBjbGFzcyBHbG9iYWxGdW5jSW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewpJ
bmRleDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuY3BwCShyZXZpc2lv
biAyNzE5NSkKKysrIGtqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw2ICszNzMs
MTEgQEAgSlNWYWx1ZSAqVGhpc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZQogLy8gRUNNQSAx
MS4xLjIgJiAxMC4xLjQKIEpTVmFsdWUgKlJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCiB7CisgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5
LgorICBBU1NFUlQoZXhlYy0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUKKyAgICAgICAgIHx8
IGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgIT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpIAorICAg
ICAgICAgfHwgKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCktPmlzQWN0aXZhdGlvbigpICYmICFzdGF0
aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSktPnN5bWJvbFRh
YmxlKCkuY29udGFpbnMoaWRlbnQudXN0cmluZygpLnJlcCgpKSkpOworCiAgIGNvbnN0IFNjb3Bl
Q2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwogICBTY29wZUNoYWluSXRlcmF0b3Ig
aXRlciA9IGNoYWluLmJlZ2luKCk7CiAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5l
bmQoKTsKQEAgLTM5Myw4ICszOTgsMzEgQEAgSlNWYWx1ZSAqUmVzb2x2ZU5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZQogICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50KTsKIH0KIAordm9pZCBSZXNvbHZlTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rp
b25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikK
K3sKKyAgICBzaXplX3QgaW5kZXggPSBmdW5jdGlvbkJvZHktPnN5bWJvbFRhYmxlKCkuZ2V0KGlk
ZW50LnVzdHJpbmcoKS5yZXAoKSk7CisgICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJr
ZXIpCisgICAgICAgIG5ldyAodGhpcykgTG9jYWxWYXJpYWJsZVJlc29sdmVOb2RlKHRoaXMsIGlu
ZGV4KTsKK30KKworSlNWYWx1ZSogTG9jYWxWYXJpYWJsZVJlc29sdmVOb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgQWN0aXZhdGlvbkltcCogdmFyaWFibGVPYmplY3QgPSBz
dGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSk7CisgICAg
QVNTRVJUKHZhcmlhYmxlT2JqZWN0LT5pc0FjdGl2YXRpb24oKSk7CisgICAgQVNTRVJUKHZhcmlh
YmxlT2JqZWN0ID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7CisgICAgcmV0dXJuIHZhcmlh
YmxlT2JqZWN0LT5sb2NhbFN0b3JhZ2UoKVtpbmRleF0udmFsdWU7Cit9CisKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKK3ZvaWQgRWxlbWVudE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2sp
Cit7CisgICAgaWYgKG5leHQpCisgICAgICAgIG5vZGVTdGFjay5hcHBlbmQobmV4dC5nZXQoKSk7
CisgICAgQVNTRVJUKG5vZGUpOworICAgIG5vZGVTdGFjay5hcHBlbmQobm9kZS5nZXQoKSk7Cit9
CisKIC8vIEVDTUEgMTEuMS40CiBKU1ZhbHVlICpFbGVtZW50Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogewpAQCAtNDE2LDYgKzQ0NCwxMyBAQCB2b2lkIEVsZW1lbnROb2RlOjpicmVh
a0N5Y2xlKCkgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcnJheU5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgQXJyYXlOb2RlOjpv
cHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIGlmIChlbGVtZW50KQorICAgICAgICBub2Rl
U3RhY2suYXBwZW5kKGVsZW1lbnQuZ2V0KCkpOworfQorCisKIC8vIEVDTUEgMTEuMS40CiBKU1Zh
bHVlICpBcnJheU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTQ0MCw2ICs0
NzUsMTIgQEAgSlNWYWx1ZSAqQXJyYXlOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKgogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT2JqZWN0TGl0ZXJhbE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIE9iamVjdExpdGVyYWxOb2RlOjpvcHRpbWl6ZVJl
c29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYgbm9kZVN0YWNrKQoreworICAgIGlmIChsaXN0KQorICAgICAgICBub2RlU3RhY2suYXBwZW5k
KGxpc3QuZ2V0KCkpOworfQorCiAvLyBFQ01BIDExLjEuNQogSlNWYWx1ZSAqT2JqZWN0TGl0ZXJh
bE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTQ1MSw2ICs0OTIsMTMgQEAg
SlNWYWx1ZSAqT2JqZWN0TGl0ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCit2b2lkIFByb3BlcnR5TGlzdE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3Rh
Y2spCit7CisgICAgaWYgKG5leHQpCisgICAgICAgIG5vZGVTdGFjay5hcHBlbmQobmV4dC5nZXQo
KSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChub2RlLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS4x
LjUKIEpTVmFsdWUgKlByb3BlcnR5TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykK
IHsKQEAgLTQ4NCw2ICs1MzIsMTIgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpicmVha0N5Y2xl
KCkgCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBQcm9wZXJ0eU5vZGU6Om9wdGlt
aXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChhc3NpZ24uZ2V0KCkp
OworfQorCiAvLyBFQ01BIDExLjEuNQogSlNWYWx1ZSAqUHJvcGVydHlOb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUqKQogewpAQCAtNDkzLDYgKzU0NywxMiBAQCBKU1ZhbHVlICpQcm9wZXJ0eU5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
cmFja2V0QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3Zv
aWQgQnJhY2tldEFjY2Vzc29yTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBu
b2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIx
LmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS4yLjFhCiBKU1ZhbHVlICpCcmFja2V0QWNjZXNzb3JO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC01MDksNiArNTY5LDExIEBAIEpT
VmFsdWUgKkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlKEUKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIERvdEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCit2b2lkIERvdEFjY2Vzc29yTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEx
LjIuMWIKIEpTVmFsdWUgKkRvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQogewpAQCAtNTIwLDYgKzU4NSwxNCBAQCBKU1ZhbHVlICpEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1
YXRlKEV4ZWNTCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcmd1bWVudExp
c3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgQXJndW1lbnRMaXN0
Tm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBpZiAobmV4dCkKKyAgICAgICAg
bm9kZVN0YWNrLmFwcGVuZChuZXh0LmdldCgpKTsKKyAgICBBU1NFUlQoZXhwcik7CisgICAgbm9k
ZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKK30KKwogSlNWYWx1ZSAqQXJndW1lbnRMaXN0Tm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICopCiB7CiAgIEFTU0VSVCgwKTsKQEAgLTU0Nyw2ICs2MjAs
MTIgQEAgdm9pZCBBcmd1bWVudExpc3ROb2RlOjpicmVha0N5Y2xlKCkgCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcmd1bWVudHNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKK3ZvaWQgQXJndW1lbnRzTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBpZiAobGlzdCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChsaXN0LmdldCgp
KTsKK30KKwogSlNWYWx1ZSAqQXJndW1lbnRzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICopCiB7
CiAgIEFTU0VSVCgwKTsKQEAgLTU1NSw2ICs2MzQsMTMgQEAgSlNWYWx1ZSAqQXJndW1lbnRzTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
TmV3RXhwck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIE5l
d0V4cHJOb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIGlmIChhcmdzKQorICAg
ICAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQo
ZXhwci5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuMi4yCiAKIEpTVmFsdWUgKk5ld0V4cHJOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCkBAIC01ODAsNiArNjY2LDEyIEBAIEpTVmFsdWUg
Kk5ld0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUKICAgcmV0dXJuIGNvbnN0ci0+Y29uc3Ry
dWN0KGV4ZWMsIGFyZ0xpc3QpOwogfQogCit2b2lkIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6b3B0
aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkp
OworICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuMi4z
CiBKU1ZhbHVlICpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKQEAgLTYwNCw2ICs2OTYsMTEgQEAgSlNWYWx1ZSAqRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
OjpldmFsdWF0ZQogICByZXR1cm4gZnVuYy0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsK
IH0KIAordm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEx
LjIuMwogSlNWYWx1ZSAqRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYykKIHsKQEAgLTY1Myw2ICs3NTAsMTMgQEAgSlNWYWx1ZSAqRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmV2YWx1YQogICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4
ZWMsIGlkZW50KTsKIH0KIAordm9pZCBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6b3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkpOworICAg
IG5vZGVTdGFjay5hcHBlbmQoc3Vic2NyaXB0LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5k
KGJhc2UuZ2V0KCkpOworfQorCiAvLyBFQ01BIDExLjIuMwogSlNWYWx1ZSAqRnVuY3Rpb25DYWxs
QnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTcxNCw2ICs4MTgs
MTIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmRvdEV4cHJEb2VzTm90QWxsb3dDYQogICByZXR1cm4g
Ik9iamVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMuJXMpIGRvZXMgbm90IGFsbG93IGNh
bGxzLiI7CiB9CiAKK3ZvaWQgRnVuY3Rpb25DYWxsRG90Tm9kZTo6b3B0aW1pemVSZXNvbHZlTm9k
ZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkpOworICAgIG5vZGVTdGFj
ay5hcHBlbmQoYmFzZS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuMi4zCiBKU1ZhbHVlICpGdW5j
dGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC03ODAsNiAr
ODkwLDEyIEBAIEpTVmFsdWUgKlBvc3RmaXhSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXgKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhCcmFja2V0Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgUG9zdGZpeEJyYWNrZXROb2RlOjpv
cHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIG5vZGVTdGFjay5hcHBlbmQobV9zdWJzY3Jp
cHQuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKK30KKwogSlNW
YWx1ZSAqUG9zdGZpeEJyYWNrZXROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CiAg
IEpTVmFsdWUgKmJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC04MTgsNiAr
OTM0LDExIEBAIEpTVmFsdWUgKlBvc3RmaXhCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoRXgKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhEb3ROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBQb3N0Zml4RG90Tm9kZTo6b3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Cit9
CisKIEpTVmFsdWUgKlBvc3RmaXhEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7
CiAgIEpTVmFsdWUgKmJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC04NzUs
NiArOTk2LDEyIEBAIEpTVmFsdWUgKkRlbGV0ZVJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgRGVsZXRlQnJhY2tldE5vZGU6
Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX3N1YnNj
cmlwdC5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkpOworfQorCiBK
U1ZhbHVlICpEZWxldGVCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewog
ICBKU1ZhbHVlICpiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtODkzLDYg
KzEwMjAsMTIgQEAgSlNWYWx1ZSAqRGVsZXRlQnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4ZQogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIERlbGV0ZURvdE5vZGU6Om9wdGlt
aXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkp
OworfQorCiBKU1ZhbHVlICpEZWxldGVEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
CiB7CiAgIEpTVmFsdWUgKmJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC05
MDMsNiArMTAzNiwxMiBAQCBKU1ZhbHVlICpEZWxldGVEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3Rh
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBEZWxldGVWYWx1ZU5v
ZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4
cHIuZ2V0KCkpOworfQorCiBKU1ZhbHVlICpEZWxldGVWYWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYykKIHsKICAgbV9leHByLT5ldmFsdWF0ZShleGVjKTsKQEAgLTkxNCw2ICsxMDUz
LDExIEBAIEpTVmFsdWUgKkRlbGV0ZVZhbHVlTm9kZTo6ZXZhbHVhdGUoRXhlY1MKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZvaWROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBWb2lkTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEx
LjQuMgogSlNWYWx1ZSAqVm9pZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAg
LTkyNyw2ICsxMDcxLDExIEBAIEpTVmFsdWUgKlZvaWROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIFR5cGVPZlZhbHVlTm9k
ZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhw
ci5nZXQoKSk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlICp0eXBlU3RyaW5nRm9yVmFsdWUoSlNWYWx1
ZSAqdikgS0pTX0ZBU1RfQ0FMTDsKIHN0YXRpYyBKU1ZhbHVlICp0eXBlU3RyaW5nRm9yVmFsdWUo
SlNWYWx1ZSAqdikKIHsKQEAgLTEwMjYsNiArMTE3NSwxMiBAQCBKU1ZhbHVlICpQcmVmaXhSZXNv
bHZlTm9kZTo6ZXZhbHVhdGUoRXhlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBQcmVmaXhCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K3ZvaWQgUHJlZml4QnJhY2tldE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAg
bm9kZVN0YWNrLmFwcGVuZChtX3N1YnNjcmlwdC5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2Jhc2UuZ2V0KCkpOworfQorCiBKU1ZhbHVlICpQcmVmaXhCcmFja2V0Tm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKQogewogICBKU1ZhbHVlICpiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2
YWx1YXRlKGV4ZWMpOwpAQCAtMTA2Niw2ICsxMjIxLDExIEBAIEpTVmFsdWUgKlByZWZpeEJyYWNr
ZXROb2RlOjpldmFsdWF0ZShFeGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFByZWZpeERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lk
IFByZWZpeERvdE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNr
LmFwcGVuZChtX2Jhc2UuZ2V0KCkpOworfQorCiBKU1ZhbHVlICpQcmVmaXhEb3ROb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIEpTVmFsdWUgKmJhc2VWYWx1ZSA9IG1fYmFzZS0+
ZXZhbHVhdGUoZXhlYyk7CkBAIC0xMDk3LDYgKzEyNTcsMTEgQEAgSlNWYWx1ZSogUHJlZml4RXJy
b3JOb2RlOjpldmFsdWF0ZShFeGVjUwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gVW5hcnlQbHVzTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lk
IFVuYXJ5UGx1c05vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNr
LmFwcGVuZChleHByLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS40LjYKIEpTVmFsdWUgKlVuYXJ5
UGx1c05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTExMDgsNiArMTI3Mywx
MSBAQCBKU1ZhbHVlICpVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZShFeGVjU3RhCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOZWdhdGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgTmVnYXRlTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEx
LjQuNwogSlNWYWx1ZSAqTmVnYXRlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpA
QCAtMTEyMCw2ICsxMjkwLDExIEBAIEpTVmFsdWUgKk5lZ2F0ZU5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpdHdpc2VOb3ROb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBCaXR3aXNlTm90Tm9kZTo6
b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0
KCkpOworfQorCiAvLyBFQ01BIDExLjQuOAogSlNWYWx1ZSAqQml0d2lzZU5vdE5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTExMzAsNiArMTMwNSwxMSBAQCBKU1ZhbHVlICpC
aXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKK3ZvaWQgTG9naWNhbE5vdE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAg
bm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS40LjkKIEpTVmFs
dWUgKkxvZ2ljYWxOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xMTQw
LDYgKzEzMjAsMTIgQEAgSlNWYWx1ZSAqTG9naWNhbE5vdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdAog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTXVsdGlwbGljYXRpdmUgTm9kZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBNdWx0Tm9kZTo6b3B0
aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgp
KTsKKyAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0yLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS41
LjEKIEpTVmFsdWUgKk11bHROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0x
MTUyLDYgKzEzMzgsMTIgQEAgSlNWYWx1ZSAqTXVsdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZQogICAgIHJldHVybiBqc051bWJlcih2MS0+dG9OdW1iZXIoZXhlYykgKiB2Mi0+dG9OdW1iZXIo
ZXhlYykpOwogfQogCit2b2lkIERpdk5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9u
Qm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7Cisg
ICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCh0
ZXJtMi5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuNS4yCiBKU1ZhbHVlICpEaXZOb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xMTY0LDYgKzEzNTYsMTIgQEAgSlNWYWx1ZSAq
RGl2Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleAogICAgIHJldHVybiBqc051bWJlcih2MS0+
dG9OdW1iZXIoZXhlYykgLyB2Mi0+dG9OdW1iZXIoZXhlYykpOwogfQogCit2b2lkIE1vZE5vZGU6
Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5n
ZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Cit9CisKIC8vIEVDTUEg
MTEuNS4zCiBKU1ZhbHVlICpNb2ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBA
IC0xMTk5LDYgKzEzOTcsMTIgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlICphZGQoRXhlY1N0YXRl
ICpleAogICAgIHJldHVybiBqc051bWJlcihwMS0+dG9OdW1iZXIoZXhlYykgKyBwMi0+dG9OdW1i
ZXIoZXhlYykpOwogfQogCit2b2lkIEFkZE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7
CisgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVu
ZCh0ZXJtMi5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuNi4xCiBKU1ZhbHVlICpBZGROb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xMjExLDYgKzE0MTUsMTEgQEAgSlNWYWx1
ZSAqQWRkTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleAogICByZXR1cm4gYWRkKGV4ZWMsIHYx
LCB2Mik7CiB9CiAKK3ZvaWQgU3ViTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAg
ICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKHRl
cm0yLmdldCgpKTsKK30KIAogLy8gRUNNQSAxMS42LjIKIEpTVmFsdWUgKlN1Yk5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKQEAgLTEyMjYsNiArMTQzNSwxMiBAQCBKU1ZhbHVlICpTdWJO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBTaGlmdCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAordm9pZCBMZWZ0U2hpZnROb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIG5v
ZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTIu
Z2V0KCkpOworfQorCiAvLyBFQ01BIDExLjcuMQogSlNWYWx1ZSAqTGVmdFNoaWZ0Tm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMTIzOSw2ICsxNDU0LDEyIEBAIEpTVmFsdWUg
KkxlZnRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEKICAgcmV0dXJuIGpzTnVtYmVyKHYxLT50
b0ludDMyKGV4ZWMpIDw8IGkyKTsKIH0KIAordm9pZCBSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKKyAg
ICBub2RlU3RhY2suYXBwZW5kKHRlcm0yLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS43LjIKIEpT
VmFsdWUgKlJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0x
MjUyLDYgKzE0NzMsMTIgQEAgSlNWYWx1ZSAqUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dAogICByZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIoZXhlYykgPj4gaTIpOwogfQogCit2b2lk
IFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAg
bm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJt
Mi5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuNy4zCiBKU1ZhbHVlICpVbnNpZ25lZFJpZ2h0U2hp
ZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xMjkzLDYgKzE1MjAsMTIg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlKiBsZXNzVGhhbkVxKEV4ZWNTdAogICAgIHJldHVybiBq
c0Jvb2xlYW4oISh2Mi0+dG9TdHJpbmcoZXhlYykgPCB2MS0+dG9TdHJpbmcoZXhlYykpKTsKIH0K
IAordm9pZCBMZXNzTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgp
KTsKK30KKwogLy8gRUNNQSAxMS44LjEKIEpTVmFsdWUgKkxlc3NOb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpCiB7CkBAIC0xMzAzLDYgKzE1MzYsMTIgQEAgSlNWYWx1ZSAqTGVzc05vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZQogICByZXR1cm4gbGVzc1RoYW4oZXhlYywgdjEsIHYyKTsK
IH0KIAordm9pZCBHcmVhdGVyTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBu
b2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIx
LmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS44LjIKIEpTVmFsdWUgKkdyZWF0ZXJOb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xMzEzLDYgKzE1NTIsMTIgQEAgSlNWYWx1ZSAq
R3JlYXRlck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZQogICByZXR1cm4gbGVzc1RoYW4oZXhlYywg
djIsIHYxKTsKIH0KIAordm9pZCBMZXNzRXFOb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5j
dGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQor
eworICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBl
bmQoZXhwcjEuZ2V0KCkpOworfQorCiAvLyBFQ01BIDExLjguMwogSlNWYWx1ZSAqTGVzc0VxTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMTMyMyw2ICsxNTY4LDEyIEBAIEpT
VmFsdWUgKkxlc3NFcU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAKICAgcmV0dXJuIGxlc3NUaGFu
RXEoZXhlYywgdjEsIHYyKTsKIH0KIAordm9pZCBHcmVhdGVyRXFOb2RlOjpvcHRpbWl6ZVJlc29s
dmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYg
bm9kZVN0YWNrKQoreworICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOworICAgIG5v
ZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOworfQorCiAvLyBFQ01BIDExLjguNAogSlNWYWx1
ZSAqR3JlYXRlckVxTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMTMzMyw2
ICsxNTg0LDEyIEBAIEpTVmFsdWUgKkdyZWF0ZXJFcU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEKICAg
cmV0dXJuIGxlc3NUaGFuRXEoZXhlYywgdjIsIHYxKTsKIH0KIAordm9pZCBJbnN0YW5jZU9mTm9k
ZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIy
LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKK30KKwogLy8gRUNN
QSAxMS44LjYKIEpTVmFsdWUgKkluc3RhbmNlT2ZOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpCiB7CkBAIC0xMzU1LDYgKzE2MTIsMTIgQEAgSlNWYWx1ZSAqSW5zdGFuY2VPZk5vZGU6OmV2
YWx1YXRlKEV4ZWNTdAogICByZXR1cm4ganNCb29sZWFuKG8yLT5oYXNJbnN0YW5jZShleGVjLCB2
MSkpOwogfQogCit2b2lkIEluTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBu
b2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIx
LmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS44LjcKIEpTVmFsdWUgKkluTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQogewpAQCAtMTM3Myw2ICsxNjM2LDEyIEBAIEpTVmFsdWUgKkluTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEVxdWFsaXR5IE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCit2b2lkIEVxdWFsTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2Rl
U3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdl
dCgpKTsKK30KKwogLy8gRUNNQSAxMS45LjEKIEpTVmFsdWUgKkVxdWFsTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQogewpAQCAtMTM4NCw2ICsxNjUzLDEyIEBAIEpTVmFsdWUgKkVxdWFs
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICoKICAgcmV0dXJuIGpzQm9vbGVhbihlcXVhbChleGVj
LHYxLCB2MikpOwogfQogCit2b2lkIE5vdEVxdWFsTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2su
YXBwZW5kKGV4cHIxLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMS45LjIKIEpTVmFsdWUgKk5vdEVx
dWFsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMTM5NSw2ICsxNjcwLDEy
IEBAIEpTVmFsdWUgKk5vdEVxdWFsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXQKICAgcmV0dXJuIGpz
Qm9vbGVhbighZXF1YWwoZXhlYyx2MSwgdjIpKTsKIH0KIAordm9pZCBTdHJpY3RFcXVhbE5vZGU6
Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5n
ZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Cit9CisKIC8vIEVDTUEg
MTEuOS40CiBKU1ZhbHVlICpTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKQEAgLTE0MDYsNiArMTY4NywxMiBAQCBKU1ZhbHVlICpTdHJpY3RFcXVhbE5vZGU6OmV2
YWx1YXRlKEV4ZWNTCiAgIHJldHVybiBqc0Jvb2xlYW4oc3RyaWN0RXF1YWwoZXhlYyx2MSwgdjIp
KTsKIH0KIAordm9pZCBOb3RTdHJpY3RFcXVhbE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2sp
Cit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFw
cGVuZChleHByMS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuOS41CiBKU1ZhbHVlICpOb3RTdHJp
Y3RFcXVhbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTE0MTksNiArMTcw
NiwxMiBAQCBKU1ZhbHVlICpOb3RTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlKEV4CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaXQgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBCaXRBbmROb2RlOjpvcHRpbWl6ZVJl
c29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYgbm9kZVN0YWNrKQoreworICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOworICAg
IG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOworfQorCiAvLyBFQ01BIDExLjEwCiBKU1Zh
bHVlICpCaXRBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xNDMwLDYg
KzE3MjMsMTIgQEAgSlNWYWx1ZSAqQml0QW5kTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlIAogICBy
ZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIoZXhlYykgJiB2Mi0+dG9JbnQzMihleGVjKSk7CiB9
CiAKK3ZvaWQgQml0WE9yTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2Rl
U3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdl
dCgpKTsKK30KKwogSlNWYWx1ZSAqQml0WE9yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQogewogICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKQEAgLTE0NDAsNiAr
MTczOSwxMiBAQCBKU1ZhbHVlICpCaXRYT3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgCiAgIHJl
dHVybiBqc051bWJlcih2MS0+dG9JbnQzMihleGVjKSBeIHYyLT50b0ludDMyKGV4ZWMpKTsKIH0K
IAordm9pZCBCaXRPck5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0
YWNrLmFwcGVuZChleHByMi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQo
KSk7Cit9CisKIEpTVmFsdWUgKkJpdE9yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQog
ewogICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKQEAgLTE0NTIsNiArMTc1
NywxMiBAQCBKU1ZhbHVlICpCaXRPck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaW5hcnkgTG9naWNhbCBOb2RlcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgTG9naWNhbEFuZE5vZGU6Om9wdGltaXplUmVz
b2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7CisgICAg
bm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuMTEKIEpTVmFs
dWUgKkxvZ2ljYWxBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xNDY3
LDYgKzE3NzgsMTIgQEAgSlNWYWx1ZSAqTG9naWNhbEFuZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdAog
ICByZXR1cm4gdjI7CiB9CiAKK3ZvaWQgTG9naWNhbE9yTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9k
ZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKKyAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIxLmdldCgpKTsKK30KKwogSlNWYWx1ZSAqTG9naWNhbE9yTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0
ZShleGVjKTsKQEAgLTE0ODMsNiArMTgwMCwxMyBAQCBKU1ZhbHVlICpMb2dpY2FsT3JOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25k
aXRpb25hbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgQ29uZGl0
aW9uYWxOb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIG5vZGVTdGFjay5hcHBl
bmQoZXhwcjIuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOworICAg
IG5vZGVTdGFjay5hcHBlbmQobG9naWNhbC5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuMTIKIEpT
VmFsdWUgKkNvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAt
MTU2Nyw2ICsxODkxLDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgKnZhbHVlRm9y
UmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnblJlc29sdmVOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgQXNzaWduUmVzb2x2
ZU5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZCht
X3JpZ2h0LmdldCgpKTsKK30KKwogSlNWYWx1ZSAqQXNzaWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5z
Y29wZUNoYWluKCk7CkBAIC0xNjA5LDYgKzE5MzgsMTIgQEAgSlNWYWx1ZSAqQXNzaWduUmVzb2x2
ZU5vZGU6OmV2YWx1YXRlKEV4ZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
QXNzaWduRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lk
IEFzc2lnbkRvdE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNr
LmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQo
KSk7Cit9CisKIEpTVmFsdWUgKkFzc2lnbkRvdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKICAgSlNWYWx1ZSAqYmFzZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKQEAg
LTE2NDQsNiArMTk3OSwxMyBAQCBKU1ZhbHVlKiBBc3NpZ25FcnJvck5vZGU6OmV2YWx1YXRlKEV4
ZWNTCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25CcmFja2V0Tm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIEFzc2lnbkJyYWNr
ZXROb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9yaWdodC5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX3N1YnNjcmlwdC5nZXQoKSk7
CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkpOworfQorCiBKU1ZhbHVlICpBc3Np
Z25CcmFja2V0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICBKU1ZhbHVlICpi
YXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMTY5Myw2ICsyMDM1LDEyIEBA
IEpTVmFsdWUgKkFzc2lnbkJyYWNrZXROb2RlOjpldmFsdWF0ZShFeGUKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbW1hTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAordm9pZCBDb21tYU5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7
CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVu
ZChleHByMS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTEuMTQKIEpTVmFsdWUgKkNvbW1hTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMTcwNiw2ICsyMDU0LDExIEBAIEpTVmFs
dWUgKkNvbW1hTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICoKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEFzc2lnbkV4cHJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAordm9pZCBBc3NpZ25FeHByTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sK
KyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEyLjIKIEpT
VmFsdWUgKkFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0x
NzE0LDEzICsyMDY3LDIwIEBAIEpTVmFsdWUgKkFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZShFeGVj
U3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZhckRlY2xOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIAogVmFyRGVjbE5vZGU6OlZhckRl
Y2xOb2RlKGNvbnN0IElkZW50aWZpZXIgJmlkLCBBc3NpZ25FeHByTm9kZSAqaW4sIFR5cGUgdCkK
LSAgICA6IHZhclR5cGUodCksIGlkZW50KGlkKSwgaW5pdChpbikKKyAgICA6IHZhclR5cGUodCkK
KyAgICAsIGlkZW50KGlkKQorICAgICwgaW5pdChpbikKIHsKICAgICBtX21heUhhdmVEZWNsYXJh
dGlvbnMgPSB0cnVlOyAKIH0KIAordm9pZCBWYXJEZWNsTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9k
ZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKK3sKKyAgICBpZiAoaW5pdCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChpbml0Lmdl
dCgpKTsKK30KKyAgICAKIHZvaWQgVmFyRGVjbE5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJh
dGlvblN0YWNrcyYgc3RhY2tzKQogewogICAgIC8vIFRoZSBub3JtYWwgY2hlY2sgdG8gYXZvaWQg
b3ZlcndyaXRpbmcgcHJlLWV4aXN0aW5nIHZhbHVlcyB3aXRoIHZhcmlhYmxlCkBAIC0xODA2LDYg
KzIxNjYsMTMgQEAgSlNWYWx1ZSogVmFyRGVjbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFyRGVjbExpc3ROb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIFZhckRlY2xMaXN0Tm9kZTo6b3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKK3sKKyAgICBpZiAobmV4dCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChuZXh0LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKHZhci5nZXQoKSk7Cit9CisKIC8v
IEVDTUEgMTIuMgogSlNWYWx1ZSAqVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCiB7CkBAIC0xODMyLDYgKzIxOTksMTIgQEAgdm9pZCBWYXJEZWNsTGlzdE5vZGU6OmJy
ZWFrQ3ljbGUoKSAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZhclN0YXRl
bWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBWYXJTdGF0ZW1l
bnROb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIEFTU0VSVChuZXh0KTsKKyAg
ICBub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEyLjIKIENvbXBs
ZXRpb24gVmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0x
ODUxLDYgKzIyMjQsMTIgQEAgdm9pZCBWYXJTdGF0ZW1lbnROb2RlOjpnZXREZWNsYXJhdGlvbnMo
RAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmxvY2tOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIEJsb2NrTm9kZTo6b3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKK3sKKyAgICBpZiAoc291cmNlKQorICAgICAgICBub2RlU3RhY2suYXBw
ZW5kKHNvdXJjZS5nZXQoKSk7Cit9CisKIEJsb2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1l
bnRzTm9kZSAqcykKIHsKICAgaWYgKHMpIHsKQEAgLTE4ODgsNiArMjI2NywxMiBAQCBDb21wbGV0
aW9uIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBFeHByU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKK3ZvaWQgRXhwclN0YXRlbWVudE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7
CisgICAgQVNTRVJUKGV4cHIpOworICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQoKSk7Cit9
CisKIC8vIEVDTUEgMTIuNAogQ29tcGxldGlvbiBFeHByU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShF
eGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0xOTAxLDYgKzIyODYsMTYgQEAgQ29tcGxldGlvbiBFeHBy
U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gSWZOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2
b2lkIElmTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBpZiAoc3RhdGVtZW50
MikKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQyLmdldCgpKTsKKyAgICBBU1NF
UlQoc3RhdGVtZW50MSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQxLmdldCgpKTsK
KyAgICBBU1NFUlQoZXhwcik7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKK30K
KwogLy8gRUNNQSAxMi41CiBDb21wbGV0aW9uIElmTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4
ZWMpCiB7CkBAIC0xOTMyLDYgKzIzMjcsMTIgQEAgdm9pZCBJZk5vZGU6OmdldERlY2xhcmF0aW9u
cyhEZWNsYXJhdGlvbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9XaGls
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIERvV2hpbGVO
b2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIG5vZGVTdGFjay5hcHBlbmQoc3Rh
dGVtZW50LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiAv
LyBFQ01BIDEyLjYuMQogQ29tcGxldGlvbiBEb1doaWxlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUg
KmV4ZWMpCiB7CkBAIC0xOTczLDYgKzIzNzQsMTIgQEAgdm9pZCBEb1doaWxlTm9kZTo6Z2V0RGVj
bGFyYXRpb25zKERlY2xhcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2hp
bGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCit2b2lkIFdoaWxl
Tm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKHN0
YXRlbWVudC5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKK30KKwog
Ly8gRUNNQSAxMi42LjIKIENvbXBsZXRpb24gV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKIHsKQEAgLTIwMjAsNiArMjQyNywxNyBAQCB2b2lkIFdoaWxlTm9kZTo6Z2V0RGVjbGFy
YXRpb25zKERlY2xhcmF0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgRm9yTm9k
ZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKHN0YXRl
bWVudC5nZXQoKSk7CisgICAgaWYgKGV4cHIzKQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKGV4
cHIzLmdldCgpKTsKKyAgICBpZiAoZXhwcjIpCisgICAgICAgIG5vZGVTdGFjay5hcHBlbmQoZXhw
cjIuZ2V0KCkpOworICAgIGlmIChleHByMSkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
MS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTIuNi4zCiBDb21wbGV0aW9uIEZvck5vZGU6OmV4ZWN1
dGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMjA4Nyw2ICsyNTA1LDE1IEBAIEZvckluTm9kZTo6
Rm9ySW5Ob2RlKGNvbnN0IElkZW50aWZpZXIgJmkKICAgbGV4cHIgPSBuZXcgUmVzb2x2ZU5vZGUo
aWRlbnQpOwogfQogCit2b2lkIEZvckluTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sK
KyAgICBub2RlU3RhY2suYXBwZW5kKHN0YXRlbWVudC5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFw
cGVuZChleHByLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKGxleHByLmdldCgpKTsKKyAg
ICBpZiAodmFyRGVjbCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZCh2YXJEZWNsLmdldCgpKTsK
K30KKwogdm9pZCBGb3JJbk5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYg
c3RhY2tzKQogeyAKICAgICBpZiAoc3RhdGVtZW50LT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIApA
QCAtMjIyNSw2ICsyNjUyLDEyIEBAIENvbXBsZXRpb24gQnJlYWtOb2RlOjpleGVjdXRlKEV4ZWNT
dGF0ZSAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybk5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBSZXR1cm5Ob2RlOjpvcHRp
bWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZCh2YWx1ZS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTIuOQogQ29tcGxldGlvbiBSZXR1
cm5Ob2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTIyNTEsNiArMjY4NCwxMiBA
QCB2b2lkIFdpdGhOb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpCiAgICAgICAgIHN0YWNr
cy5ub2RlU3RhY2suYXBwZW5kKHN0YXRlbWVudC5nZXQoKSk7IAogfQogCit2b2lkIFdpdGhOb2Rl
OjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQoreworICAgIC8vIENhbid0IG9wdGltaXplIHdpdGhp
biBgc3RhdGVtZW50JyBiZWNhdXNlIGB3aXRoJyBpbnRyb2R1Y2VzIGEgZHluYW1pYyBzY29wZS4K
KyAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiAvLyBFQ01BIDEyLjEwCiBD
b21wbGV0aW9uIFdpdGhOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTIyNjks
NiArMjcwOCwxNCBAQCBDb21wbGV0aW9uIFdpdGhOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQ2xhdXNlTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgQ2FzZUNsYXVzZU5vZGU6Om9wdGltaXpl
UmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJiBub2RlU3RhY2spCit7CisgICAgaWYgKGV4cHIpCisgICAgICAgIG5vZGVTdGFjay5hcHBl
bmQoZXhwci5nZXQoKSk7CisgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChzb3VyY2UuZ2V0KCkpOworfQorCiB2b2lkIENhc2VDbGF1c2VOb2RlOjpnZXREZWNsYXJhdGlv
bnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykKIHsgCiAgICAgaWYgKHNvdXJjZSAmJiBzb3Vy
Y2UtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkgCkBAIC0yMjk1LDYgKzI3NDIsMTMgQEAgQ29tcGxl
dGlvbiBDYXNlQ2xhdXNlTm9kZTo6ZXZhbFN0YXRlbWVudAogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQ2xhdXNlTGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCit2b2lkIENsYXVzZUxpc3ROb2RlOjpvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQorewor
ICAgIGlmIChuZXh0KQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0KCkpOworICAg
IG5vZGVTdGFjay5hcHBlbmQoY2xhdXNlLmdldCgpKTsKK30KKwogdm9pZCBDbGF1c2VMaXN0Tm9k
ZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpCiB7IAogICAgIGlm
IChuZXh0ICYmIG5leHQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkgCkBAIC0yMzM4LDYgKzI3OTIs
MTYgQEAgQ2FzZUJsb2NrTm9kZTo6Q2FzZUJsb2NrTm9kZShDbGF1c2VMaXN0TgogICB9CiB9CiAg
Cit2b2lkIENhc2VCbG9ja05vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAgaWYg
KGxpc3QyKQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKGxpc3QyLmdldCgpKTsKKyAgICBpZiAo
ZGVmKQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKGRlZi5nZXQoKSk7CisgICAgaWYgKGxpc3Qx
KQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKGxpc3QxLmdldCgpKTsKK30KKwogdm9pZCBDYXNl
QmxvY2tOb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykgCiB7
IAogICAgIGlmIChsaXN0MiAmJiBsaXN0Mi0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKQEAgLTI0
MjAsNiArMjg4NCwxMiBAQCBDb21wbGV0aW9uIENhc2VCbG9ja05vZGU6OmV2YWxCbG9jayhFeGVj
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTd2l0Y2hOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgU3dpdGNoTm9kZTo6b3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKGJsb2NrLmdldCgpKTsKKyAg
ICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworfQorCiB2b2lkIFN3aXRjaE5vZGU6Omdl
dERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKSAKIHsgCiAgICAgaWYgKGJs
b2NrLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIApAQCAtMjQ0NSw2ICsyOTE1LDExIEBAIENvbXBs
ZXRpb24gU3dpdGNoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIExhYmVsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAordm9pZCBMYWJlbE5vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7CisgICAg
bm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkpOworfQorCiB2b2lkIExhYmVsTm9kZTo6
Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpIAogeyAKICAgICBpZiAo
c3RhdGVtZW50LT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIApAQCAtMjQ2Niw2ICsyOTQxLDExIEBA
IENvbXBsZXRpb24gTGFiZWxOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRocm93Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAordm9pZCBUaHJvd05vZGU6Om9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCit7
CisgICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKK30KKwogLy8gRUNNQSAxMi4xMwog
Q29tcGxldGlvbiBUaHJvd05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQogewpAQCAtMjQ4
MCw2ICsyOTYwLDE0IEBAIENvbXBsZXRpb24gVGhyb3dOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyeU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAordm9pZCBUcnlOb2RlOjpvcHRpbWl6ZVJlc29s
dmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYg
bm9kZVN0YWNrKQoreworICAgIC8vIENhbid0IG9wdGltaXplIHdpdGhpbiBgY2F0Y2hCbG9jaycg
YmVjYXVzZSBgY2F0Y2gnIGludHJvZHVjZXMgYSBkeW5hbWljIHNjb3BlLgorICAgIGlmIChmaW5h
bGx5QmxvY2spCisgICAgICAgIG5vZGVTdGFjay5hcHBlbmQoZmluYWxseUJsb2NrLmdldCgpKTsK
KyAgICBub2RlU3RhY2suYXBwZW5kKHRyeUJsb2NrLmdldCgpKTsKK30KKwogdm9pZCBUcnlOb2Rl
OjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykgCiB7IAogICAgIGlm
IChmaW5hbGx5QmxvY2sgJiYgZmluYWxseUJsb2NrLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIApA
QCAtMjUzOCw2ICszMDI2LDcgQEAgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShT
b3VyYwogICAgICwgbV9zb3VyY2VJZChQYXJzZXI6OnNpZCkKICAgICAsIG1faW5pdGlhbGl6ZWRE
ZWNsYXJhdGlvblN0YWNrcyhmYWxzZSkKICAgICAsIG1faW5pdGlhbGl6ZWRTeW1ib2xUYWJsZShm
YWxzZSkKKyAgICAsIG1fb3B0aW1pemVkUmVzb2x2ZU5vZGVzKGZhbHNlKQogewogICBzZXRMb2Mo
LTEsIC0xKTsKIH0KQEAgLTI1NjYsNyArMzA1NSw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
aW5pdGlhbGl6ZURlY2xhcmEKICAgICBtX2luaXRpYWxpemVkRGVjbGFyYXRpb25TdGFja3MgPSB0
cnVlOwogfQogCi12b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmluaXRpYWxpemVzeW1ib2xUYWJsZSgp
Cit2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmluaXRpYWxpemVTeW1ib2xUYWJsZSgpCiB7CiAgICAg
c2l6ZV90IGksIHNpemU7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKQEAgLTI1ODQsNiArMzA3Mywy
OCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmluaXRpYWxpemVzeW1ib2xUCiAgICAgbV9pbml0
aWFsaXplZFN5bWJvbFRhYmxlID0gdHJ1ZTsKIH0KIAordm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpv
cHRpbWl6ZVJlc29sdmVOb2RlcygpCit7CisgICAgTm9kZSogbm9kZSA9IHNvdXJjZS5nZXQoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2sgbm9kZVN0YWNrOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgbm9k
ZS0+b3B0aW1pemVSZXNvbHZlTm9kZXModGhpcywgbm9kZVN0YWNrKTsKKyAgICAgICAgCisgICAg
ICAgIHNpemVfdCBzaXplID0gbm9kZVN0YWNrLnNpemUoKTsKKyAgICAgICAgaWYgKCFzaXplKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC0tc2l6ZTsKKyAgICAgICAgbm9kZSA9IG5vZGVT
dGFja1tzaXplXTsKKyAgICAgICAgbm9kZVN0YWNrLnNocmluayhzaXplKTsKKyAgICB9CisKKyAg
ICBtX29wdGltaXplZFJlc29sdmVOb2RlcyA9IHRydWU7Cit9CisKIHZvaWQgRnVuY3Rpb25Cb2R5
Tm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFt
X2luaXRpYWxpemVkRGVjbGFyYXRpb25TdGFja3MpCkBAIC0yNTk4LDcgKzMxMDksMTAgQEAgdm9p
ZCBGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpbwogdm9pZCBGdW5jdGlvbkJvZHlO
b2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zRm9yRnVuY3Rpb25Db2RlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBpZiAoIW1faW5pdGlhbGl6ZWRTeW1ib2xUYWJsZSkKLSAgICAgICAgaW5pdGlhbGl6
ZXN5bWJvbFRhYmxlKCk7CisgICAgICAgIGluaXRpYWxpemVTeW1ib2xUYWJsZSgpOworCisgICAg
aWYgKCFtX29wdGltaXplZFJlc29sdmVOb2RlcykKKyAgICAgICAgb3B0aW1pemVSZXNvbHZlTm9k
ZXMoKTsKIAogICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpLT5pc0FjdGl2YXRpb24o
KSk7CiAgICAgQWN0aXZhdGlvbkltcDo6TG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UgPSBzdGF0
aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSktPmxvY2FsU3Rv
cmFnZSgpOwpAQCAtMjYwOCw3ICszMTIyLDcgQEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpwcm9j
ZXNzRGVjbGFyYXRpbwogICAgIAogICAgIHNpemVfdCBpLCBzaXplOwogCi0gICAgLy8gTk9URTog
TXVzdCBtYXRjaCB0aGUgb3JkZXIgb2YgYWRkaXRpb24gaW4gaW5pdGlhbGl6ZXN5bWJvbFRhYmxl
KCkuCisgICAgLy8gTk9URTogTXVzdCBtYXRjaCB0aGUgb3JkZXIgb2YgYWRkaXRpb24gaW4gaW5p
dGlhbGl6ZVN5bWJvbFRhYmxlKCkuCiAKICAgICBmb3IgKGkgPSAwLCBzaXplID0gbV92YXJTdGFj
ay5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgVmFyRGVjbE5vZGUqIG5vZGUgPSBt
X3ZhclN0YWNrW2ldOwpAQCAtMjc2Myw2ICszMjc3LDEzIEBAIFNvdXJjZUVsZW1lbnRzTm9kZTo6
U291cmNlRWxlbWVudHNOb2RlKFMKICAgc2V0TG9jKHMxLT5maXJzdExpbmUoKSwgczItPmxhc3RM
aW5lKCkpOwogfQogCit2b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6b3B0aW1pemVSZXNvbHZlTm9k
ZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKK3sKKyAgICBpZiAobmV4dCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChuZXh0Lmdl
dCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG5vZGUuZ2V0KCkpOworfQorCiB2b2lkIFNvdXJj
ZUVsZW1lbnRzTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3Mp
CiB7IAogICAgIGlmIChuZXh0ICYmIG5leHQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkKSW5kZXg6
IGtqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5oCShyZXZpc2lvbiAyNzE5NSkK
KysrIGtqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwxMSBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgUHJlY0V4cHJlc3Npb24KICAgICB9OwogICAKKyAgICAvLyBTcGVj
aWZpZXMgdGhhdCBhIE5vZGUgc2hvdWxkIGFkb3B0IHRoZSBtZW1vcnkgbGF5b3V0IGl0IHdhcyBp
bml0aWFsaXplZCBpbnRvLgorICAgIC8vIFdlIHVzZSB0aGlzIHRvIHN3YXAgYSBwcmUtZXhpc3Rp
bmcgYmFzZSBjbGFzcyBub2RlIHdpdGggYSBtb3JlIG9wdGltaXplZCAKKyAgICAvLyBzdWJjbGFz
cyBub2RlLgorICAgIGVudW0gUGxhY2VtZW50TmV3QWRvcHRUYWcgeyBQbGFjZW1lbnROZXdBZG9w
dCB9OworCiAgIHN0cnVjdCBEZWNsYXJhdGlvblN0YWNrcyB7CiAgICAgICB0eXBlZGVmIFZlY3Rv
cjxOb2RlKiwgMTY+IE5vZGVTdGFjazsKICAgICAgIHR5cGVkZWYgVmVjdG9yPFZhckRlY2xOb2Rl
KiwgMTY+IFZhclN0YWNrOwpAQCAtMTExLDYgKzExNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBj
bGFzcyBOb2RlIHsKICAgcHVibGljOgogICAgIE5vZGUoKSBLSlNfRkFTVF9DQUxMOworICAgIE5v
ZGUoUGxhY2VtZW50TmV3QWRvcHRUYWcpIHsgfQogICAgIHZpcnR1YWwgfk5vZGUoKTsKIAogICAg
IHZpcnR1YWwgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKSBLSlNfRkFTVF9DQUxM
ID0gMDsKQEAgLTEzNSw2ICsxNDEsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAvLyBVc2VkIGZv
ciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgbm9kZSB0cmVlLiBEb2Vz
IG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCiAgICAgYm9vbCBtYXlIYXZlRGVj
bGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9tYXlIYXZlRGVjbGFyYXRpb25zOyB9CiAgICAg
dmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNU
X0NBTEwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIAorICAgIC8vIFVzZWQgZm9yIGl0
ZXJhdGl2ZSwgZGVwdGgtZmlyc3QgdHJhdmVyc2FsIG9mIHRoZSBub2RlIHRyZWUuIERvZXMgbm90
IGNyb3NzIGZ1bmN0aW9uIGNhbGwgYm91bmRhcmllcy4KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGJyZWFrQ3ljbGUo
KSBLSlNfRkFTVF9DQUxMIHsgfQogCkBAIC0yNTksNyArMjY4LDE5IEBAIG5hbWVzcGFjZSBLSlMg
ewogCiAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6Ci0gICAg
UmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciAmcykgS0pTX0ZBU1RfQ0FMTCA6IGlkZW50KHMp
IHsgfQorICAgIFJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXIgJnMpIEtKU19GQVNUX0NBTEwg
CisgICAgICAgIDogaWRlbnQocykgCisgICAgeyAKKyAgICB9CisKKyAgICBSZXNvbHZlTm9kZShQ
bGFjZW1lbnROZXdBZG9wdFRhZykgS0pTX0ZBU1RfQ0FMTCAKKyAgICAgICAgOiBOb2RlKFBsYWNl
bWVudE5ld0Fkb3B0KQorICAgICAgICAsIGlkZW50KGlkZW50KSAKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKwogICAgIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQpA
QCAtMjY4LDggKzI4OSwyNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZXNvbHZlTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IGlkZW50OyB9CiAKLSAgcHJpdmF0ZToKKyAgcHJvdGVjdGVkOgogICAgIElkZW50aWZpZXIgaWRl
bnQ7CisgICAgc2l6ZV90IGluZGV4OyAvLyBVc2VkIGJ5IExvY2FsVmFyaWFibGVSZXNvbHZlTm9k
ZS4KKyAgfTsKKworICBjbGFzcyBMb2NhbFZhcmlhYmxlUmVzb2x2ZU5vZGUgOiBwdWJsaWMgUmVz
b2x2ZU5vZGUgeworICBwdWJsaWM6CisgICAgTG9jYWxWYXJpYWJsZVJlc29sdmVOb2RlKFJlc29s
dmVOb2RlKiBuLCBzaXplX3QgaSkKKyAgICAgICAgOiBSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdB
ZG9wdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChuID09IHRoaXMpOworICAgICAgICBBU1NFUlQo
c2l6ZW9mKG4pID09IHNpemVvZih0aGlzKSk7CisKKyAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2lu
Z1N5bWJvbE1hcmtlcik7CisgICAgICAgIGluZGV4ID0gaTsKKyAgICB9CisKKyAgICBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICB9OwogCiAgIGNsYXNzIEVs
ZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpAQCAtMjc4LDYgKzMxNSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIEVsZW1lbnROb2RlKGludCBlLCBOb2RlICpuKSBLSlNfRkFTVF9DQUxMIDogbmV4
dCh0aGlzKSwgZWxpc2lvbihlKSwgbm9kZShuKSB7IFBhcnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlz
KTsgfQogICAgIEVsZW1lbnROb2RlKEVsZW1lbnROb2RlICpsLCBpbnQgZSwgTm9kZSAqbikgS0pT
X0ZBU1RfQ0FMTAogICAgICAgOiBuZXh0KGwtPm5leHQpLCBlbGlzaW9uKGUpLCBub2RlKG4pIHsg
bC0+bmV4dCA9IHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgUGFzc1JlZlB0cjxFbGVtZW50Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFT
VF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CkBAIC0yOTcsNiArMzM1LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICA6IGVsZW1lbnQoZWxlLT5uZXh0LnJlbGVhc2UoKSksIGVsaXNp
b24oMCksIG9wdChmYWxzZSkgeyBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShlbGVtZW50LmdldCgp
KTsgfQogICAgIEFycmF5Tm9kZShpbnQgZWxpLCBFbGVtZW50Tm9kZSAqZWxlKSBLSlNfRkFTVF9D
QUxMCiAgICAgICA6IGVsZW1lbnQoZWxlLT5uZXh0LnJlbGVhc2UoKSksIGVsaXNpb24oZWxpKSwg
b3B0KHRydWUpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoZWxlbWVudC5nZXQoKSk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQpAQCAt
MzExLDYgKzM1MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGVudW0gVHlwZSB7IENvbnN0YW50
LCBHZXR0ZXIsIFNldHRlciB9OwogICAgIFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiBu
LCBOb2RlICphLCBUeXBlIHQpIEtKU19GQVNUX0NBTEwKICAgICAgIDogbV9uYW1lKG4pLCBhc3Np
Z24oYSksIHR5cGUodCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwpAQCAtMzI5LDYgKzM2
OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBub2RlKG4pLCBuZXh0KHRoaXMpIHsgUGFy
c2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyB9CiAgICAgUHJvcGVydHlMaXN0Tm9kZShQcm9wZXJ0
eU5vZGUgKm4sIFByb3BlcnR5TGlzdE5vZGUgKmwpIEtKU19GQVNUX0NBTEwKICAgICAgIDogbm9k
ZShuKSwgbmV4dChsLT5uZXh0KSB7IGwtPm5leHQgPSB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIFBhc3NSZWZQdHI8UHJvcGVydHlMaXN0
Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgp
OyB9CkBAIC0zNDQsNiArMzg1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBP
YmplY3RMaXRlcmFsTm9kZSgpIEtKU19GQVNUX0NBTEwgeyB9CiAgICAgT2JqZWN0TGl0ZXJhbE5v
ZGUoUHJvcGVydHlMaXN0Tm9kZSAqbCkgS0pTX0ZBU1RfQ0FMTCA6IGxpc3QobC0+bmV4dC5yZWxl
YXNlKCkpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUobGlzdC5nZXQoKSk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQpAQCAtMzU0LDYg
KzM5Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBCcmFja2V0QWNjZXNzb3JOb2RlIDog
cHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgQnJhY2tldEFjY2Vzc29yTm9kZShOb2RlICpl
MSwgTm9kZSAqZTIpIEtKU19GQVNUX0NBTEwgOiBleHByMShlMSksIGV4cHIyKGUyKSB7fQorICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSog
ZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KQEAgLTM3
MSw2ICs0MTQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRG90QWNjZXNzb3JOb2RlIDog
cHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgRG90QWNjZXNzb3JOb2RlKE5vZGUgKmUsIGNv
bnN0IElkZW50aWZpZXIgJnMpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBpZGVudChzKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CkBA
IC0zOTEsNiArNDM1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXJndW1lbnRMaXN0Tm9kZShO
b2RlICplKSBLSlNfRkFTVF9DQUxMIDogbmV4dCh0aGlzKSwgZXhwcihlKSB7IFBhcnNlcjo6bm90
ZU5vZGVDeWNsZSh0aGlzKTsgfQogICAgIEFyZ3VtZW50TGlzdE5vZGUoQXJndW1lbnRMaXN0Tm9k
ZSAqbCwgTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCAKICAgICAgIDogbmV4dChsLT5uZXh0KSwgZXhw
cihlKSB7IGwtPm5leHQgPSB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2
ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIExpc3QgZXZhbHVhdGVMaXN0KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CkBAIC00MDgsNiArNDUzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXJndW1lbnRz
Tm9kZSgpIEtKU19GQVNUX0NBTEwgeyB9CiAgICAgQXJndW1lbnRzTm9kZShBcmd1bWVudExpc3RO
b2RlICpsKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGxpc3QobC0+bmV4dC5yZWxlYXNlKCkpIHsg
UGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUobGlzdC5nZXQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgTGlzdCBldmFsdWF0ZUxpc3QoRXhlY1N0YXRlICpl
eGVjKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGxpc3QgPyBsaXN0LT5ldmFsdWF0ZUxpc3QoZXhl
YykgOiBMaXN0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKQEAgLTQyMCw2ICs0NjYsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgcHVibGljOgogICAgIE5ld0V4cHJOb2RlKE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHBy
KGUpIHt9CiAgICAgTmV3RXhwck5vZGUoTm9kZSAqZSwgQXJndW1lbnRzTm9kZSAqYSkgS0pTX0ZB
U1RfQ0FMTCA6IGV4cHIoZSksIGFyZ3MoYSkge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjTGVmdEhhbmRTaWRlOyB9CkBAIC00MzEsNiArNDc4LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSA6IHB1YmxpYyBOb2Rl
IHsKICAgcHVibGljOgogICAgIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShOb2RlICplLCBBcmd1bWVu
dHNOb2RlICphKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgYXJncyhhKSB7fQorICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CkBAIC00NDIsNiArNDkw
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIDog
cHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoY29u
c3QgSWRlbnRpZmllciYgaSwgQXJndW1lbnRzTm9kZSAqYSkgS0pTX0ZBU1RfQ0FMTCA6IGlkZW50
KGkpLCBhcmdzKGEpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0NhbGw7IH0KQEAgLTQ1Myw2ICs1MDIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3Mg
RnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBG
dW5jdGlvbkNhbGxCcmFja2V0Tm9kZShOb2RlICpiLCBOb2RlICpzLCBBcmd1bWVudHNOb2RlICph
KSBLSlNfRkFTVF9DQUxMIDogYmFzZShiKSwgc3Vic2NyaXB0KHMpLCBhcmdzKGEpIHt9CisgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KQEAgLTQ2NSw2
ICs1MTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6
IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoTm9kZSAq
YiwgY29uc3QgSWRlbnRpZmllciAmaSwgQXJndW1lbnRzTm9kZSAqYSkgS0pTX0ZBU1RfQ0FMTCA6
IGJhc2UoYiksIGlkZW50KGkpLCBhcmdzKGEpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
UmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KQEAgLTQ4OCw2ICs1MzksNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgY2xhc3MgUG9zdGZpeEJyYWNrZXROb2RlIDogcHVibGljIE5vZGUgewogICBwdWJs
aWM6CiAgICAgUG9zdGZpeEJyYWNrZXROb2RlKE5vZGUgKmIsIE5vZGUgKnMsIE9wZXJhdG9yIG8p
IEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYiksIG1fc3Vic2NyaXB0KHMpLCBtX29wZXIobykge30K
KyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQpA
QCAtNTAwLDYgKzU1Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBQb3N0Zml4RG90Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIFBvc3RmaXhEb3ROb2RlKE5vZGUgKmIs
IGNvbnN0IElkZW50aWZpZXImIGksIE9wZXJhdG9yIG8pIEtKU19GQVNUX0NBTEwgOiBtX2Jhc2Uo
YiksIG1faWRlbnQoaSksIG1fb3BlcihvKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJl
c29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CkBAIC01MzMsNiArNTg2LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgIGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDogcHVibGljIE5vZGUgewogICBwdWJs
aWM6CiAgICAgRGVsZXRlQnJhY2tldE5vZGUoTm9kZSAqYmFzZSwgTm9kZSAqc3Vic2NyaXB0KSBL
SlNfRkFTVF9DQUxMIDogbV9iYXNlKGJhc2UpLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpIHt9Cisg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CkBAIC01
NDQsNiArNTk4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERlbGV0ZURvdE5vZGUgOiBw
dWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBEZWxldGVEb3ROb2RlKE5vZGUgKmJhc2UsIGNv
bnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYmFzZSksIG1faWRlbnQo
aSkge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAg
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7
IH0KQEAgLTU1NSw2ICs2MTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRGVsZXRlVmFs
dWVOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgRGVsZXRlVmFsdWVOb2RlKE5v
ZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBtX2V4cHIoZSkge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KQEAgLTU2NSw2ICs2MjEsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgY2xhc3MgVm9pZE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoK
ICAgICBWb2lkTm9kZShOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQorICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQpAQCAtNTg1LDYg
KzY0Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBUeXBlT2ZWYWx1ZU5vZGUgOiBwdWJs
aWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBUeXBlT2ZWYWx1ZU5vZGUoTm9kZSAqZSkgS0pTX0ZB
U1RfQ0FMTCA6IG1fZXhwcihlKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVO
b2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNVbmFyeTsgfQpAQCAtNjA2LDYgKzY2NCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICBjbGFzcyBQcmVmaXhCcmFja2V0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAg
IFByZWZpeEJyYWNrZXROb2RlKE5vZGUgKmIsIE5vZGUgKnMsIE9wZXJhdG9yIG8pIEtKU19GQVNU
X0NBTEwgOiBtX2Jhc2UoYiksIG1fc3Vic2NyaXB0KHMpLCBtX29wZXIobykge30KKyAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KQEAgLTYxOCw2ICs2
NzcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgUHJlZml4RG90Tm9kZSA6IHB1YmxpYyBO
b2RlIHsKICAgcHVibGljOgogICAgIFByZWZpeERvdE5vZGUoTm9kZSAqYiwgY29uc3QgSWRlbnRp
ZmllciYgaSwgT3BlcmF0b3IgbykgS0pTX0ZBU1RfQ0FMTCA6IG1fYmFzZShiKSwgbV9pZGVudChp
KSwgbV9vcGVyKG8pIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1VuYXJ5OyB9CkBAIC02NDEsNiArNzAxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNz
IFVuYXJ5UGx1c05vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBVbmFyeVBsdXNO
b2RlKE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9CisgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CkBAIC02NTEsNiArNzEyLDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIE5lZ2F0ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1
YmxpYzoKICAgICBOZWdhdGVOb2RlKE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9
CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CkBA
IC02NjEsNiArNzIzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEJpdHdpc2VOb3ROb2Rl
IDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgQml0d2lzZU5vdE5vZGUoTm9kZSAqZSkg
S0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNv
bHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjVW5hcnk7IH0KQEAgLTY3MSw2ICs3MzQsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgY2xhc3MgTG9naWNhbE5vdE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAg
ICBMb2dpY2FsTm90Tm9kZShOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQorICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSog
ZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQpAQCAtNjgx
LDYgKzc0NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBNdWx0Tm9kZSA6IHB1YmxpYyBO
b2RlIHsKICAgcHVibGljOgogICAgICAgTXVsdE5vZGUoTm9kZSAqdDEsIE5vZGUgKnQyKSBLSlNf
RkFTVF9DQUxMIDogdGVybTEodDEpLCB0ZXJtMih0Mikge30KKyAgICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNpdGF2ZTsgfQpAQCAtNjky
LDYgKzc1Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBEaXZOb2RlIDogcHVibGljIE5v
ZGUgewogICBwdWJsaWM6CiAgICAgICBEaXZOb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZB
U1RfQ0FMTCA6IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CisgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KQEAgLTcwMyw2
ICs3NjksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgTW9kTm9kZSA6IHB1YmxpYyBOb2Rl
IHsKICAgcHVibGljOgogICAgICAgTW9kTm9kZShOb2RlICp0MSwgTm9kZSAqdDIpIEtKU19GQVNU
X0NBTEwgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQorICAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CkBAIC03MTQsNiAr
NzgxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEFkZE5vZGUgOiBwdWJsaWMgTm9kZSB7
CiAgIHB1YmxpYzoKICAgICBBZGROb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZBU1RfQ0FM
TCA6IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVz
b2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjQWRkaXRpdmU7IH0KQEAgLTcyNSw2ICs3OTMsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgY2xhc3MgU3ViTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAg
ICAgU3ViTm9kZShOb2RlICp0MSwgTm9kZSAqdDIpIEtKU19GQVNUX0NBTEwgOiB0ZXJtMSh0MSks
IHRlcm0yKHQyKSB7fQorICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0FkZGl0aXZlOyB9CkBAIC03MzcsNiArODA2LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgIHB1YmxpYzoKICAgICBMZWZ0U2hpZnROb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZB
U1RfQ0FMTAogICAgICAgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQpAQCAtNzQ5LDYgKzgxOSw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgUmlnaHRTaGlmdE5vZGUoTm9kZSAqdDEs
IE5vZGUgKnQyKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9
CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9CkBA
IC03NjEsNiArODMyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBVbnNpZ25l
ZFJpZ2h0U2hpZnROb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZBU1RfQ0FMTAogICAgICAg
OiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29s
dmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNTaGlmdDsgfQpAQCAtNzczLDYgKzg0NSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICBwdWJsaWM6CiAgICAgTGVzc05vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9D
QUxMIDoKICAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KQEAgLTc4NSw2ICs4NTgsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEdyZWF0ZXJOb2RlKE5vZGUgKmUxLCBO
b2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9
CkBAIC03OTcsNiArODcxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBMZXNz
RXFOb2RlKE5vZGUgKmUxLCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBleHByMShl
MSksIGV4cHIyKGUyKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNSZWxhdGlvbmFsOyB9CkBAIC04MDksNiArODg0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
IHB1YmxpYzoKICAgICBHcmVhdGVyRXFOb2RlKE5vZGUgKmUxLCBOb2RlICplMikgS0pTX0ZBU1Rf
Q0FMTCA6CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQorICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CkBAIC04MjEsNiArODk3LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBJbnN0YW5jZU9mTm9kZShOb2RlICpl
MSwgTm9kZSAqZTIpIEtKU19GQVNUX0NBTEwgOgogICAgICAgZXhwcjEoZTEpLCBleHByMihlMikg
e30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25h
bDsgfQpAQCAtODMzLDYgKzkxMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAg
SW5Ob2RlKE5vZGUgKmUxLCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBleHByMShl
MSksIGV4cHIyKGUyKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNSZWxhdGlvbmFsOyB9CkBAIC04NDUsNiArOTIzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
IHB1YmxpYzoKICAgICBFcXVhbE5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxM
CiAgICAgICA6IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CkBAIC04NTcsNiArOTM2LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBOb3RFcXVhbE5vZGUoTm9kZSAqZTEsIE5vZGUg
KmUyKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CkBAIC04
NjksNiArOTQ5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBTdHJpY3RFcXVh
bE5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGV4cHIxKGUx
KSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0VxdWFsaXR5OyB9CkBAIC04ODEsNiArOTYyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1
YmxpYzoKICAgICBOb3RTdHJpY3RFcXVhbE5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFT
VF9DQUxMCiAgICAgICA6IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CkBAIC04OTMsNiArOTc1LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBCaXRBbmROb2RlKE5vZGUgKmUxLCBO
b2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlQW5kOyB9
CkBAIC05MDUsNiArOTg4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBCaXRP
ck5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKICAgICAgIGV4cHIxKGUx
KSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0JpdHdpc2VPcjsgfQpAQCAtOTE3LDYgKzEwMDEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
cHVibGljOgogICAgIEJpdFhPck5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxM
IDoKICAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VYb3I7IH0KQEAgLTkzMiw2ICsxMDE3LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBMb2dpY2FsQW5kTm9kZShOb2RlICplMSwg
Tm9kZSAqZTIpIEtKU19GQVNUX0NBTEwgOgogICAgICAgZXhwcjEoZTEpLCBleHByMihlMikge30K
KyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNhbEFuZDsg
fQpAQCAtOTQ0LDYgKzEwMzAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIExv
Z2ljYWxPck5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKICAgICAgIGV4
cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5v
ZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0xvZ2ljYWxPcjsgfQpAQCAtOTU5LDYgKzEwNDYsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgcHVibGljOgogICAgIENvbmRpdGlvbmFsTm9kZShOb2RlICpsLCBOb2RlICplMSwgTm9k
ZSAqZTIpIEtKU19GQVNUX0NBTEwgOgogICAgICAgbG9naWNhbChsKSwgZXhwcjEoZTEpLCBleHBy
MihlMikge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ29u
ZGl0aW9uYWw7IH0KQEAgLTk3Miw2ICsxMDYwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1Ymxp
YzoKICAgICBBc3NpZ25SZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVyICZpZGVudCwgT3BlcmF0
b3Igb3BlciwgTm9kZSAqcmlnaHQpIEtKU19GQVNUX0NBTEwKICAgICAgIDogbV9pZGVudChpZGVu
dCksIG1fb3BlcihvcGVyKSwgbV9yaWdodChyaWdodCkge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQpAQCAtOTg1LDYgKzEwNzQsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEFzc2lnbkJyYWNrZXROb2RlKE5vZGUg
KmJhc2UsIE5vZGUgKnN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgTm9kZSAqcmlnaHQpIEtKU19G
QVNUX0NBTEwKICAgICAgIDogbV9iYXNlKGJhc2UpLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpLCBt
X29wZXIob3BlciksIG1fcmlnaHQocmlnaHQpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
UmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KQEAgLTk5OSw2ICsxMDg5LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBBc3NpZ25Eb3ROb2RlKE5vZGUgKmJhc2UsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCBOb2RlICpyaWdodCkgS0pTX0ZB
U1RfQ0FMTAogICAgICAgOiBtX2Jhc2UoYmFzZSksIG1faWRlbnQoaWRlbnQpLCBtX29wZXIob3Bl
ciksIG1fcmlnaHQocmlnaHQpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5v
ZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KQEAgLTEwMjUsNiArMTExNiw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICBjbGFzcyBDb21tYU5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBD
b21tYU5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDogZXhwcjEoZTEpLCBl
eHByMihlMikge30KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
RXhwcmVzc2lvbjsgfQpAQCAtMTAzNiw2ICsxMTI4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNs
YXNzIEFzc2lnbkV4cHJOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgQXNzaWdu
RXhwck5vZGUoTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KKyAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4
cHJlc3Npb247IH0KQEAgLTEwNDcsNiArMTE0MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJs
aWM6CiAgICAgZW51bSBUeXBlIHsgVmFyaWFibGUsIENvbnN0YW50IH07CiAgICAgVmFyRGVjbE5v
ZGUoY29uc3QgSWRlbnRpZmllciAmaWQsIEFzc2lnbkV4cHJOb2RlICppbiwgVHlwZSB0KSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pT
X0ZBU1RfQ0FMTDsKQEAgLTEwNjQsNiArMTE1OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZh
ckRlY2xMaXN0Tm9kZShWYXJEZWNsTm9kZSAqdikgS0pTX0ZBU1RfQ0FMTCA6IG5leHQodGhpcyks
IHZhcih2KSB7IFBhcnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlzKTsgbV9tYXlIYXZlRGVjbGFyYXRp
b25zID0gdHJ1ZTsgfQogICAgIFZhckRlY2xMaXN0Tm9kZShWYXJEZWNsTGlzdE5vZGUgKmwsIFZh
ckRlY2xOb2RlICp2KSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IG5leHQobC0+bmV4dCksIHZhcih2
KSB7IGwtPm5leHQgPSB0aGlzOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CisgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIFBhc3NSZWZQdHI8
VmFyRGVjbExpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4
dC5yZWxlYXNlKCk7IH0KQEAgLTEwODAsNiArMTE3NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBj
bGFzcyBWYXJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6
CiAgICAgVmFyU3RhdGVtZW50Tm9kZShWYXJEZWNsTGlzdE5vZGUgKmwpIEtKU19GQVNUX0NBTEwg
OiBuZXh0KGwtPm5leHQucmVsZWFzZSgpKSB7IFBhcnNlcjo6cmVtb3ZlTm9kZUN5Y2xlKG5leHQu
Z2V0KCkpOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhl
Y3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBn
ZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTA5
MCw2ICsxMTg2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEJsb2NrTm9kZSA6IHB1Ymxp
YyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIEJsb2NrTm9kZShTb3VyY2VFbGVtZW50
c05vZGUgKnMpIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2
ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMo
RGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTEwNyw2ICsxMjA0LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEV4cHJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRl
bWVudE5vZGUgewogICBwdWJsaWM6CiAgICAgRXhwclN0YXRlbWVudE5vZGUoTm9kZSAqZSkgS0pT
X0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2
ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgpAQCAtMTExNyw2ICsxMjE1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBJZk5vZGUoTm9kZSAqZSwgU3RhdGVtZW50
Tm9kZSAqczEsIFN0YXRlbWVudE5vZGUgKnMyKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGV4cHIo
ZSksIHN0YXRlbWVudDEoczEpLCBzdGF0ZW1lbnQyKHMyKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9u
cyA9IHN0YXRlbWVudDEtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSB8fCAoc3RhdGVtZW50MiAmJiBz
dGF0ZW1lbnQyLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpOyB9CisgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBnZXRE
ZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTEyOSw2
ICsxMjI4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERvV2hpbGVOb2RlIDogcHVibGlj
IFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6CiAgICAgRG9XaGlsZU5vZGUoU3RhdGVtZW50Tm9k
ZSAqcywgTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IHN0YXRlbWVudChzKSwgZXhwcihlKSB7IG1f
bWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVS
ZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0
aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7CkBAIC0xMTQwLDYgKzEyNDAs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgV2hpbGVOb2RlIDogcHVibGljIFN0YXRlbWVu
dE5vZGUgewogICBwdWJsaWM6CiAgICAgV2hpbGVOb2RlKE5vZGUgKmUsIFN0YXRlbWVudE5vZGUg
KnMpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBzdGF0ZW1lbnQocykgeyBtX21heUhhdmVEZWNs
YXJhdGlvbnMgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFy
YXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTE1NCw2ICsxMjU1LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSwgZXhwcjMoZTMpLCBzdGF0ZW1l
bnQocykgeyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAgICAgRm9yTm9kZShWYXJE
ZWNsTGlzdE5vZGUgKmUxLCBOb2RlICplMiwgTm9kZSAqZTMsIFN0YXRlbWVudE5vZGUgKnMpIEtK
U19GQVNUX0NBTEwgOgogICAgICAgZXhwcjEoZTEtPm5leHQucmVsZWFzZSgpKSwgZXhwcjIoZTIp
LCBleHByMyhlMyksIHN0YXRlbWVudChzKSB7IFBhcnNlcjo6cmVtb3ZlTm9kZUN5Y2xlKGV4cHIx
LmdldCgpKTsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4
ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTEx
NjgsNiArMTI3MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRm9ySW5Ob2Rl
KE5vZGUgKmwsIE5vZGUgKmUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7CiAgICAg
Rm9ySW5Ob2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEFzc2lnbkV4cHJOb2RlICppbiwgTm9kZSAq
ZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIGdldERl
Y2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7CkBAIC0xMjAzLDYg
KzEzMDYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgUmV0dXJuTm9kZSA6IHB1YmxpYyBT
dGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIFJldHVybk5vZGUoTm9kZSAqdikgS0pTX0ZB
U1RfQ0FMTCA6IHZhbHVlKHYpIHt9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5v
ZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgpAQCAtMTIxMiw2ICsxMzE2LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIGNsYXNzIFdpdGhOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewog
ICBwdWJsaWM6CiAgICAgV2l0aE5vZGUoTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZB
U1RfQ0FMTCA6IGV4cHIoZSksIHN0YXRlbWVudChzKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNr
cyYpIEtKU19GQVNUX0NBTEw7CkBAIC0xMjIzLDYgKzEzMjgsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgY2xhc3MgTGFiZWxOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6CiAg
ICAgTGFiZWxOb2RlKGNvbnN0IElkZW50aWZpZXIgJmwsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19G
QVNUX0NBTEwgOiBsYWJlbChsKSwgc3RhdGVtZW50KHMpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25z
ID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3Rh
Y2tzJikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTEyMzQsNiArMTM0MCw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICBjbGFzcyBUaHJvd05vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
ICAgICBUaHJvd05vZGUoTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KKyAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29t
cGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZh
dGU6CkBAIC0xMjQ0LDYgKzEzNTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAg
IFRyeU5vZGUoU3RhdGVtZW50Tm9kZSAqYiwgY29uc3QgSWRlbnRpZmllciAmZSwgU3RhdGVtZW50
Tm9kZSAqYywgU3RhdGVtZW50Tm9kZSAqZikgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiB0cnlCbG9j
ayhiKSwgZXhjZXB0aW9uSWRlbnQoZSksIGNhdGNoQmxvY2soYyksIGZpbmFsbHlCbG9jayhmKSB7
IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVSZXNvbHZlTm9kZXMoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIGdldERlY2xh
cmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7CkBAIC0xMzAwLDkgKzE0
MDgsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBpbml0aWFsaXplRGVjbGFyYXRpb25T
dGFja3MoRXhlY1N0YXRlKik7CiAgICAgYm9vbCBtX2luaXRpYWxpemVkRGVjbGFyYXRpb25TdGFj
a3M7CiAKLSAgICB2b2lkIGluaXRpYWxpemVzeW1ib2xUYWJsZSgpOworICAgIHZvaWQgaW5pdGlh
bGl6ZVN5bWJvbFRhYmxlKCk7CiAgICAgYm9vbCBtX2luaXRpYWxpemVkU3ltYm9sVGFibGU7CiAg
ICAgCisgICAgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcygpOworICAgIGJvb2wgbV9vcHRpbWl6
ZWRSZXNvbHZlTm9kZXM7CisgICAgCiAgICAgLy8gUHJvcGVydGllcyB0aGF0IHdpbGwgZ28gaW50
byB0aGUgQWN0aXZhdGlvbkltcCdzIGxvY2FsIHN0b3JhZ2UuIChVc2VkIGZvciBpbml0aWFsaXpp
bmcgdGhlIEFjdGl2YXRpb25JbXAuKQogICAgIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayBt
X3ZhclN0YWNrOwogICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIG1fZnVuY3Rp
b25TdGFjazsKQEAgLTEzNTMsNiArMTQ2NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFNvdXJj
ZUVsZW1lbnRzTm9kZShTdGF0ZW1lbnROb2RlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICBTb3VyY2VF
bGVtZW50c05vZGUoU291cmNlRWxlbWVudHNOb2RlICpzMSwgU3RhdGVtZW50Tm9kZSAqczIpIEtK
U19GQVNUX0NBTEw7CiAgICAgCisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICBQYXNzUmVmUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gcmVsZWFzZU5leHQo
KSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CkBAIC0xMzcwLDYgKzE0
ODIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIENhc2VDbGF1c2VOb2RlKE5vZGUgKmUpIEtK
U19GQVNUX0NBTEwgOiBleHByKGUpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQog
ICAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAqZSwgU291cmNlRWxlbWVudHNOb2RlICpzKSBLSlNf
RkFTVF9DQUxMCiAgICAgICA6IGV4cHIoZSksIHNvdXJjZShzLT5uZXh0LnJlbGVhc2UoKSkgeyBQ
YXJzZXI6OnJlbW92ZU5vZGVDeWNsZShzb3VyY2UuZ2V0KCkpOyBtX21heUhhdmVEZWNsYXJhdGlv
bnMgPSB0cnVlOyB9CisgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwogICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgIENvbXBsZXRpb24gZXZhbFN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwpAQCAtMTM4Niw2ICsxNDk5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICBD
bGF1c2VMaXN0Tm9kZShDYXNlQ2xhdXNlTm9kZSAqYykgS0pTX0ZBU1RfQ0FMTCA6IGNsYXVzZShj
KSwgbmV4dCh0aGlzKSB7IFBhcnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlzKTsgbV9tYXlIYXZlRGVj
bGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2xhdXNlTGlzdE5vZGUg
Km4sIENhc2VDbGF1c2VOb2RlICpjKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGNsYXVzZShjKSwg
bmV4dChuLT5uZXh0KSB7IG4tPm5leHQgPSB0aGlzOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0
cnVlOyB9CisgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVSZXNvbHZlTm9kZXMoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
IENhc2VDbGF1c2VOb2RlICpnZXRDbGF1c2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IGNsYXVzZS5nZXQoKTsgfQogICAgICAgQ2xhdXNlTGlzdE5vZGUgKmdldE5leHQoKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQuZ2V0KCk7IH0KQEAgLTE0MDMsNiArMTUxNyw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBDYXNlQmxvY2tOb2RlIDogcHVibGljIE5vZGUgewog
ICBwdWJsaWM6CiAgICAgICBDYXNlQmxvY2tOb2RlKENsYXVzZUxpc3ROb2RlICpsMSwgQ2FzZUNs
YXVzZU5vZGUgKmQsIENsYXVzZUxpc3ROb2RlICpsMikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVJlc29sdmVOb2RlcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgQ29tcGxldGlvbiBldmFs
QmxvY2soRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICppbnB1dCkgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwpAQCAtMTQxNyw2ICsxNTMyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIFN3aXRj
aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKICAgICAgIFN3aXRjaE5v
ZGUoTm9kZSAqZSwgQ2FzZUJsb2NrTm9kZSAqYikgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIGJs
b2NrKGIpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQorICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplUmVzb2x2ZU5vZGVzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgQ29tcGxldGlv
biBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1
YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxM
Owo=
</data>
<flag name="review"
          id="7182"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>