<?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>123162</bug_id>
          
          <creation_ts>2013-10-22 07:16:03 -0700</creation_ts>
          <short_desc>CTTE: Modernize RenderBlock a bit</short_desc>
          <delta_ts>2013-10-22 16:57:25 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>d-r</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>942290</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-22 07:16:03 -0700</bug_when>
    <thetext>CTTE: Modernize RenderBlock a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942291</commentid>
    <comment_count>1</comment_count>
      <attachid>214856</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-22 07:17:18 -0700</bug_when>
    <thetext>Created attachment 214856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942292</commentid>
    <comment_count>2</comment_count>
      <attachid>214856</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-22 07:25:49 -0700</bug_when>
    <thetext>Comment on attachment 214856
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=214856&amp;action=review

&gt; Source/WebCore/rendering/InlineIterator.h:199
&gt; +static inline RenderObject* bidiNextShared(RenderElement&amp; root, RenderObject* current, Observer* observer = 0, EmptyInlineBehavior emptyInlineBehavior = SkipEmptyInlines, bool* endOfInlinePtr = 0)

0 -&gt; nullptr
This comment repeated for each case of missing modernization!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942488</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-22 16:57:25 -0700</bug_when>
    <thetext>Committed r157828: &lt;http://trac.webkit.org/changeset/157828&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214856</attachid>
            <date>2013-10-22 07:17:18 -0700</date>
            <delta_ts>2013-10-22 07:25:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123162-20131022071717.patch</filename>
            <type>text/plain</type>
            <size>289079</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTIyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogTW9kZXJuaXplIFJlbmRlckJs
b2NrIGEgYml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjMxNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdGFydCB0aHJlYWRpbmcgcmVmZXJlbmNlcyB0aHJvdWdoIFJlbmRlckJsb2NrLiBXaGlsZSB3
ZSAKKyAgICAgICAgYXJlIGhlcmUsIGRvIHNvbWUgc2VsZWN0aXZlIG1vZGVybml6YXRpb24gYXMg
d2VsbC4KKwogMjAxMy0xMC0yMiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IHNvbWUgbW9yZSBjb2RlIHRvIHVzZSBSZW5kZXJFbGVtZW50IGluc3RlYWQg
b2YgUmVuZGVyT2JqZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0
ZXJhdG9yLmgJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgc3RhdGlj
IGJvb2wgaXNFbXB0eUlubGluZShjb25zdCBSZW5kZXJJbgogLy8gVGhpcyBmdW5jdGlvbiB3aWxs
IGl0ZXJhdGUgb3ZlciBpbmxpbmVzIHdpdGhpbiBhIGJsb2NrLCBvcHRpb25hbGx5IG5vdGlmeWlu
ZwogLy8gYSBiaWRpIHJlc29sdmVyIGFzIGl0IGVudGVycy9leGl0cyBpbmxpbmVzIChzbyBpdCBj
YW4gcHVzaC9wb3AgZW1iZWRkaW5nIGxldmVscykuCiB0ZW1wbGF0ZSA8Y2xhc3MgT2JzZXJ2ZXI+
Ci1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaU5leHRTaGFyZWQoUmVuZGVyRWxlbWVu
dCogcm9vdCwgUmVuZGVyT2JqZWN0KiBjdXJyZW50LCBPYnNlcnZlciogb2JzZXJ2ZXIgPSAwLCBF
bXB0eUlubGluZUJlaGF2aW9yIGVtcHR5SW5saW5lQmVoYXZpb3IgPSBTa2lwRW1wdHlJbmxpbmVz
LCBib29sKiBlbmRPZklubGluZVB0ciA9IDApCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCog
YmlkaU5leHRTaGFyZWQoUmVuZGVyRWxlbWVudCYgcm9vdCwgUmVuZGVyT2JqZWN0KiBjdXJyZW50
LCBPYnNlcnZlciogb2JzZXJ2ZXIgPSAwLCBFbXB0eUlubGluZUJlaGF2aW9yIGVtcHR5SW5saW5l
QmVoYXZpb3IgPSBTa2lwRW1wdHlJbmxpbmVzLCBib29sKiBlbmRPZklubGluZVB0ciA9IDApCiB7
CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gMDsKICAgICAvLyBvbGRFbmRPZklubGluZSBkZW5v
dGVzIGlmIHdoZW4gd2UgbGFzdCBzdG9wcGVkIGl0ZXJhdGluZyBpZiB3ZSB3ZXJlIGF0IHRoZSBl
bmQgb2YgYW4gaW5saW5lLgpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVy
T2JqZWN0KiBiaWRpTmV4dFNoYXIKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSByb290KSB7Cisg
ICAgICAgICAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9ICZyb290KSB7CiAgICAgICAg
ICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdChvYnNlcnZlciwgY3VycmVudCk7
CiAKICAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKQEAgLTIy
OSw3ICsyMjksNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaU5leHRTaGFyCiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBh
cmVudCgpOwotICAgICAgICAgICAgICAgIGlmIChlbXB0eUlubGluZUJlaGF2aW9yID09IEluY2x1
ZGVFbXB0eUlubGluZXMgJiYgY3VycmVudCAmJiBjdXJyZW50ICE9IHJvb3QgJiYgY3VycmVudC0+
aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChlbXB0eUlubGluZUJlaGF2
aW9yID09IEluY2x1ZGVFbXB0eUlubGluZXMgJiYgY3VycmVudCAmJiBjdXJyZW50ICE9ICZyb290
ICYmIGN1cnJlbnQtPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbmV4
dCA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgIGVuZE9mSW5saW5lID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNTMsMzAgKzI1MywzMCBAQCBzdGF0aWMgaW5s
aW5lIFJlbmRlck9iamVjdCogYmlkaU5leHRTaGFyCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBPYnNl
cnZlcj4KLXN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpTmV4dFNraXBwaW5nRW1wdHlJ
bmxpbmVzKFJlbmRlckVsZW1lbnQqIHJvb3QsIFJlbmRlck9iamVjdCogY3VycmVudCwgT2JzZXJ2
ZXIqIG9ic2VydmVyKQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0U2tpcHBp
bmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVudCYgcm9vdCwgUmVuZGVyT2JqZWN0KiBjdXJyZW50
LCBPYnNlcnZlciogb2JzZXJ2ZXIpCiB7CiAgICAgLy8gVGhlIFNraXBFbXB0eUlubGluZXMgY2Fs
bGVycyBuZXZlciBjYXJlIGFib3V0IGVuZE9mSW5saW5lUHRyLgogICAgIHJldHVybiBiaWRpTmV4
dFNoYXJlZChyb290LCBjdXJyZW50LCBvYnNlcnZlciwgU2tpcEVtcHR5SW5saW5lcyk7CiB9CiAK
IC8vIFRoaXMgbWFrZXMgY2FsbGVycyBjbGVhbmVyIGFzIHRoZXkgZG9uJ3QgaGF2ZSB0byBzcGVj
aWZ5IGEgdHlwZSBmb3IgdGhlIG9ic2VydmVyIHdoZW4gbm90IHByb3ZpZGluZyBvbmUuCi1zdGF0
aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcyhSZW5k
ZXJFbGVtZW50KiByb290LCBSZW5kZXJPYmplY3QqIGN1cnJlbnQpCitzdGF0aWMgaW5saW5lIFJl
bmRlck9iamVjdCogYmlkaU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50JiBy
b290LCBSZW5kZXJPYmplY3QqIGN1cnJlbnQpCiB7CiAgICAgSW5saW5lQmlkaVJlc29sdmVyKiBv
YnNlcnZlciA9IDA7CiAgICAgcmV0dXJuIGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMocm9v
dCwgY3VycmVudCwgb2JzZXJ2ZXIpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCog
YmlkaU5leHRJbmNsdWRpbmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVudCogcm9vdCwgUmVuZGVy
T2JqZWN0KiBjdXJyZW50LCBib29sKiBlbmRPZklubGluZVB0ciA9IDApCitzdGF0aWMgaW5saW5l
IFJlbmRlck9iamVjdCogYmlkaU5leHRJbmNsdWRpbmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVu
dCYgcm9vdCwgUmVuZGVyT2JqZWN0KiBjdXJyZW50LCBib29sKiBlbmRPZklubGluZVB0ciA9IDAp
CiB7CiAgICAgSW5saW5lQmlkaVJlc29sdmVyKiBvYnNlcnZlciA9IDA7IC8vIENhbGxlcnMgd2hv
IGluY2x1ZGUgZW1wdHkgaW5saW5lcywgbmV2ZXIgdXNlIGFuIG9ic2VydmVyLgogICAgIHJldHVy
biBiaWRpTmV4dFNoYXJlZChyb290LCBjdXJyZW50LCBvYnNlcnZlciwgSW5jbHVkZUVtcHR5SW5s
aW5lcywgZW5kT2ZJbmxpbmVQdHIpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCog
YmlkaUZpcnN0U2tpcHBpbmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVudCogcm9vdCwgSW5saW5l
QmlkaVJlc29sdmVyKiByZXNvbHZlciA9IDApCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCog
YmlkaUZpcnN0U2tpcHBpbmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVudCYgcm9vdCwgSW5saW5l
QmlkaVJlc29sdmVyKiByZXNvbHZlciA9IDApCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBvID0gcm9v
dC0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogbyA9IHJvb3QuZmlyc3RDaGlsZCgp
OwogICAgIGlmICghbykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgaWYgKG8tPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgbm90aWZ5T2JzZXJ2
ZXJFbnRlcmVkT2JqZWN0KHJlc29sdmVyLCBvKTsKQEAgLTMwMCw5ICszMDAsOSBAQCBzdGF0aWMg
aW5saW5lIFJlbmRlck9iamVjdCogYmlkaUZpcnN0U2tpCiB9CiAKIC8vIEZJWE1FOiBUaGlzIG1l
dGhvZCBuZWVkcyB0byBiZSByZW5hbWVkIHdoZW4gYmlkaU5leHQgZmluZHMgYSBnb29kIG5hbWUu
Ci1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaUZpcnN0SW5jbHVkaW5nRW1wdHlJbmxp
bmVzKFJlbmRlckVsZW1lbnQqIHJvb3QpCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlk
aUZpcnN0SW5jbHVkaW5nRW1wdHlJbmxpbmVzKFJlbmRlckVsZW1lbnQmIHJvb3QpCiB7Ci0gICAg
UmVuZGVyT2JqZWN0KiBvID0gcm9vdC0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCog
byA9IHJvb3QuZmlyc3RDaGlsZCgpOwogICAgIC8vIElmIGVpdGhlciB0aGVyZSBhcmUgbm8gY2hp
bGRyZW4gdG8gd2Fsaywgb3IgdGhlIGZpcnN0IG9uZSBpcyBjb3JyZWN0CiAgICAgLy8gdGhlbiBq
dXN0IHJldHVybiBpdC4KICAgICBpZiAoIW8gfHwgby0+aXNSZW5kZXJJbmxpbmUoKSB8fCBpc0l0
ZXJhdG9yVGFyZ2V0KG8pKQpAQCAtMzIzLDcgKzMyMyw3IEBAIGlubGluZSB2b2lkIElubGluZUl0
ZXJhdG9yOjpmYXN0SW5jcmVtZW4KIC8vIGl0IHNob3VsZG4ndCB1c2UgZnVuY3Rpb25zIGNhbGxl
ZCBiaWRpRmlyc3QgYW5kIGJpZGlOZXh0LgogY2xhc3MgSW5saW5lV2Fsa2VyIHsKIHB1YmxpYzoK
LSAgICBJbmxpbmVXYWxrZXIoUmVuZGVyRWxlbWVudCogcm9vdCkKKyAgICBJbmxpbmVXYWxrZXIo
UmVuZGVyRWxlbWVudCYgcm9vdCkKICAgICAgICAgOiBtX3Jvb3Qocm9vdCkKICAgICAgICAgLCBt
X2N1cnJlbnQoMCkKICAgICAgICAgLCBtX2F0RW5kT2ZJbmxpbmUoZmFsc2UpCkBAIC0zMzIsNyAr
MzMyLDcgQEAgcHVibGljOgogICAgICAgICBtX2N1cnJlbnQgPSBiaWRpRmlyc3RJbmNsdWRpbmdF
bXB0eUlubGluZXMobV9yb290KTsKICAgICB9CiAKLSAgICBSZW5kZXJFbGVtZW50KiByb290KCkg
eyByZXR1cm4gbV9yb290OyB9CisgICAgUmVuZGVyRWxlbWVudCYgcm9vdCgpIHsgcmV0dXJuIG1f
cm9vdDsgfQogICAgIFJlbmRlck9iamVjdCogY3VycmVudCgpIHsgcmV0dXJuIG1fY3VycmVudDsg
fQogCiAgICAgYm9vbCBhdEVuZE9mSW5saW5lKCkgeyByZXR1cm4gbV9hdEVuZE9mSW5saW5lOyB9
CkBAIC0zNDUsNyArMzQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jdXJyZW50Owog
ICAgIH0KIHByaXZhdGU6Ci0gICAgUmVuZGVyRWxlbWVudCogbV9yb290OworICAgIFJlbmRlckVs
ZW1lbnQmIG1fcm9vdDsKICAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudDsKICAgICBib29sIG1f
YXRFbmRPZklubGluZTsKIH07CkBAIC0zNjAsNyArMzYwLDcgQEAgaW5saW5lIHZvaWQgSW5saW5l
SXRlcmF0b3I6OmluY3JlbWVudChJbgogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAv
LyBiaWRpTmV4dCBjYW4gcmV0dXJuIDAsIHNvIHVzZSBtb3ZlVG8gaW5zdGVhZCBvZiBtb3ZlVG9T
dGFydE9mCi0gICAgbW92ZVRvKGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMobV9yb290LCBt
X29iaiwgcmVzb2x2ZXIpLCAwKTsKKyAgICBtb3ZlVG8oYmlkaU5leHRTa2lwcGluZ0VtcHR5SW5s
aW5lcygqbV9yb290LCBtX29iaiwgcmVzb2x2ZXIpLCAwKTsKIH0KIAogaW5saW5lIGJvb2wgSW5s
aW5lSXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKQEAgLTUyNCw3ICs1MjQsNyBAQCBpbmxpbmUgdm9p
ZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1CiAgICAgICAgICAgICAgICAgUmVuZGVyQmxv
Y2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KG1fcnVucywgc3RhcnQsIG9iai0+bGVuZ3RoKCks
IG9iaiwgKnRoaXMpOwogICAgICAgICAgICAgLy8gRklYTUU6IHN0YXJ0L29iaiBzaG91bGQgYmUg
YW4gSW5saW5lSXRlcmF0b3IgaW5zdGVhZCBvZiB0d28gc2VwYXJhdGUgdmFyaWFibGVzLgogICAg
ICAgICAgICAgc3RhcnQgPSAwOwotICAgICAgICAgICAgb2JqID0gYmlkaU5leHRTa2lwcGluZ0Vt
cHR5SW5saW5lcyhtX3Nvci5yb290KCksIG9iaiwgJmlzb2xhdGVUcmFja2VyKTsKKyAgICAgICAg
ICAgIG9iaiA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fc29yLnJvb3QoKSwgb2Jq
LCAmaXNvbGF0ZVRyYWNrZXIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChvYmopIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHBvcyA9IG9iaiA9PSBtX2Vvci5tX29iaiA/IG1fZW9yLm1fcG9zIDog
VUlOVF9NQVg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlv
bk9mZnNldENhY2hlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
b2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDE5ICsyNSwxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc0NvbnRhaW5pbmdCbG9ja0NhbmRpZGF0ZUZvckFic29sdXRlbHlQ
b3NpdGlvbmVkT2JqZWN0KFJlbmRlckVsZW1lbnQqIG9iamVjdCkKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc0NvbnRhaW5pbmdCbG9ja0NhbmRpZGF0ZUZvckFic29sdXRlbHlQb3NpdGlvbmVkT2JqZWN0
KFJlbmRlckVsZW1lbnQmIG9iamVjdCkKIHsKLSAgICByZXR1cm4gb2JqZWN0LT5zdHlsZSgpLT5w
b3NpdGlvbigpICE9IFN0YXRpY1Bvc2l0aW9uCi0gICAgICAgIHx8IChvYmplY3QtPmhhc1RyYW5z
Zm9ybSgpICYmIG9iamVjdC0+aXNSZW5kZXJCbG9jaygpKQorICAgIHJldHVybiBvYmplY3Quc3R5
bGUoKS0+cG9zaXRpb24oKSAhPSBTdGF0aWNQb3NpdGlvbgorICAgICAgICB8fCAob2JqZWN0Lmhh
c1RyYW5zZm9ybSgpICYmIG9iamVjdC5pc1JlbmRlckJsb2NrKCkpCiAjaWYgRU5BQkxFKFNWRykK
LSAgICAgICAgfHwgb2JqZWN0LT5pc1NWR0ZvcmVpZ25PYmplY3QoKQorICAgICAgICB8fCBvYmpl
Y3QuaXNTVkdGb3JlaWduT2JqZWN0KCkKICNlbmRpZgotICAgICAgICB8fCBvYmplY3QtPmlzUmVu
ZGVyVmlldygpOworICAgICAgICB8fCBvYmplY3QuaXNSZW5kZXJWaWV3KCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc05vblJlbmRlckJsb2NrSW5saW5lKFJlbmRlckVsZW1lbnQqIG9iamVj
dCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc05vblJlbmRlckJsb2NrSW5saW5lKFJlbmRlckVsZW1l
bnQmIG9iamVjdCkKIHsKLSAgICByZXR1cm4gKG9iamVjdC0+aXNJbmxpbmUoKSAmJiAhb2JqZWN0
LT5pc1JlcGxhY2VkKCkpIHx8ICFvYmplY3QtPmlzUmVuZGVyQmxvY2soKTsKKyAgICByZXR1cm4g
KG9iamVjdC5pc0lubGluZSgpICYmICFvYmplY3QuaXNSZXBsYWNlZCgpKSB8fCAhb2JqZWN0Lmlz
UmVuZGVyQmxvY2soKTsKIH0KIAogc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiBjb250YWlu
aW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKFJlbmRlckVsZW1lbnQqIHBhcmVudCkKQEAgLTUyLDcg
KzUyLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiBjb250YWluaW5nQgogc3RhdGlj
IGlubGluZSBSZW5kZXJFbGVtZW50KiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9u
KFJlbmRlckVsZW1lbnQqIHBhcmVudCkKIHsKICAgICBSZW5kZXJFbGVtZW50KiBvYmplY3QgPSBw
YXJlbnQ7Ci0gICAgd2hpbGUgKG9iamVjdCAmJiAhaXNDb250YWluaW5nQmxvY2tDYW5kaWRhdGVG
b3JBYnNvbHV0ZWx5UG9zaXRpb25lZE9iamVjdChvYmplY3QpKQorICAgIHdoaWxlIChvYmplY3Qg
JiYgIWlzQ29udGFpbmluZ0Jsb2NrQ2FuZGlkYXRlRm9yQWJzb2x1dGVseVBvc2l0aW9uZWRPYmpl
Y3QoKm9iamVjdCkpCiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+cGFyZW50KCk7CiAKICAgICAv
LyBGb3IgYSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgaW5saW5lLCByZXR1cm4gaXRzIG5lYXJlc3Qg
bm9uLWFub255bW91cyBjb250YWluaW5nIGJsb2NrLApAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMg
aW5saW5lIFJlbmRlckVsZW1lbnQqIGNvbnRhaW5pbmdCCiBzdGF0aWMgaW5saW5lIFJlbmRlckVs
ZW1lbnQqIGNvbnRhaW5pbmdCbG9ja0Zvck9iamVjdEluRmxvdyhSZW5kZXJFbGVtZW50KiBwYXJl
bnQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogb2JqZWN0ID0gcGFyZW50OwotICAgIHdoaWxlIChv
YmplY3QgJiYgaXNOb25SZW5kZXJCbG9ja0lubGluZShvYmplY3QpKQorICAgIHdoaWxlIChvYmpl
Y3QgJiYgaXNOb25SZW5kZXJCbG9ja0lubGluZSgqb2JqZWN0KSkKICAgICAgICAgb2JqZWN0ID0g
b2JqZWN0LT5wYXJlbnQoKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQpAQCAtMTAwLDcgKzEwMCw3
IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jazsgfQogICAgICAgICBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzKiBj
YWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGU7IH0KIAotICAgICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIExheW91dFVu
aXQgcG9zaXRpb24pIGNvbnN0CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxlY3Rp
b25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbikgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fY2FjaGUpOwogICAgICAgICAgICAg
aWYgKG1faGFzRmxvYXRzT3JGbG93VGhyZWFkcyB8fCAhbV9jYWNoZWRMb2dpY2FsTGVmdFNlbGVj
dGlvbk9mZnNldCkgewpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBtX2xvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0OwogICAgICAgICB9CiAKLSAgICAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RC
bG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbikgY29uc3QKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5p
dCBwb3NpdGlvbikgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fY2FjaGUp
OwogICAgICAgICAgICAgaWYgKG1faGFzRmxvYXRzT3JGbG93VGhyZWFkcyB8fCAhbV9jYWNoZWRM
b2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQpIHsKQEAgLTEzMywxMCArMTMzLDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgfTsKIAotICAgIGV4cGxpY2l0IExvZ2ljYWxTZWxlY3Rpb25PZmZz
ZXRDYWNoZXMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaykKKyAgICBleHBsaWNpdCBMb2dpY2FsU2Vs
ZWN0aW9uT2Zmc2V0Q2FjaGVzKFJlbmRlckJsb2NrJiByb290QmxvY2spCiAgICAgewotICAgICAg
ICBBU1NFUlQocm9vdEJsb2NrLT5pc1NlbGVjdGlvblJvb3QoKSk7Ci0gICAgICAgIGF1dG8gcGFy
ZW50ID0gcm9vdEJsb2NrLT5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKHJvb3RCbG9jay5pc1Nl
bGVjdGlvblJvb3QoKSk7CisgICAgICAgIGF1dG8gcGFyZW50ID0gcm9vdEJsb2NrLnBhcmVudCgp
OwogCiAgICAgICAgIC8vIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMgc2hvdWxkIG5vdCBi
ZSB1c2VkIG9uIGFuIG9ycGhhbmVkIHRyZWUuCiAgICAgICAgIG1fY29udGFpbmluZ0Jsb2NrRm9y
Rml4ZWRQb3NpdGlvbi5zZXRCbG9jayh0b1JlbmRlckJsb2NrKGNvbnRhaW5pbmdCbG9ja0ZvckZp
eGVkUG9zaXRpb24ocGFyZW50KSksIDApOwpAQCAtMTQ0LDMxICsxNDQsMzEgQEAgcHVibGljOgog
ICAgICAgICBtX2NvbnRhaW5pbmdCbG9ja0ZvckluZmxvd1Bvc2l0aW9uLnNldEJsb2NrKHRvUmVu
ZGVyQmxvY2soY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KHBhcmVudCkpLCAwKTsKICAg
ICB9CiAKLSAgICBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzKFJlbmRlckJsb2NrKiBibG9j
aywgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUpCisgICAgTG9naWNh
bFNlbGVjdGlvbk9mZnNldENhY2hlcyhSZW5kZXJCbG9jayYgYmxvY2ssIGNvbnN0IExvZ2ljYWxT
ZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNhY2hlKQogICAgICAgICA6IG1fY29udGFpbmluZ0Jsb2Nr
Rm9yRml4ZWRQb3NpdGlvbihjYWNoZS5tX2NvbnRhaW5pbmdCbG9ja0ZvckZpeGVkUG9zaXRpb24p
CiAgICAgICAgICwgbV9jb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKGNhY2hlLm1f
Y29udGFpbmluZ0Jsb2NrRm9yQWJzb2x1dGVQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChi
bG9jay0+Y2FuQ29udGFpbkZpeGVkUG9zaXRpb25PYmplY3RzKCkpCi0gICAgICAgICAgICBtX2Nv
bnRhaW5pbmdCbG9ja0ZvckZpeGVkUG9zaXRpb24uc2V0QmxvY2soYmxvY2ssICZjYWNoZSk7Cisg
ICAgICAgIGlmIChibG9jay5jYW5Db250YWluRml4ZWRQb3NpdGlvbk9iamVjdHMoKSkKKyAgICAg
ICAgICAgIG1fY29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbi5zZXRCbG9jaygmYmxvY2ss
ICZjYWNoZSk7CiAKLSAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2FuZGlkYXRlRm9yQWJz
b2x1dGVseVBvc2l0aW9uZWRPYmplY3QoYmxvY2spICYmICFibG9jay0+aXNSZW5kZXJJbmxpbmUo
KSAmJiAhYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgICAgIG1fY29udGFpbmlu
Z0Jsb2NrRm9yRml4ZWRQb3NpdGlvbi5zZXRCbG9jayhibG9jaywgJmNhY2hlKTsKKyAgICAgICAg
aWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2FuZGlkYXRlRm9yQWJzb2x1dGVseVBvc2l0aW9uZWRPYmpl
Y3QoYmxvY2spICYmICFibG9jay5pc1JlbmRlcklubGluZSgpICYmICFibG9jay5pc0Fub255bW91
c0Jsb2NrKCkpCisgICAgICAgICAgICBtX2NvbnRhaW5pbmdCbG9ja0ZvckZpeGVkUG9zaXRpb24u
c2V0QmxvY2soJmJsb2NrLCAmY2FjaGUpOwogCi0gICAgICAgIG1fY29udGFpbmluZ0Jsb2NrRm9y
SW5mbG93UG9zaXRpb24uc2V0QmxvY2soYmxvY2ssICZjYWNoZSk7CisgICAgICAgIG1fY29udGFp
bmluZ0Jsb2NrRm9ySW5mbG93UG9zaXRpb24uc2V0QmxvY2soJmJsb2NrLCAmY2FjaGUpOwogICAg
IH0KIAotICAgIGNvbnN0IENvbnRhaW5pbmdCbG9ja0luZm8mIGNvbnRhaW5pbmdCbG9ja0luZm8o
UmVuZGVyQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIGNvbnN0IENvbnRhaW5pbmdCbG9ja0luZm8m
IGNvbnRhaW5pbmdCbG9ja0luZm8oUmVuZGVyQmxvY2smIGJsb2NrKSBjb25zdAogICAgIHsKLSAg
ICAgICAgRVBvc2l0aW9uIHBvc2l0aW9uID0gYmxvY2stPnN0eWxlKCktPnBvc2l0aW9uKCk7Cisg
ICAgICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9IGJsb2NrLnN0eWxlKCktPnBvc2l0aW9uKCk7CiAg
ICAgICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpID09IG1fY29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQ
b3NpdGlvbi5ibG9jaygpKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay5jb250YWluaW5nQmxv
Y2soKSA9PSBtX2NvbnRhaW5pbmdCbG9ja0ZvckZpeGVkUG9zaXRpb24uYmxvY2soKSk7CiAgICAg
ICAgICAgICByZXR1cm4gbV9jb250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBBYnNvbHV0ZVBvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpID09IG1fY29udGFpbmluZ0Jsb2Nr
Rm9yQWJzb2x1dGVQb3NpdGlvbi5ibG9jaygpKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay5j
b250YWluaW5nQmxvY2soKSA9PSBtX2NvbnRhaW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24u
YmxvY2soKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9jb250YWluaW5nQmxvY2tGb3JBYnNvbHV0
ZVBvc2l0aW9uOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChibG9jay0+Y29udGFpbmluZ0Js
b2NrKCkgPT0gbV9jb250YWluaW5nQmxvY2tGb3JJbmZsb3dQb3NpdGlvbi5ibG9jaygpKTsKKyAg
ICAgICAgQVNTRVJUKGJsb2NrLmNvbnRhaW5pbmdCbG9jaygpID09IG1fY29udGFpbmluZ0Jsb2Nr
Rm9ySW5mbG93UG9zaXRpb24uYmxvY2soKSk7CiAgICAgICAgIHJldHVybiBtX2NvbnRhaW5pbmdC
bG9ja0ZvckluZmxvd1Bvc2l0aW9uOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNTc3ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6d2lsbEJlRGVzdHJveWVkKCkKIAogICAgIGlmICghZG9j
dW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIGlmIChmaXJzdENoaWxkKCkgJiYgZmly
c3RDaGlsZCgpLT5pc1J1bkluKCkpCi0gICAgICAgICAgICBtb3ZlUnVuSW5Ub09yaWdpbmFsUG9z
aXRpb24oZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIG1vdmVSdW5JblRvT3JpZ2luYWxQb3Np
dGlvbigqZmlyc3RDaGlsZCgpKTsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgdG8gZGVzdHJv
eSBhbm9ueW1vdXMgY2hpbGRyZW4gZmlyc3Qgd2hpbGUgdGhleSBhcmUgc3RpbGwgY29ubmVjdGVk
IHRvIHRoZSByZXN0IG9mIHRoZSB0cmVlLCBzbyB0aGF0IHRoZXkgd2lsbApAQCAtNzUyLDcgKzc1
Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdBbm9ueW0KICAgICB9CiAK
ICAgICAvLyBOb3RoaW5nIGdvZXMgYmVmb3JlIHRoZSBpbnRydWRlZCBydW4taW4uCi0gICAgaWYg
KGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5pc1J1bkluKCkgJiYgcnVuSW5Jc1BsYWNlZElu
dG9TaWJsaW5nQmxvY2soYmVmb3JlQ2hpbGQpKQorICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZv
cmVDaGlsZC0+aXNSdW5JbigpICYmIHJ1bkluSXNQbGFjZWRJbnRvU2libGluZ0Jsb2NrKCpiZWZv
cmVDaGlsZCkpCiAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPm5leHRTaWJsaW5n
KCk7CiAKICAgICAvLyBDaGVjayBmb3IgYSBzcGFubmluZyBlbGVtZW50IGluIGNvbHVtbnMuCkBA
IC04MjMsNyArODIzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0Fub255
bQogICAgIFJlbmRlckJveDo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKICAKICAg
ICAvLyBIYW5kbGUgcGxhY2VtZW50IG9mIHJ1bi1pbnMuCi0gICAgcGxhY2VSdW5JbklmTmVlZGVk
KG5ld0NoaWxkKTsKKyAgICBwbGFjZVJ1bkluSWZOZWVkZWQoKm5ld0NoaWxkKTsKIAogICAgIGlm
IChtYWRlQm94ZXNOb25JbmxpbmUgJiYgcGFyZW50KCkgJiYgaXNBbm9ueW1vdXNCbG9jaygpICYm
IHBhcmVudCgpLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgIHRvUmVuZGVyQmxvY2socGFyZW50
KCkpLT5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOwpAQCAtODkyLDcgKzg5Miw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRlbGV0ZUxpbmVCb3hUcmVlKCkKICAgICAgICAgY2FjaGUt
PnJlY29tcHV0ZUlzSWdub3JlZCh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNo
aWxkcmVuTm9uSW5saW5lKFJlbmRlck9iamVjdCAqaW5zZXJ0aW9uUG9pbnQpCit2b2lkIFJlbmRl
ckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNlcnRpb25Qb2lu
dCkKIHsgICAgCiAgICAgLy8gbWFrZUNoaWxkcmVuTm9uSW5saW5lIHRha2VzIGEgYmxvY2sgd2hv
c2UgY2hpbGRyZW4gYXJlICphbGwqIGlubGluZSBhbmQgaXQKICAgICAvLyBtYWtlcyBzdXJlIHRo
YXQgaW5saW5lIGNoaWxkcmVuIGFyZSBjb2FsZXNjZWQgdW5kZXIgYW5vbnltb3VzCkBAIC05MDYs
NyArOTA2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKAogCiAg
ICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogCi0gICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwog
ICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTE1LDEyICs5MTUsMTMgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKAogICAgIC8vIFNpbmNlIHdl
IGFyZSBnb2luZyB0byBoYXZlIGJsb2NrIGNoaWxkcmVuLCB3ZSBoYXZlIHRvIG1vdmUKICAgICAv
LyBiYWNrIHRoZSBydW4taW4gdG8gaXRzIG9yaWdpbmFsIHBsYWNlLgogICAgIGlmIChjaGlsZC0+
aXNSdW5JbigpKSB7Ci0gICAgICAgIG1vdmVSdW5JblRvT3JpZ2luYWxQb3NpdGlvbihjaGlsZCk7
CisgICAgICAgIG1vdmVSdW5JblRvT3JpZ2luYWxQb3NpdGlvbigqY2hpbGQpOwogICAgICAgICBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICB9CiAKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAg
ICAgUmVuZGVyT2JqZWN0ICppbmxpbmVSdW5TdGFydCwgKmlubGluZVJ1bkVuZDsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBpbmxpbmVSdW5TdGFydDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBpbmxp
bmVSdW5FbmQ7CiAgICAgICAgIGdldElubGluZVJ1bihjaGlsZCwgaW5zZXJ0aW9uUG9pbnQsIGlu
bGluZVJ1blN0YXJ0LCBpbmxpbmVSdW5FbmQpOwogCiAgICAgICAgIGlmICghaW5saW5lUnVuU3Rh
cnQpCkBAIC05MzQsNyArOTM1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9u
SW5saW5lKAogICAgIH0KIAogI2lmbmRlZiBOREVCVUcKLSAgICBmb3IgKFJlbmRlck9iamVjdCAq
YyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQogICAg
ICAgICBBU1NFUlQoIWMtPmlzSW5saW5lKCkpOwogI2VuZGlmCiAKQEAgLTE1ODIsNyArMTU4Myw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyTGF5b3V0T3ZlcmZsb3coKQogCiB2b2lkIFJlbmRl
ckJsb2NrOjphZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCkKIHsKLSAgICBmb3IgKFJlbmRl
ckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZ0JveCgpKSB7CisgICAgZm9yIChhdXRvIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICBpZiAoIWNo
aWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBhZGRP
dmVyZmxvd0Zyb21DaGlsZChjaGlsZCk7CiAgICAgfQpAQCAtMTU5NCwxMCArMTU5NSw4IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbVBvc2l0aW8KICAgICBpZiAoIXBvc2l0aW9u
ZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyQm94KiBwb3NpdGlv
bmVkT2JqZWN0OwotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0OjppdGVyYXRvciBlbmQg
PSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmVuZCgpOwotICAgIGZvciAoVHJhY2tlZFJlbmRlcmVy
TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcG9zaXRpb25lZE9iamVjdCA9ICppdDsKKyAg
ICBmb3IgKGF1dG8gaXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmJlZ2luKCksIGVuZCA9IHBv
c2l0aW9uZWREZXNjZW5kYW50cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBS
ZW5kZXJCb3gqIHBvc2l0aW9uZWRPYmplY3QgPSAqaXQ7CiAgICAgICAgIAogICAgICAgICAvLyBG
aXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGRvbid0IGNvbnRyaWJ1dGUgdG8gbGF5b3V0IG92ZXJm
bG93LCBzaW5jZSB0aGV5IGRvbid0IHNjcm9sbCB3aXRoIHRoZSBjb250ZW50LgogICAgICAgICBp
ZiAocG9zaXRpb25lZE9iamVjdC0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9u
KSB7CkBAIC0xNjI4LDc2ICsxNjI3LDc2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmV4cGFuZHNUb0Vu
Y2xvc2VPdmVyaGEKICAgICAgICAgICAgfHwgaGFzQ29sdW1ucygpIHx8IGlzVGFibGVDZWxsKCkg
fHwgaXNUYWJsZUNhcHRpb24oKSB8fCBpc0ZpZWxkc2V0KCkgfHwgaXNXcml0aW5nTW9kZVJvb3Qo
KSB8fCBpc1Jvb3QoKTsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveVJ1bkluKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBydW5JbikKK3N0YXRpYyB2b2lkIGRlc3Ryb3lSdW5JbihSZW5kZXJCb3hNb2Rl
bE9iamVjdCYgcnVuSW4pCiB7Ci0gICAgQVNTRVJUKHJ1bkluLT5pc1J1bkluKCkpOwotICAgIEFT
U0VSVCghcnVuSW4tPmZpcnN0Q2hpbGQoKSk7CisgICAgQVNTRVJUKHJ1bkluLmlzUnVuSW4oKSk7
CisgICAgQVNTRVJUKCFydW5Jbi5maXJzdENoaWxkKCkpOwogCiAgICAgLy8gRGVsZXRlIG91ciBs
aW5lIGJveCB0cmVlLiBUaGlzIGlzIG5lZWRlZCBhcyBvdXIgY2hpbGRyZW4gZ290IG1vdmVkCiAg
ICAgLy8gYW5kIG91ciBsaW5lIGJveCB0cmVlIGlzIG5vIGxvbmdlciB2YWxpZC4KLSAgICBpZiAo
cnVuSW4tPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgdG9SZW5kZXJCbG9jayhydW5JbiktPmRl
bGV0ZUxpbmVCb3hUcmVlKCk7Ci0gICAgZWxzZSBpZiAocnVuSW4tPmlzUmVuZGVySW5saW5lKCkp
Ci0gICAgICAgIHRvUmVuZGVySW5saW5lKHJ1bkluKS0+ZGVsZXRlTGluZUJveFRyZWUoKTsKKyAg
ICBpZiAocnVuSW4uaXNSZW5kZXJCbG9jaygpKQorICAgICAgICB0b1JlbmRlckJsb2NrKHJ1bklu
KS5kZWxldGVMaW5lQm94VHJlZSgpOworICAgIGVsc2UgaWYgKHJ1bkluLmlzUmVuZGVySW5saW5l
KCkpCisgICAgICAgIHRvUmVuZGVySW5saW5lKHJ1bkluKS5kZWxldGVMaW5lQm94VHJlZSgpOwog
ICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICBydW5Jbi0+ZGVz
dHJveSgpOworICAgIHJ1bkluLmRlc3Ryb3koKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGxh
Y2VSdW5JbklmTmVlZGVkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQpCit2b2lkIFJlbmRlckJsb2Nr
OjpwbGFjZVJ1bkluSWZOZWVkZWQoUmVuZGVyT2JqZWN0JiBuZXdDaGlsZCkKIHsKLSAgICBpZiAo
bmV3Q2hpbGQtPmlzUnVuSW4oKSkKKyAgICBpZiAobmV3Q2hpbGQuaXNSdW5JbigpKQogICAgICAg
ICBtb3ZlUnVuSW5VbmRlclNpYmxpbmdCbG9ja0lmTmVlZGVkKG5ld0NoaWxkKTsKLSAgICBlbHNl
IGlmIChSZW5kZXJPYmplY3QqIHByZXZTaWJsaW5nID0gbmV3Q2hpbGQtPnByZXZpb3VzU2libGlu
ZygpKSB7CisgICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiBwcmV2U2libGluZyA9IG5ld0NoaWxk
LnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlmIChwcmV2U2libGluZy0+aXNSdW5Jbigp
KQotICAgICAgICAgICAgbW92ZVJ1bkluVW5kZXJTaWJsaW5nQmxvY2tJZk5lZWRlZChwcmV2U2li
bGluZyk7CisgICAgICAgICAgICBtb3ZlUnVuSW5VbmRlclNpYmxpbmdCbG9ja0lmTmVlZGVkKCpw
cmV2U2libGluZyk7CiAgICAgfQogfQogCi1SZW5kZXJCb3hNb2RlbE9iamVjdCogUmVuZGVyQmxv
Y2s6OmNyZWF0ZVJlcGxhY2VtZW50UnVuSW4oUmVuZGVyQm94TW9kZWxPYmplY3QqIHJ1bkluKQor
UmVuZGVyQm94TW9kZWxPYmplY3QmIFJlbmRlckJsb2NrOjpjcmVhdGVSZXBsYWNlbWVudFJ1bklu
KFJlbmRlckJveE1vZGVsT2JqZWN0JiBydW5JbikKIHsKLSAgICBBU1NFUlQocnVuSW4tPmlzUnVu
SW4oKSk7Ci0gICAgQVNTRVJUKHJ1bkluLT5lbGVtZW50KCkpOworICAgIEFTU0VSVChydW5Jbi5p
c1J1bkluKCkpOworICAgIEFTU0VSVChydW5Jbi5lbGVtZW50KCkpOwogCiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIG5ld1J1bkluID0gMDsKLSAgICBpZiAoIXJ1bkluLT5pc1JlbmRlckJsb2Nr
RmxvdygpKQotICAgICAgICBuZXdSdW5JbiA9IG5ldyBSZW5kZXJCbG9ja0Zsb3coKnJ1bkluLT5l
bGVtZW50KCkpOworICAgIGlmICghcnVuSW4uaXNSZW5kZXJCbG9ja0Zsb3coKSkKKyAgICAgICAg
bmV3UnVuSW4gPSBuZXcgUmVuZGVyQmxvY2tGbG93KCpydW5Jbi5lbGVtZW50KCkpOwogICAgIGVs
c2UKLSAgICAgICAgbmV3UnVuSW4gPSBuZXcgUmVuZGVySW5saW5lKCpydW5Jbi0+ZWxlbWVudCgp
KTsKKyAgICAgICAgbmV3UnVuSW4gPSBuZXcgUmVuZGVySW5saW5lKCpydW5Jbi5lbGVtZW50KCkp
OwogCi0gICAgcnVuSW4tPmVsZW1lbnQoKS0+c2V0UmVuZGVyZXIobmV3UnVuSW4pOwotICAgIG5l
d1J1bkluLT5zZXRTdHlsZSgqcnVuSW4tPnN0eWxlKCkpOworICAgIHJ1bkluLmVsZW1lbnQoKS0+
c2V0UmVuZGVyZXIobmV3UnVuSW4pOworICAgIG5ld1J1bkluLT5zZXRTdHlsZSgqcnVuSW4uc3R5
bGUoKSk7CiAKLSAgICBydW5Jbi0+bW92ZUFsbENoaWxkcmVuVG8obmV3UnVuSW4sIHRydWUpOwor
ICAgIHJ1bkluLm1vdmVBbGxDaGlsZHJlblRvKG5ld1J1bkluLCB0cnVlKTsKIAotICAgIHJldHVy
biBuZXdSdW5JbjsKKyAgICByZXR1cm4gKm5ld1J1bkluOwogfQogCi12b2lkIFJlbmRlckJsb2Nr
Ojptb3ZlUnVuSW5VbmRlclNpYmxpbmdCbG9ja0lmTmVlZGVkKFJlbmRlck9iamVjdCogcnVuSW4p
Cit2b2lkIFJlbmRlckJsb2NrOjptb3ZlUnVuSW5VbmRlclNpYmxpbmdCbG9ja0lmTmVlZGVkKFJl
bmRlck9iamVjdCYgcnVuSW4pCiB7Ci0gICAgQVNTRVJUKHJ1bkluLT5pc1J1bkluKCkpOworICAg
IEFTU0VSVChydW5Jbi5pc1J1bkluKCkpOwogCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgaW5saW5l
IGNoaWxkcmVuLiBJZiB0aGUgY2hpbGRyZW4gYXJlbid0IGlubGluZSwKICAgICAvLyB0aGVuIGp1
c3QgdHJlYXQgdGhlIHJ1bi1pbiBhcyBhIG5vcm1hbCBibG9jay4KLSAgICBpZiAoIXJ1bkluLT5j
aGlsZHJlbklubGluZSgpKQorICAgIGlmICghcnVuSW4uY2hpbGRyZW5JbmxpbmUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGhhbmRsZSBub24tYmxvY2sgZWxl
bWVudHMgd2l0aCBydW4taW4gZm9yIG5vdy4KLSAgICBpZiAoIXJ1bkluLT5pc1JlbmRlckJsb2Nr
RmxvdygpKQorICAgIGlmICghcnVuSW4uaXNSZW5kZXJCbG9ja0Zsb3coKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIGRvbid0IHN1cHBvcnQgcnVuLWlucyB3aXRoIG9yIGFz
IHBhcnQgb2YgYSBjb250aW51YXRpb24KICAgICAvLyBhcyBpdCBtYWtlcyB0aGUgYmFjay1hbmQt
Zm9ydGggcGxhY2luZyBjb21wbGV4LgotICAgIGlmIChydW5Jbi0+aXNFbGVtZW50Q29udGludWF0
aW9uKCkgfHwgcnVuSW4tPnZpcnR1YWxDb250aW51YXRpb24oKSkKKyAgICBpZiAocnVuSW4uaXNF
bGVtZW50Q29udGludWF0aW9uKCkgfHwgcnVuSW4udmlydHVhbENvbnRpbnVhdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBDaGVjayBpZiB0aGlzIG5vZGUgaXMgYWxsb3dlZCB0byBy
dW4taW4uIEUuZy4gPHNlbGVjdD4gZXhwZWN0cyBpdHMgcmVuZGVyZXIgdG8KICAgICAvLyBiZSBh
IFJlbmRlckxpc3RCb3ggb3IgUmVuZGVyTWVudUxpc3QsIGFuZCBoZW5jZSBjYW5ub3QgYmUgYSBS
ZW5kZXJJbmxpbmUgcnVuLWluLgotICAgIGlmICghcnVuSW4tPmNhbkJlUmVwbGFjZWRXaXRoSW5s
aW5lUnVuSW4oKSkKKyAgICBpZiAoIXJ1bkluLmNhbkJlUmVwbGFjZWRXaXRoSW5saW5lUnVuSW4o
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcnVuSW4tPm5l
eHRTaWJsaW5nKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcnVuSW4ubmV4dFNpYmxpbmco
KTsKICAgICBpZiAoIWN1cnIgfHwgIWN1cnItPmlzUmVuZGVyQmxvY2soKSB8fCAhY3Vyci0+Y2hp
bGRyZW5JbmxpbmUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNzEzLDM3ICsxNzEyLDM3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6Om1vdmVSdW5JblVuZGVyU2libGluZ0IKICAgICBpZiAobmV4dFNp
YmxpbmdCbG9jay5pc0Fub255bW91cygpIHx8IG5leHRTaWJsaW5nQmxvY2suaXNGbG9hdGluZ09y
T3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogb2xkUnVuSW4gPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJ1bkluKTsKLSAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbmV3UnVuSW4gPSBjcmVhdGVSZXBsYWNlbWVudFJ1bklu
KG9sZFJ1bkluKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgb2xkUnVuSW4gPSB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KHJ1bkluKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgbmV3UnVu
SW4gPSBjcmVhdGVSZXBsYWNlbWVudFJ1bkluKG9sZFJ1bkluKTsKICAgICBkZXN0cm95UnVuSW4o
b2xkUnVuSW4pOwogCiAgICAgLy8gTm93IGluc2VydCB0aGUgbmV3IGNoaWxkIHVuZGVyIHxjdXJy
fCBibG9jay4gVXNlIGFkZENoaWxkIGluc3RlYWQgb2YgaW5zZXJ0Q2hpbGROb2RlCiAgICAgLy8g
c2luY2UgaXQgaGFuZGxlcyBjb3JyZWN0IHBsYWNlbWVudCBvZiB0aGUgY2hpbGRyZW4sIGVzcGVj
aWFsbHkgd2hlcmUgd2UgY2Fubm90IGluc2VydAogICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGUg
Zmlyc3QgY2hpbGQuIGUuZy4gZGV0YWlscyB0YWcuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTgyMjguCi0gICAgbmV4dFNpYmxpbmdCbG9jay5hZGRDaGlsZChu
ZXdSdW5JbiwgbmV4dFNpYmxpbmdCbG9jay5maXJzdENoaWxkKCkpOworICAgIG5leHRTaWJsaW5n
QmxvY2suYWRkQ2hpbGQoJm5ld1J1bkluLCBuZXh0U2libGluZ0Jsb2NrLmZpcnN0Q2hpbGQoKSk7
CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB8dGhpc3wgZ2V0IGEgbGF5b3V0IHNpbmNlIGl0cyBy
dW4taW4gY2hpbGQgbW92ZWQuCiAgICAgbmV4dFNpYmxpbmdCbG9jay5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6cnVuSW5Jc1BsYWNl
ZEludG9TaWJsaW5nQmxvY2soUmVuZGVyT2JqZWN0KiBydW5JbikKK2Jvb2wgUmVuZGVyQmxvY2s6
OnJ1bkluSXNQbGFjZWRJbnRvU2libGluZ0Jsb2NrKFJlbmRlck9iamVjdCYgcnVuSW4pCiB7Ci0g
ICAgQVNTRVJUKHJ1bkluLT5pc1J1bkluKCkpOworICAgIEFTU0VSVChydW5Jbi5pc1J1bkluKCkp
OwogCiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCwgd2UgY2FuJ3QgYmUgbW92ZWQg
aW50byBvdXIgc2libGluZyBibG9jay4KICAgICBpZiAoIXBhcmVudCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBBbiBpbnRydWRlZCBydW4taW4gbmVlZHMgdG8gYmUgYW4gaW5s
aW5lLgotICAgIGlmICghcnVuSW4tPmlzUmVuZGVySW5saW5lKCkpCisgICAgaWYgKCFydW5Jbi5p
c1JlbmRlcklubGluZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bW92ZVJ1bkluVG9PcmlnaW5hbFBvc2l0aW9uKFJl
bmRlck9iamVjdCogcnVuSW4pCit2b2lkIFJlbmRlckJsb2NrOjptb3ZlUnVuSW5Ub09yaWdpbmFs
UG9zaXRpb24oUmVuZGVyT2JqZWN0JiBydW5JbikKIHsKLSAgICBBU1NFUlQocnVuSW4tPmlzUnVu
SW4oKSk7CisgICAgQVNTRVJUKHJ1bkluLmlzUnVuSW4oKSk7CiAKICAgICBpZiAoIXJ1bkluSXNQ
bGFjZWRJbnRvU2libGluZ0Jsb2NrKHJ1bkluKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc1Mywy
MSArMTc1MiwyMSBAQCB2b2lkIFJlbmRlckJsb2NrOjptb3ZlUnVuSW5Ub09yaWdpbmFsUG9zCiAg
ICAgLy8gb3JpZ2luYWwgcGxhY2Ugc2luY2UgdGhhdCByZXF1aXJlcyB3cml0aW5nIGludGVncmF0
aW9uIGxvZ2ljIHdpdGggUmVuZGVySW5saW5lOjphZGRDaGlsZAogICAgIC8vIGFuZCBhbGwgb3Ro
ZXIgcGxhY2VzIHRoYXQgbWlnaHQgY2F1c2UgY29udGludWF0aW9ucyB0byBiZSBjcmVhdGVkICh3
aXRob3V0IGJsb3dpbmcgYXdheQogICAgIC8vIHx0aGlzfCkuIERpc2FibGluZyB0aGlzIGZlYXR1
cmUgZm9yIG5vdyB0byBwcmV2ZW50IGNyYXNoZXMuCi0gICAgaWYgKHJ1bkluLT5pc0VsZW1lbnRD
b250aW51YXRpb24oKSB8fCBydW5Jbi0+dmlydHVhbENvbnRpbnVhdGlvbigpKQorICAgIGlmIChy
dW5Jbi5pc0VsZW1lbnRDb250aW51YXRpb24oKSB8fCBydW5Jbi52aXJ0dWFsQ29udGludWF0aW9u
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRSdW5J
biA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocnVuSW4pOwotICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBuZXdSdW5JbiA9IGNyZWF0ZVJlcGxhY2VtZW50UnVuSW4ob2xkUnVuSW4pOworICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0JiBvbGRSdW5JbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocnVu
SW4pOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiBuZXdSdW5JbiA9IGNyZWF0ZVJlcGxhY2Vt
ZW50UnVuSW4ob2xkUnVuSW4pOwogICAgIGRlc3Ryb3lSdW5JbihvbGRSdW5Jbik7CiAKICAgICAv
LyBBZGQgdGhlIHJ1bi1pbiBibG9jayBhcyBvdXIgcHJldmlvdXMgc2libGluZy4KLSAgICBwYXJl
bnQoKS0+YWRkQ2hpbGQobmV3UnVuSW4sIHRoaXMpOworICAgIHBhcmVudCgpLT5hZGRDaGlsZCgm
bmV3UnVuSW4sIHRoaXMpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBob2xk
aW5nIHRoZSBuZXcgcnVuLWluIGdldHMgbGF5b3V0LgogICAgIHBhcmVudCgpLT5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
Y29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoY29uc3QgUmVu
ZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBSZW5kZXJSZWdpb24q
IHJlZ2lvbikKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNvbXB1dGVTdGFydFBvc2l0aW9uRGVs
dGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVu
aXQgY2hpbGRNYXJnaW5TdGFydCwgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgTGF5b3V0
VW5pdCBzdGFydFBvc2l0aW9uID0gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbik7CiAKQEAg
LTE3ODEsNyArMTc4MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNvbXB1dGVTdGFydFBv
c2kKIAogICAgIExheW91dFVuaXQgc3RhcnRPZmYgPSBzdGFydE9mZnNldEZvckxpbmUoYmxvY2tP
ZmZzZXQsIGZhbHNlLCByZWdpb24sIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkpOwogCi0g
ICAgaWYgKHN0eWxlKCktPnRleHRBbGlnbigpICE9IFdFQktJVF9DRU5URVIgJiYgIWNoaWxkLT5z
dHlsZSgpLT5tYXJnaW5TdGFydFVzaW5nKHN0eWxlKCkpLmlzQXV0bygpKSB7CisgICAgaWYgKHN0
eWxlKCktPnRleHRBbGlnbigpICE9IFdFQktJVF9DRU5URVIgJiYgIWNoaWxkLnN0eWxlKCktPm1h
cmdpblN0YXJ0VXNpbmcoc3R5bGUoKSkuaXNBdXRvKCkpIHsKICAgICAgICAgaWYgKGNoaWxkTWFy
Z2luU3RhcnQgPCAwKQogICAgICAgICAgICAgc3RhcnRPZmYgKz0gY2hpbGRNYXJnaW5TdGFydDsK
ICAgICAgICAgbmV3UG9zaXRpb24gPSBtYXgobmV3UG9zaXRpb24sIHN0YXJ0T2ZmKTsgLy8gTGV0
IHRoZSBmbG9hdCBzaXQgaW4gdGhlIGNoaWxkJ3MgbWFyZ2luIGlmIGl0IGNhbiBmaXQuCkBAIC0x
NzkxLDcgKzE3OTAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3Np
CiAgICAgcmV0dXJuIG5ld1Bvc2l0aW9uIC0gb2xkUG9zaXRpb247CiB9CiAKLXZvaWQgUmVuZGVy
QmxvY2s6OmRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqIGNo
aWxkLCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQordm9pZCBSZW5kZXJCbG9jazo6
ZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIEFw
cGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEpCiB7CiAgICAgTGF5b3V0VW5pdCBzdGFydFBv
c2l0aW9uID0gYm9yZGVyU3RhcnQoKSArIHBhZGRpbmdTdGFydCgpOwogICAgIGlmIChzdHlsZSgp
LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25Mb2dpY2FsTGVmdCgpKQpAQCAt
MTgwNCw0OCArMTgwMyw0OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVMb2dpY2FsTGVm
dFBvCiAgICAgICAgIAogICAgIC8vIFNvbWUgb2JqZWN0cyAoZS5nLiwgdGFibGVzLCBob3Jpem9u
dGFsIHJ1bGVzLCBvdmVyZmxvdzphdXRvIGJsb2NrcykgYXZvaWQgZmxvYXRzLiAgVGhleSBuZWVk
CiAgICAgLy8gdG8gc2hpZnQgb3ZlciBhcyBuZWNlc3NhcnkgdG8gZG9kZ2UgYW55IGZsb2F0cyB0
aGF0IG1pZ2h0IGdldCBpbiB0aGUgd2F5LgotICAgIGlmIChjaGlsZC0+YXZvaWRzRmxvYXRzKCkg
JiYgY29udGFpbnNGbG9hdHMoKSAmJiAhZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKQorICAg
IGlmIChjaGlsZC5hdm9pZHNGbG9hdHMoKSAmJiBjb250YWluc0Zsb2F0cygpICYmICFmbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIG5ld1Bvc2l0aW9uICs9IGNvbXB1dGVTdGFy
dFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNoaWxkLCBtYXJnaW5TdGFydEZv
ckNoaWxkKGNoaWxkKSk7CiAKICAgICBzZXRMb2dpY2FsTGVmdEZvckNoaWxkKGNoaWxkLCBzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBuZXdQb3NpdGlvbiA6IHRvdGFsQXZhaWxh
YmxlTG9naWNhbFdpZHRoIC0gbmV3UG9zaXRpb24gLSBsb2dpY2FsV2lkdGhGb3JDaGlsZChjaGls
ZCksIGFwcGx5RGVsdGEpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpzZXRMb2dpY2FsTGVmdEZv
ckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbExlZnQsIEFwcGx5TGF5
b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEpCit2b2lkIFJlbmRlckJsb2NrOjpzZXRMb2dpY2FsTGVm
dEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbExlZnQsIEFwcGx5
TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEpCiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGFwcGx5RGVsdGEgPT0gQXBwbHlMYXlvdXREZWx0YSkK
LSAgICAgICAgICAgIHZpZXcoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKGNoaWxkLT54KCkg
LSBsb2dpY2FsTGVmdCwgMCkpOwotICAgICAgICBjaGlsZC0+c2V0WChsb2dpY2FsTGVmdCk7Cisg
ICAgICAgICAgICB2aWV3KCkuYWRkTGF5b3V0RGVsdGEoTGF5b3V0U2l6ZShjaGlsZC54KCkgLSBs
b2dpY2FsTGVmdCwgMCkpOworICAgICAgICBjaGlsZC5zZXRYKGxvZ2ljYWxMZWZ0KTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoYXBwbHlEZWx0YSA9PSBBcHBseUxheW91dERlbHRhKQotICAg
ICAgICAgICAgdmlldygpLmFkZExheW91dERlbHRhKExheW91dFNpemUoMCwgY2hpbGQtPnkoKSAt
IGxvZ2ljYWxMZWZ0KSk7Ci0gICAgICAgIGNoaWxkLT5zZXRZKGxvZ2ljYWxMZWZ0KTsKKyAgICAg
ICAgICAgIHZpZXcoKS5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKDAsIGNoaWxkLnkoKSAtIGxv
Z2ljYWxMZWZ0KSk7CisgICAgICAgIGNoaWxkLnNldFkobG9naWNhbExlZnQpOwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6c2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgYXBwbHlEZWx0
YSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldExvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVs
dGEpCiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYg
KGFwcGx5RGVsdGEgPT0gQXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXcoKS5hZGRM
YXlvdXREZWx0YShMYXlvdXRTaXplKDAsIGNoaWxkLT55KCkgLSBsb2dpY2FsVG9wKSk7Ci0gICAg
ICAgIGNoaWxkLT5zZXRZKGxvZ2ljYWxUb3ApOworICAgICAgICAgICAgdmlldygpLmFkZExheW91
dERlbHRhKExheW91dFNpemUoMCwgY2hpbGQueSgpIC0gbG9naWNhbFRvcCkpOworICAgICAgICBj
aGlsZC5zZXRZKGxvZ2ljYWxUb3ApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChhcHBseURl
bHRhID09IEFwcGx5TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCkuYWRkTGF5b3V0RGVs
dGEoTGF5b3V0U2l6ZShjaGlsZC0+eCgpIC0gbG9naWNhbFRvcCwgMCkpOwotICAgICAgICBjaGls
ZC0+c2V0WChsb2dpY2FsVG9wKTsKKyAgICAgICAgICAgIHZpZXcoKS5hZGRMYXlvdXREZWx0YShM
YXlvdXRTaXplKGNoaWxkLngoKSAtIGxvZ2ljYWxUb3AsIDApKTsKKyAgICAgICAgY2hpbGQuc2V0
WChsb2dpY2FsVG9wKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUJsb2Nr
Q2hpbGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQoYm9vbCByZWxheW91dENoaWxkcmVuLCBSZW5kZXJC
b3gqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0c0Jl
Zm9yZUxheW91dChib29sIHJlbGF5b3V0Q2hpbGRyZW4sIFJlbmRlckJveCYgY2hpbGQpCiB7CiAg
ICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHBlcmNlbnRhZ2UgaGVpZ2h0IG9iamVjdHMgb25seSBu
ZWVkIGEgcmVsYXlvdXQgaWYgdGhlaXIgcGVyY2VudGFnZSBpc24ndCBnb2luZyB0byBiZSB0dXJu
ZWQgaW50bwogICAgIC8vIGFuIGF1dG8gdmFsdWUuIEFkZCBhIG1ldGhvZCB0byBkZXRlcm1pbmUg
dGhpcywgc28gdGhhdCB3ZSBjYW4gYXZvaWQgdGhlIHJlbGF5b3V0LgotICAgIGlmIChyZWxheW91
dENoaWxkcmVuIHx8IChjaGlsZC0+aGFzUmVsYXRpdmVMb2dpY2FsSGVpZ2h0KCkgJiYgIWlzUmVu
ZGVyVmlldygpKSB8fCBjaGlsZC0+aGFzVmlld3BvcnRQZXJjZW50YWdlTG9naWNhbEhlaWdodCgp
KQotICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAg
IGlmIChyZWxheW91dENoaWxkcmVuIHx8IChjaGlsZC5oYXNSZWxhdGl2ZUxvZ2ljYWxIZWlnaHQo
KSAmJiAhaXNSZW5kZXJWaWV3KCkpIHx8IGNoaWxkLmhhc1ZpZXdwb3J0UGVyY2VudGFnZUxvZ2lj
YWxIZWlnaHQoKSkKKyAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOwogCiAgICAgLy8gSWYgcmVsYXlvdXRDaGlsZHJlbiBpcyBzZXQgYW5kIHRoZSBjaGlsZCBo
YXMgcGVyY2VudGFnZSBwYWRkaW5nIG9yIGFuIGVtYmVkZGVkIGNvbnRlbnQgYm94LCB3ZSBhbHNv
IG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2hpbGRzIHByZWYgd2lkdGhzLgotICAgIGlmIChyZWxh
eW91dENoaWxkcmVuICYmIGNoaWxkLT5uZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24o
KSkKLSAgICAgICAgY2hpbGQtPnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlLCBN
YXJrT25seVRoaXMpOworICAgIGlmIChyZWxheW91dENoaWxkcmVuICYmIGNoaWxkLm5lZWRzUHJl
ZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlvbigpKQorICAgICAgICBjaGlsZC5zZXRQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkodHJ1ZSwgTWFya09ubHlUaGlzKTsKIH0KIAogdm9pZCBSZW5kZXJC
bG9jazo6ZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERlc2NlbmRhbnRzKCkKQEAg
LTE4NTYsOSArMTg1NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBl
cmMKICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogZGVzY2VuZGFudHMgPSBnUGVyY2Vu
dEhlaWdodERlc2NlbmRhbnRzTWFwLT5nZXQodGhpcyk7CiAgICAgaWYgKCFkZXNjZW5kYW50cykK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0Ojpp
dGVyYXRvciBlbmQgPSBkZXNjZW5kYW50cy0+ZW5kKCk7Ci0gICAgZm9yIChUcmFja2VkUmVuZGVy
ZXJMaXN0SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBkZXNjZW5kYW50cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBkZXNjZW5kYW50cy0+YmVnaW4oKSwg
ZW5kID0gZGVzY2VuZGFudHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVu
ZGVyQm94KiBib3ggPSAqaXQ7CiAgICAgICAgIHdoaWxlIChib3ggIT0gdGhpcykgewogICAgICAg
ICAgICAgaWYgKGJveC0+bm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQpAQCAtMTg4Myw3ICsxODgx
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2ltcGxpZmllZE5vcm1hbEZsb3dMYQogewogICAgIGlm
IChjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIExpc3RIYXNoU2V0PFJvb3RJbmxpbmVCb3gq
PiBsaW5lQm94ZXM7Ci0gICAgICAgIGZvciAoSW5saW5lV2Fsa2VyIHdhbGtlcih0aGlzKTsgIXdh
bGtlci5hdEVuZCgpOyB3YWxrZXIuYWR2YW5jZSgpKSB7CisgICAgICAgIGZvciAoSW5saW5lV2Fs
a2VyIHdhbGtlcigqdGhpcyk7ICF3YWxrZXIuYXRFbmQoKTsgd2Fsa2VyLmFkdmFuY2UoKSkgewog
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gd2Fsa2VyLmN1cnJlbnQoKTsKICAgICAgICAg
ICAgIGlmICghby0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKG8tPmlzUmVwbGFjZWQoKSB8
fCBvLT5pc0Zsb2F0aW5nKCkpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94JiBib3ggPSB0
b1JlbmRlckJveCgqbyk7CkBAIC0xODk3LDEyICsxODk1LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnNpbXBsaWZpZWROb3JtYWxGbG93TGEKICAgICAgICAgLy8gRklYTUU6IEdseXBoIG92ZXJmbG93
IHdpbGwgZ2V0IGxvc3QgaW4gdGhpcyBjYXNlLCBidXQgbm90IHJlYWxseSBhIGJpZyBkZWFsLgog
ICAgICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBpbnZhbGlkYXRlIHRoZSBrbm93blRvSGF2
ZU5vT3ZlcmZsb3cgZmxhZyBvbiB0aGUgSW5saW5lQm94ZXMuCiAgICAgICAgIEdseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwIHRleHRCb3hEYXRhTWFwOyAgICAgICAgICAgICAgICAgIAot
ICAgICAgICBmb3IgKExpc3RIYXNoU2V0PFJvb3RJbmxpbmVCb3gqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsaW5lQm94ZXMuYmVnaW4oKTsgaXQgIT0gbGluZUJveGVzLmVuZCgpOyArK2l0KSB7Cisg
ICAgICAgIGZvciAoYXV0byBpdCA9IGxpbmVCb3hlcy5iZWdpbigpLCBlbmQgPSBsaW5lQm94ZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94
ID0gKml0OwogICAgICAgICAgICAgYm94LT5jb21wdXRlT3ZlcmZsb3coYm94LT5saW5lVG9wKCks
IGJveC0+bGluZUJvdHRvbSgpLCB0ZXh0Qm94RGF0YU1hcCk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKFJlbmRlckJveCogYm94ID0gZmlyc3RDaGlsZEJveCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBmb3IgKGF1dG8gYm94ID0g
Zmlyc3RDaGlsZEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAg
ICAgICAgICAgaWYgKCFib3gtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
ICAgIGJveC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgfQpAQCAtMTk1NywzNCArMTk1NSwz
NCBAQCBib29sIFJlbmRlckJsb2NrOjpzaW1wbGlmaWVkTGF5b3V0KCkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JMYXlv
dXRJZk5lZWRlZChSZW5kZXJPYmplY3QqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6bWFya0Zp
eGVkUG9zaXRpb25PYmplY3RGb3JMYXlvdXRJZk5lZWRlZChSZW5kZXJPYmplY3QmIGNoaWxkKQog
ewotICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQor
ICAgIGlmIChjaGlsZC5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGJvb2wgaGFzU3RhdGljQmxvY2tQb3NpdGlvbiA9IGNoaWxkLT5z
dHlsZSgpLT5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9uKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OwotICAgIGJvb2wgaGFzU3RhdGljSW5saW5lUG9zaXRpb24gPSBjaGlsZC0+c3R5bGUoKS0+aGFz
U3RhdGljSW5saW5lUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgYm9v
bCBoYXNTdGF0aWNCbG9ja1Bvc2l0aW9uID0gY2hpbGQuc3R5bGUoKS0+aGFzU3RhdGljQmxvY2tQ
b3NpdGlvbihpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBib29sIGhhc1N0YXRpY0lu
bGluZVBvc2l0aW9uID0gY2hpbGQuc3R5bGUoKS0+aGFzU3RhdGljSW5saW5lUG9zaXRpb24oaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAgaWYgKCFoYXNTdGF0aWNCbG9ja1Bvc2l0aW9u
ICYmICFoYXNTdGF0aWNJbmxpbmVQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBvID0gY2hpbGQtPnBhcmVudCgpOworICAgIGF1dG8gbyA9IGNoaWxkLnBhcmVudCgpOwogICAg
IHdoaWxlIChvICYmICFvLT5pc1JlbmRlclZpZXcoKSAmJiBvLT5zdHlsZSgpLT5wb3NpdGlvbigp
ICE9IEFic29sdXRlUG9zaXRpb24pCiAgICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICBpZiAo
by0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KGNoaWxkKTsKKyAgICBSZW5k
ZXJCb3gmIGJveCA9IHRvUmVuZGVyQm94KGNoaWxkKTsKICAgICBpZiAoaGFzU3RhdGljSW5saW5l
UG9zaXRpb24pIHsKICAgICAgICAgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzIGNvbXB1dGVk
VmFsdWVzOwotICAgICAgICBib3gtPmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihjb21wdXRl
ZFZhbHVlcyk7CisgICAgICAgIGJveC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0
ZWRWYWx1ZXMpOwogICAgICAgICBMYXlvdXRVbml0IG5ld0xlZnQgPSBjb21wdXRlZFZhbHVlcy5t
X3Bvc2l0aW9uOwotICAgICAgICBpZiAobmV3TGVmdCAhPSBib3gtPmxvZ2ljYWxMZWZ0KCkpCi0g
ICAgICAgICAgICBib3gtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAg
ICAgaWYgKG5ld0xlZnQgIT0gYm94LmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgICAgICBib3guc2V0
Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgIH0gZWxzZSBpZiAoaGFzU3RhdGlj
QmxvY2tQb3NpdGlvbikgewotICAgICAgICBMYXlvdXRVbml0IG9sZFRvcCA9IGJveC0+bG9naWNh
bFRvcCgpOwotICAgICAgICBib3gtPnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgaWYg
KGJveC0+bG9naWNhbFRvcCgpICE9IG9sZFRvcCkKLSAgICAgICAgICAgIGJveC0+c2V0Q2hpbGRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICBMYXlvdXRVbml0IG9sZFRvcCA9IGJv
eC5sb2dpY2FsVG9wKCk7CisgICAgICAgIGJveC51cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAg
ICAgIGlmIChib3gubG9naWNhbFRvcCgpICE9IG9sZFRvcCkKKyAgICAgICAgICAgIGJveC5zZXRD
aGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgfQogfQogCkBAIC0xOTk3LDEwICsx
OTk1LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgIGlm
IChoYXNDb2x1bW5zKCkpCiAgICAgICAgIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5jbGVhclBhZ2lu
YXRpb25JbmZvcm1hdGlvbigpOyAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYXJlIG5vdCBwYXJ0IG9m
IHRoZSBjb2x1bW4gZmxvdywgc28gdGhleSBkb24ndCBwYWdpbmF0ZSB3aXRoIHRoZSBjb2x1bW5z
LgogCi0gICAgUmVuZGVyQm94KiByOwotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0Ojpp
dGVyYXRvciBlbmQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmVuZCgpOwotICAgIGZvciAoVHJh
Y2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZERlc2NlbmRh
bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgciA9ICppdDsKKyAgICBm
b3IgKGF1dG8gaXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmJlZ2luKCksIGVuZCA9IHBvc2l0
aW9uZWREZXNjZW5kYW50cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5k
ZXJCb3gmIHIgPSAqKml0OwogICAgICAgICAKICAgICAgICAgZXN0aW1hdGVSZWdpb25SYW5nZUZv
ckJveENoaWxkKHIpOwogCkBAIC0yMDA5LDcgKzIwMDUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRQb3NpdGlvbmVkT2JqZWN0CiAgICAgICAgIC8vIGl0IGhhcyBzdGF0aWMgcG9zaXRpb24u
CiAgICAgICAgIG1hcmtGaXhlZFBvc2l0aW9uT2JqZWN0Rm9yTGF5b3V0SWZOZWVkZWQocik7CiAg
ICAgICAgIGlmIChmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpIHsKLSAgICAgICAgICAgIHItPmxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICByLmxheW91dElmTmVlZGVkKCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0yMDE3LDQ0ICsyMDEzLDQ0IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3QKICAgICAgICAgLy8gbm9uLXBvc2l0
aW9uZWQgYmxvY2suICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gZGV0ZWN0IGFsbCBvZiB0aGVzZSBt
b3ZlbWVudCBjYXNlcywgd2UganVzdCBhbHdheXMgbGF5IG91dCBwb3NpdGlvbmVkCiAgICAgICAg
IC8vIG9iamVjdHMgdGhhdCBhcmUgcG9zaXRpb25lZCBpbXBsaWNpdGx5IGxpa2UgdGhpcy4gIFN1
Y2ggb2JqZWN0cyBhcmUgcmFyZSwgYW5kIHNvIGluIHR5cGljYWwgREhUTUwgbWVudSB1c2FnZSAo
d2hlcmUgZXZlcnl0aGluZyBpcwogICAgICAgICAvLyBwb3NpdGlvbmVkIGV4cGxpY2l0bHkpIHRo
aXMgc2hvdWxkIG5vdCBpbmN1ciBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuCi0gICAgICAgIGlmIChy
ZWxheW91dENoaWxkcmVuIHx8IChyLT5zdHlsZSgpLT5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9uKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICYmIHItPnBhcmVudCgpICE9IHRoaXMpKQotICAgICAg
ICAgICAgci0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICBpZiAo
cmVsYXlvdXRDaGlsZHJlbiB8fCAoci5zdHlsZSgpLT5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9uKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICYmIHIucGFyZW50KCkgIT0gdGhpcykpCisgICAgICAg
ICAgICByLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgIAog
ICAgICAgICAvLyBJZiByZWxheW91dENoaWxkcmVuIGlzIHNldCBhbmQgdGhlIGNoaWxkIGhhcyBw
ZXJjZW50YWdlIHBhZGRpbmcgb3IgYW4gZW1iZWRkZWQgY29udGVudCBib3gsIHdlIGFsc28gbmVl
ZCB0byBpbnZhbGlkYXRlIHRoZSBjaGlsZHMgcHJlZiB3aWR0aHMuCi0gICAgICAgIGlmIChyZWxh
eW91dENoaWxkcmVuICYmIHItPm5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlvbigpKQot
ICAgICAgICAgICAgci0+c2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUsIE1hcmtP
bmx5VGhpcyk7CisgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuICYmIHIubmVlZHNQcmVmZXJy
ZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkpCisgICAgICAgICAgICByLnNldFByZWZlcnJlZExvZ2lj
YWxXaWR0aHNEaXJ0eSh0cnVlLCBNYXJrT25seVRoaXMpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFyLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgci0+bWFya0ZvclBhZ2luYXRpb25SZWxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgIGlmICghci5uZWVkc0xheW91dCgpKQorICAgICAgICAg
ICAgci5tYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gZG8gYSBmdWxsIGxheW91dC4gIFdlIGp1c3QgaGF2ZSB0
byB1cGRhdGUgb3VyIHBvc2l0aW9uLiBUcnkgdGhhdCBmaXJzdC4gSWYgd2UgaGF2ZSBzaHJpbmst
dG8tZml0IHdpZHRoCiAgICAgICAgIC8vIGFuZCB3ZSBoaXQgdGhlIGF2YWlsYWJsZSB3aWR0aCBj
b25zdHJhaW50LCB0aGUgbGF5b3V0SWZOZWVkZWQoKSB3aWxsIGNhdGNoIGl0IGFuZCBkbyBhIGZ1
bGwgbGF5b3V0LgotICAgICAgICBpZiAoci0+bmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRP
bmx5KCkgJiYgci0+dHJ5TGF5b3V0RG9pbmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCkpCi0gICAg
ICAgICAgICByLT5jbGVhck5lZWRzTGF5b3V0KCk7CisgICAgICAgIGlmIChyLm5lZWRzUG9zaXRp
b25lZE1vdmVtZW50TGF5b3V0T25seSgpICYmIHIudHJ5TGF5b3V0RG9pbmdQb3NpdGlvbmVkTW92
ZW1lbnRPbmx5KCkpCisgICAgICAgICAgICByLmNsZWFyTmVlZHNMYXlvdXQoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBJZiB3ZSBhcmUgcGFnaW5hdGVkIG9yIGluIGEgbGluZSBncmlkLCBn
byBhaGVhZCBhbmQgY29tcHV0ZSBhIHZlcnRpY2FsIHBvc2l0aW9uIGZvciBvdXIgb2JqZWN0IG5v
dy4KICAgICAgICAgLy8gSWYgaXQncyB3cm9uZyB3ZSdsbCBsYXkgb3V0IGFnYWluLgogICAgICAg
ICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSAwOwotICAgICAgICBib29sIG5lZWRzQmxvY2tE
aXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCA9IHItPm5lZWRzTGF5b3V0KCkgJiYgdmll
dygpLmxheW91dFN0YXRlKCktPm5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxh
eW91dCgpOworICAgICAgICBib29sIG5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9y
ZUxheW91dCA9IHIubmVlZHNMYXlvdXQoKSAmJiB2aWV3KCkubGF5b3V0U3RhdGUoKS0+bmVlZHNC
bG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0KCk7CiAgICAgICAgIGlmIChuZWVk
c0Jsb2NrRGlyZWN0aW9uTG9jYXRpb25TZXRCZWZvcmVMYXlvdXQpIHsKLSAgICAgICAgICAgIGlm
IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IHItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgci0+dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gci5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQorICAgICAgICAgICAgICAgIHIudXBkYXRlTG9naWNhbEhlaWdodCgpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHItPnVwZGF0ZUxvZ2ljYWxXaWR0aCgpOworICAg
ICAgICAgICAgICAgIHIudXBkYXRlTG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICBvbGRMb2dp
Y2FsVG9wID0gbG9naWNhbFRvcEZvckNoaWxkKHIpOwogICAgICAgICB9CiAKLSAgICAgICAgci0+
bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgci5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgICAg
IC8vIExheSBvdXQgYWdhaW4gaWYgb3VyIGVzdGltYXRlIHdhcyB3cm9uZy4KICAgICAgICAgaWYg
KG5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCAmJiBsb2dpY2FsVG9w
Rm9yQ2hpbGQocikgIT0gb2xkTG9naWNhbFRvcCkgewotICAgICAgICAgICAgci0+c2V0Q2hpbGRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVkZWQo
KTsKKyAgICAgICAgICAgIHIuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAg
ICAgICAgICAgci5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHVw
ZGF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQocikpIHsKLSAgICAgICAgICAgIHItPnNldE5lZWRz
TGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICByLT5sYXlvdXRJZk5lZWRlZCgpOwor
ICAgICAgICAgICAgci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAg
ci5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjA2NSwxMyAr
MjA2MSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0CiB2b2lk
IFJlbmRlckJsb2NrOjptYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKQogewogICAgIFRy
YWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlv
bmVkT2JqZWN0cygpOwotICAgIGlmIChwb3NpdGlvbmVkRGVzY2VuZGFudHMpIHsKLSAgICAgICAg
UmVuZGVyQm94KiByOwotICAgICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldDo6aXRlcmF0
b3IgZW5kID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKTsKLSAgICAgICAgZm9yIChUcmFj
a2VkUmVuZGVyZXJMaXN0SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFu
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgciA9ICppdDsKLSAg
ICAgICAgICAgIHItPnNldENoaWxkTmVlZHNMYXlvdXQoKTsKLSAgICAgICAgfQorICAgIGlmICgh
cG9zaXRpb25lZERlc2NlbmRhbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8g
aXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmJlZ2luKCksIGVuZCA9IHBvc2l0aW9uZWREZXNj
ZW5kYW50cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJCb3gqIHIg
PSAqaXQ7CisgICAgICAgIHItPnNldENoaWxkTmVlZHNMYXlvdXQoKTsKICAgICB9CiB9CiAKQEAg
LTIzMTAsMTcgKzIzMDUsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWlu
dEluZgogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFpbnRJbmZv
Rm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewotICAgIGZvciAoUmVuZGVyQm94KiBjaGls
ZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94
KCkpIHsKLSAgICAgICAgaWYgKCFwYWludENoaWxkKGNoaWxkLCBwYWludEluZm8sIHBhaW50T2Zm
c2V0LCBwYWludEluZm9Gb3JDaGlsZCwgdXNlUHJpbnRSZWN0KSkKKyAgICBmb3IgKGF1dG8gY2hp
bGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0Jv
eCgpKSB7CisgICAgICAgIGlmICghcGFpbnRDaGlsZCgqY2hpbGQsIHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJlY3QpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZChSZW5kZXJCb3gq
IGNoaWxkLCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBQYWludEluZm8mIHBhaW50SW5mb0ZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkKK2Jv
b2wgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBwYWlu
dEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHBh
Z2UtYnJlYWstYmVmb3JlOiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwu
Ci0gICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICh1c2VQ
cmludFJlY3QgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlT
KTsKLSAgICBMYXlvdXRVbml0IGFic29sdXRlQ2hpbGRZID0gcGFpbnRPZmZzZXQueSgpICsgY2hp
bGQtPnkoKTsKKyAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkg
JiYgKHVzZVByaW50UmVjdCAmJiBjaGlsZC5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQ
QkFMV0FZUyk7CisgICAgTGF5b3V0VW5pdCBhYnNvbHV0ZUNoaWxkWSA9IHBhaW50T2Zmc2V0Lnko
KSArIGNoaWxkLnkoKTsKICAgICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAgICAgICAgJiYgYWJz
b2x1dGVDaGlsZFkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgJiYgYWJzb2x1dGVDaGls
ZFkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkpIHsKQEAgLTIzMjgsMjkgKzIzMjMsMzAgQEAgYm9v
bCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZChSZW5kZXJCb3gqIAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkLT5pc1Jl
cGxhY2VkKCkgJiYgdXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5oZWlnaHQoKSA8PSB2aWV3KCkucHJp
bnRSZWN0KCkuaGVpZ2h0KCkpIHsKKyAgICBpZiAoIWNoaWxkLmlzRmxvYXRpbmcoKSAmJiBjaGls
ZC5pc1JlcGxhY2VkKCkgJiYgdXNlUHJpbnRSZWN0ICYmIGNoaWxkLmhlaWdodCgpIDw9IHZpZXco
KS5wcmludFJlY3QoKS5oZWlnaHQoKSkgewogICAgICAgICAvLyBQYWdpbmF0ZSBibG9jay1sZXZl
bCByZXBsYWNlZCBlbGVtZW50cy4KLSAgICAgICAgaWYgKGFic29sdXRlQ2hpbGRZICsgY2hpbGQt
PmhlaWdodCgpID4gdmlldygpLnByaW50UmVjdCgpLm1heFkoKSkgeworICAgICAgICBpZiAoYWJz
b2x1dGVDaGlsZFkgKyBjaGlsZC5oZWlnaHQoKSA+IHZpZXcoKS5wcmludFJlY3QoKS5tYXhZKCkp
IHsKICAgICAgICAgICAgIGlmIChhYnNvbHV0ZUNoaWxkWSA8IHZpZXcoKS50cnVuY2F0ZWRBdCgp
KQotICAgICAgICAgICAgICAgIHZpZXcoKS5zZXRCZXN0VHJ1bmNhdGVkQXQoYWJzb2x1dGVDaGls
ZFksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICB2aWV3KCkuc2V0QmVzdFRydW5jYXRlZEF0KGFi
c29sdXRlQ2hpbGRZLCAmY2hpbGQpOwogICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRv
IHRydW5jYXRlLCBkb24ndCBwYWludC4KICAgICAgICAgICAgIGlmIChhYnNvbHV0ZUNoaWxkWSA+
PSB2aWV3KCkudHJ1bmNhdGVkQXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlRm9yQ2hpbGQoY2hpbGQsIHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWNoaWxkLT5o
YXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQotICAgICAgICBj
aGlsZC0+cGFpbnQocGFpbnRJbmZvRm9yQ2hpbGQsIGNoaWxkUG9pbnQpOworICAgIExheW91dFBv
aW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZCgmY2hpbGQsIHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIWNoaWxkLmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxk
LmlzRmxvYXRpbmcoKSkKKyAgICAgICAgY2hpbGQucGFpbnQocGFpbnRJbmZvRm9yQ2hpbGQsIGNo
aWxkUG9pbnQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywg
YW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KLSAgICBib29sIGNoZWNrQWZ0ZXJBbHdh
eXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHlsZSgp
LT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKKyAgICBib29sIGNoZWNrQWZ0ZXJBbHdh
eXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLnN0eWxlKCkt
PnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgIGlmIChjaGVja0FmdGVyQWx3YXlz
Ci0gICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludElu
Zm8ucmVjdC55KCkKLSAgICAgICAgJiYgKGFic29sdXRlQ2hpbGRZICsgY2hpbGQtPmhlaWdodCgp
KSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewotICAgICAgICB2aWV3KCkuc2V0QmVzdFRydW5j
YXRlZEF0KGFic29sdXRlQ2hpbGRZICsgY2hpbGQtPmhlaWdodCgpICsgbWF4PExheW91dFVuaXQ+
KDAsIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpKSwgdGhpcywgdHJ1ZSk7CisgICAgICAg
ICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0Lnko
KQorICAgICAgICAmJiAoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC5oZWlnaHQoKSkgPCBwYWludElu
Zm8ucmVjdC5tYXhZKCkpIHsKKyAgICAgICAgdmlldygpLnNldEJlc3RUcnVuY2F0ZWRBdChhYnNv
bHV0ZUNoaWxkWSArIGNoaWxkLmhlaWdodCgpICsgbWF4PExheW91dFVuaXQ+KDAsIGNoaWxkLmNv
bGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTk4LDI0ICsyNTk0LDI0IEBA
IEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0c0YKICAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkpCiAgICAgICAgIG9mZnNldEZyb21SZXBhaW50Q29udGFpbmVyIC09IHNjcm9s
bGVkQ29udGVudE9mZnNldCgpOwogCi0gICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBj
YWNoZSh0aGlzKTsKKyAgICBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzIGNhY2hlKCp0aGlz
KTsKICAgICBMYXlvdXRVbml0IGxhc3RUb3AgPSAwOwotICAgIExheW91dFVuaXQgbGFzdExlZnQg
PSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wLCBjYWNoZSk7Ci0gICAg
TGF5b3V0VW5pdCBsYXN0UmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQodGhpcywg
bGFzdFRvcCwgY2FjaGUpOworICAgIExheW91dFVuaXQgbGFzdExlZnQgPSBsb2dpY2FsTGVmdFNl
bGVjdGlvbk9mZnNldCgqdGhpcywgbGFzdFRvcCwgY2FjaGUpOworICAgIExheW91dFVuaXQgbGFz
dFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KCp0aGlzLCBsYXN0VG9wLCBjYWNo
ZSk7CiAgICAgCi0gICAgcmV0dXJuIHNlbGVjdGlvbkdhcHModGhpcywgb2Zmc2V0RnJvbVJlcGFp
bnRDb250YWluZXIsIEludFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgY2Fj
aGUpOworICAgIHJldHVybiBzZWxlY3Rpb25HYXBzKCp0aGlzLCBvZmZzZXRGcm9tUmVwYWludENv
bnRhaW5lciwgSW50U2l6ZSgpLCBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0LCBjYWNoZSk7
CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHNob3VsZFBh
aW50U2VsZWN0aW9uR2FwcygpICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdy
b3VuZCkgewotICAgICAgICBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzIGNhY2hlKHRoaXMp
OworICAgICAgICBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzIGNhY2hlKCp0aGlzKTsKICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0VG9wID0gMDsKLSAgICAgICAgTGF5b3V0VW5pdCBsYXN0TGVm
dCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3AsIGNhY2hlKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0UmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQo
dGhpcywgbGFzdFRvcCwgY2FjaGUpOworICAgICAgICBMYXlvdXRVbml0IGxhc3RMZWZ0ID0gbG9n
aWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoKnRoaXMsIGxhc3RUb3AsIGNhY2hlKTsKKyAgICAgICAg
TGF5b3V0VW5pdCBsYXN0UmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoKnRoaXMs
IGxhc3RUb3AsIGNhY2hlKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0
c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHModGhpcywgcGFpbnRPZmZzZXQsIExheW91dFNpemUoKSwg
bGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgY2FjaGUsICZwYWludEluZm8pOworICAgICAg
ICBMYXlvdXRSZWN0IGdhcFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2FwcygqdGhpcywgcGFpbnRP
ZmZzZXQsIExheW91dFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgY2FjaGUs
ICZwYWludEluZm8pOwogICAgICAgICBpZiAoIWdhcFJlY3RzQm91bmRzLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCkpIHsK
ICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKQEAg
LTI2NDQsMTQgKzI2NDAsMTQgQEAgc3RhdGljIHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3Rz
KGNvbgogICAgIH0KIH0KIAotTGF5b3V0VW5pdCBibG9ja0RpcmVjdGlvbk9mZnNldChSZW5kZXJC
bG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrKQor
TGF5b3V0VW5pdCBibG9ja0RpcmVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBj
b25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrKQogewotICAgIHJldHVybiByb290
QmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJsb2NrLmhl
aWdodCgpIDogb2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpOworICAgIHJldHVybiByb290Qmxv
Y2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0
KCkgOiBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCk7CiB9CiAKLUxheW91dFVuaXQgaW5saW5l
RGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290QmxvY2spCitMYXlvdXRVbml0IGlubGluZURpcmVjdGlvbk9mZnNldChS
ZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrKQogewotICAgIHJldHVybiByb290QmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgOiBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdo
dCgpOworICAgIHJldHVybiByb290QmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9m
ZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSA6IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCk7
CiB9CiAKIExheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91
dFJlY3QmIGxvZ2ljYWxSZWN0KQpAQCAtMjY2Niw3ICsyNjYyLDcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJCbG9jazo6bG9naWNhbFJlY3RUb1BoeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNv
bnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRT
aXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlv
bkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ss
CiAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2Fs
TGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlv
bk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAg
IC8vIElNUE9SVEFOVDogQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGludGVuZCBmb3IgcGFp
bnRpbmcgdG8gaGFwcGVuIG5lZWQgdG8gZG8gYSBzYXZlL3Jlc3RvcmUuCkBAIC0yNjc0LDcgKzI2
NzAsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgaWYg
KHBhaW50SW5mbykgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2xpcCBvdXQgb3Zl
cmZsb3cgZm9yIHBvc2l0aW9uZWQgb2JqZWN0cy4gIFdlIGp1c3Qgc3RpY2sgdG8gdGhlIGJvcmRl
ciBib3guCiAgICAgICAgIExheW91dFJlY3QgZmxpcHBlZEJsb2NrUmVjdChvZmZzZXRGcm9tUm9v
dEJsb2NrLndpZHRoKCksIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCksIHdpZHRoKCksIGhl
aWdodCgpKTsKLSAgICAgICAgcm9vdEJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZEJs
b2NrUmVjdCk7CisgICAgICAgIHJvb3RCbG9jay5mbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZEJs
b2NrUmVjdCk7CiAgICAgICAgIGZsaXBwZWRCbG9ja1JlY3QubW92ZUJ5KHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24pOwogICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZv
LCBmbGlwcGVkQmxvY2tSZWN0LmxvY2F0aW9uKCksIHBvc2l0aW9uZWRPYmplY3RzKCkpOwogICAg
ICAgICBpZiAoaXNCb2R5KCkgfHwgaXNSb290KCkpIC8vIFRoZSA8Ym9keT4gbXVzdCBtYWtlIHN1
cmUgdG8gZXhhbWluZSBpdHMgY29udGFpbmluZ0Jsb2NrJ3MgcG9zaXRpb25lZCBvYmplY3RzLgpA
QCAtMjcwMyw3ICsyNjk5LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMo
UmVuZAogICAgICAgICByZXN1bHQgPSBibG9ja1NlbGVjdGlvbkdhcHMocm9vdEJsb2NrLCByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRGcm9tUm9vdEJsb2NrLCBsYXN0TG9naWNhbFRv
cCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBjYWNoZSwgcGFpbnRJbmZvKTsK
IAogICAgIC8vIEdvIGFoZWFkIGFuZCBmaWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWxsIHRoZSB3YXkg
dG8gdGhlIGJvdHRvbSBvZiBvdXIgYmxvY2sgaWYgdGhlIHNlbGVjdGlvbiBleHRlbmRzIHBhc3Qg
b3VyIGJsb2NrLgotICAgIGlmIChyb290QmxvY2sgPT0gdGhpcyAmJiAoc2VsZWN0aW9uU3RhdGUo
KSAhPSBTZWxlY3Rpb25Cb3RoICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uRW5kKSkg
eworICAgIGlmICgmcm9vdEJsb2NrID09IHRoaXMgJiYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2Vs
ZWN0aW9uQm90aCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkVuZCkpIHsKICAgICAg
ICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJsb2NrU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywKICAgICAgICAgICAgIGxh
c3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmlnaHQsIGxvZ2ljYWxI
ZWlnaHQoKSwgY2FjaGUsIHBhaW50SW5mbykpOwogICAgIH0KQEAgLTI3MTEsMTMgKzI3MDcsMTMg
QEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUdhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXBzKFJl
bmRlckJsb2NrKiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRTaXplJiwgTGF5b3V0
VW5pdCYsIExheW91dFVuaXQmLCBMYXlvdXRVbml0JiwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9m
ZnNldENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopCitHYXBSZWN0cyBSZW5kZXJCbG9jazo6aW5s
aW5lU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3Qg
TGF5b3V0U2l6ZSYsIExheW91dFVuaXQmLCBMYXlvdXRVbml0JiwgTGF5b3V0VW5pdCYsIGNvbnN0
IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQYWludEluZm8qKQogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBHYXBSZWN0cygpOwogfQogCi1HYXBS
ZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290Qmxv
Y2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBM
YXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJs
b2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2lu
dCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJv
bVJvb3RCbG9jaywKICAgICBMYXlvdXRVbml0JiBsYXN0TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYg
bGFzdExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBMb2dp
Y2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJiBjYWNoZSwgY29uc3QgUGFpbnRJbmZvKiBwYWludElu
Zm8pCiB7CiAgICAgR2FwUmVjdHMgcmVzdWx0OwpAQCAtMjcyOSw3ICsyNzI1LDcgQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcwogICAgIGlmICghY3VycikKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMgY2hp
bGRDYWNoZSh0aGlzLCBjYWNoZSk7CisgICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBj
aGlsZENhY2hlKCp0aGlzLCBjYWNoZSk7CiAKICAgICBmb3IgKGJvb2wgc2F3U2VsZWN0aW9uRW5k
ID0gZmFsc2U7IGN1cnIgJiYgIXNhd1NlbGVjdGlvbkVuZDsgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nQm94KCkpIHsKICAgICAgICAgU2VsZWN0aW9uU3RhdGUgY2hpbGRTdGF0ZSA9IGN1cnItPnNl
bGVjdGlvblN0YXRlKCk7CkBAIC0yNzg2LDcgKzI3ODIsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6YmxvY2tTZWxlY3Rpb25HYXBzCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTGF5b3V0UmVj
dCBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywg
Y29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91
dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpibG9j
a1NlbGVjdGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYg
cm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJv
b3RCbG9jaywKICAgICBMYXlvdXRVbml0IGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxhc3RM
b2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsYXN0TG9naWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxvZ2lj
YWxCb3R0b20sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNhY2hlLCBjb25z
dCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBs
YXN0TG9naWNhbFRvcDsKQEAgLTI4MDEsMTMgKzI3OTcsMTMgQEAgTGF5b3V0UmVjdCBSZW5kZXJC
bG9jazo6YmxvY2tTZWxlY3Rpb25HYQogICAgIGlmIChsb2dpY2FsV2lkdGggPD0gMCkKICAgICAg
ICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAgIExheW91dFJlY3QgZ2FwUmVjdCA9IHJvb3RC
bG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9u
LCBMYXlvdXRSZWN0KGxvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9wLCBsb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2subG9naWNhbFJl
Y3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRSZWN0KGxv
Z2ljYWxMZWZ0LCBsb2dpY2FsVG9wLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKICAg
ICBpZiAocGFpbnRJbmZvKQogICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KHBp
eGVsU25hcHBlZEludFJlY3QoZ2FwUmVjdCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBz
dHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIHJldHVybiBnYXBSZWN0OwogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9v
dEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29u
c3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKK0xheW91dFJlY3QgUmVuZGVyQmxv
Y2s6OmxvZ2ljYWxMZWZ0U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0
IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgIFJlbmRlck9iamVjdCogc2VsT2JqLCBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNh
bEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0
IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNh
bFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9j
aykgKyBsb2dpY2FsVG9wOwpAQCAtMjgxOCwxMyArMjgxNCwxMyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjCiAgICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8
PSAwKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgTGF5b3V0UmVjdCBnYXBS
ZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24sIExheW91dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RCbG9ja0xv
Z2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOworICAgIExh
eW91dFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQs
IHJvb3RCbG9ja0xvZ2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCkpOwogICAgIGlmIChwYWludEluZm8pCiAgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+Zmls
bFJlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChnYXBSZWN0KSwgc2VsT2JqLT5zZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSwgc2VsT2JqLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIHJldHVy
biBnYXBSZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxl
Y3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290Qmxv
Y2ssCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25HYXAoUmVu
ZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgUmVu
ZGVyT2JqZWN0KiBzZWxPYmosIExheW91dFVuaXQgbG9naWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxv
Z2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlv
bk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAg
IExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KHJv
b3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsVG9wOwpAQCAtMjgzNSw3ICsy
ODMxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZQogICAgIGlm
IChyb290QmxvY2tMb2dpY2FsV2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3Qo
KTsKIAotICAgIExheW91dFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1Bo
eXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRSZWN0KHJvb3RCbG9j
a0xvZ2ljYWxMZWZ0LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tMb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2subG9n
aWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRS
ZWN0KHJvb3RCbG9ja0xvZ2ljYWxMZWZ0LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tM
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKICAgICBpZiAocGFpbnRJbmZvKQogICAgICAg
ICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KHBpeGVsU25hcHBlZEludFJlY3QoZ2FwUmVj
dCksIHNlbE9iai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHNlbE9iai0+c3R5bGUoKS0+
Y29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKQEAgLTI4NTIsNDYgKzI4NDgsNDYg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Z2V0U2VsZWN0aW9uR2FwSW5mbyhTZQogICAgICAgICAgICAg
ICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmICFsdHIpOwogfQogCi1M
YXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJC
bG9jayogcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2VsZWN0
aW9uT2Zmc2V0Q2FjaGVzJiBjYWNoZSkKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExheW91dFVuaXQgcG9z
aXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNhY2hlKQogewogICAg
IExheW91dFVuaXQgbG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRp
b24sIGZhbHNlKTsKICAgICBpZiAobG9naWNhbExlZnQgPT0gbG9naWNhbExlZnRPZmZzZXRGb3JD
b250ZW50KCkpIHsKLSAgICAgICAgaWYgKHJvb3RCbG9jayAhPSB0aGlzKSAvLyBUaGUgYm9yZGVy
IGNhbiBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxv
Y2soKS4KLSAgICAgICAgICAgIHJldHVybiBjYWNoZS5jb250YWluaW5nQmxvY2tJbmZvKHRoaXMp
LmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24gKyBsb2dpY2Fs
VG9wKCkpOworICAgICAgICBpZiAoJnJvb3RCbG9jayAhPSB0aGlzKSAvLyBUaGUgYm9yZGVyIGNh
biBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxvY2so
KS4KKyAgICAgICAgICAgIHJldHVybiBjYWNoZS5jb250YWluaW5nQmxvY2tJbmZvKCp0aGlzKS5s
b2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIHBvc2l0aW9uICsgbG9naWNhbFRv
cCgpKTsKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0OwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFJlbmRlckJsb2NrKiBjYiA9IHRoaXM7Ci0gICAgICAgIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25P
ZmZzZXRDYWNoZXMqIGN1cnJlbnRDYWNoZSA9ICZjYWNoZTsKLSAgICAgICAgd2hpbGUgKGNiICE9
IHJvb3RCbG9jaykgewotICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gY2ItPmxvZ2ljYWxMZWZ0
KCk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50Q2FjaGUpOwotICAgICAgICAgICAgY29u
c3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlczo6Q29udGFpbmluZ0Jsb2NrSW5mbyYgaW5m
byA9IGN1cnJlbnRDYWNoZS0+Y29udGFpbmluZ0Jsb2NrSW5mbyhjYik7Ci0gICAgICAgICAgICBj
YiA9IGluZm8uYmxvY2soKTsKLSAgICAgICAgICAgIGN1cnJlbnRDYWNoZSA9IGluZm8uY2FjaGUo
KTsKLSAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlckJsb2NrKiBjYiA9IHRoaXM7CisgICAg
Y29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyogY3VycmVudENhY2hlID0gJmNhY2hl
OworICAgIHdoaWxlIChjYiAhPSAmcm9vdEJsb2NrKSB7CisgICAgICAgIGxvZ2ljYWxMZWZ0ICs9
IGNiLT5sb2dpY2FsTGVmdCgpOworCisgICAgICAgIEFTU0VSVChjdXJyZW50Q2FjaGUpOworICAg
ICAgICBhdXRvIGluZm8gPSBjdXJyZW50Q2FjaGUtPmNvbnRhaW5pbmdCbG9ja0luZm8oKmNiKTsK
KyAgICAgICAgY2IgPSBpbmZvLmJsb2NrKCk7CisgICAgICAgIGN1cnJlbnRDYWNoZSA9IGluZm8u
Y2FjaGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0OwogfQogCi1MYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNl
dENhY2hlcyYgY2FjaGUpCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxl
Y3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwg
Y29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUpCiB7CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBm
YWxzZSk7CiAgICAgaWYgKGxvZ2ljYWxSaWdodCA9PSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250
ZW50KCkpIHsKLSAgICAgICAgaWYgKHJvb3RCbG9jayAhPSB0aGlzKSAvLyBUaGUgYm9yZGVyIGNh
biBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxvY2so
KS4KLSAgICAgICAgICAgIHJldHVybiBjYWNoZS5jb250YWluaW5nQmxvY2tJbmZvKHRoaXMpLmxv
Z2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIHBvc2l0aW9uICsgbG9naWNhbFRv
cCgpKTsKKyAgICAgICAgaWYgKCZyb290QmxvY2sgIT0gdGhpcykgLy8gVGhlIGJvcmRlciBjYW4g
cG90ZW50aWFsbHkgYmUgZnVydGhlciBleHRlbmRlZCBieSBvdXIgY29udGFpbmluZ0Jsb2NrKCku
CisgICAgICAgICAgICByZXR1cm4gY2FjaGUuY29udGFpbmluZ0Jsb2NrSW5mbygqdGhpcykubG9n
aWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgcG9zaXRpb24gKyBsb2dpY2FsVG9w
KCkpOwogICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0OwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFJlbmRlckJsb2NrKiBjYiA9IHRoaXM7Ci0gICAgICAgIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25P
ZmZzZXRDYWNoZXMqIGN1cnJlbnRDYWNoZSA9ICZjYWNoZTsKLSAgICAgICAgd2hpbGUgKGNiICE9
IHJvb3RCbG9jaykgewotICAgICAgICAgICAgbG9naWNhbFJpZ2h0ICs9IGNiLT5sb2dpY2FsTGVm
dCgpOwotCi0gICAgICAgICAgICBBU1NFUlQoY3VycmVudENhY2hlKTsKLSAgICAgICAgICAgIGNv
bnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXM6OkNvbnRhaW5pbmdCbG9ja0luZm8mIGlu
Zm8gPSBjdXJyZW50Q2FjaGUtPmNvbnRhaW5pbmdCbG9ja0luZm8oY2IpOwotICAgICAgICAgICAg
Y2IgPSBpbmZvLmJsb2NrKCk7Ci0gICAgICAgICAgICBjdXJyZW50Q2FjaGUgPSBpbmZvLmNhY2hl
KCk7Ci0gICAgICAgIH0KKyAgICB9CisKKyAgICBSZW5kZXJCbG9jayogY2IgPSB0aGlzOworICAg
IGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMqIGN1cnJlbnRDYWNoZSA9ICZjYWNo
ZTsKKyAgICB3aGlsZSAoY2IgIT0gJnJvb3RCbG9jaykgeworICAgICAgICBsb2dpY2FsUmlnaHQg
Kz0gY2ItPmxvZ2ljYWxMZWZ0KCk7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRDYWNoZSk7Cisg
ICAgICAgIGF1dG8gaW5mbyA9IGN1cnJlbnRDYWNoZS0+Y29udGFpbmluZ0Jsb2NrSW5mbygqY2Ip
OworICAgICAgICBjYiA9IGluZm8uYmxvY2soKTsKKyAgICAgICAgY3VycmVudENhY2hlID0gaW5m
by5jYWNoZSgpOwogICAgIH0KICAgICByZXR1cm4gbG9naWNhbFJpZ2h0OwogfQpAQCAtMjkyOCw3
ICsyOTI0LDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpibG9ja0JlZm9yZVdpdAogICAg
IHJldHVybiBiZWZvcmVCbG9jazsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0SW50b1Ry
YWNrZWRSZW5kZXJlck1hcHMoUmVuZGVyQm94KiBkZXNjZW5kYW50LCBUcmFja2VkRGVzY2VuZGFu
dHNNYXAqJiBkZXNjZW5kYW50c01hcCwgVHJhY2tlZENvbnRhaW5lck1hcComIGNvbnRhaW5lck1h
cCkKK3ZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKFJlbmRl
ckJveCYgZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFwKiYgZGVzY2VuZGFudHNNYXAs
IFRyYWNrZWRDb250YWluZXJNYXAqJiBjb250YWluZXJNYXApCiB7CiAgICAgaWYgKCFkZXNjZW5k
YW50c01hcCkgewogICAgICAgICBkZXNjZW5kYW50c01hcCA9IG5ldyBUcmFja2VkRGVzY2VuZGFu
dHNNYXA7CkBAIC0yOTQwLDMzICsyOTM2LDMyIEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydElu
dG9UcmFja2VkUmVuZGUKICAgICAgICAgZGVzY2VuZGFudFNldCA9IG5ldyBUcmFja2VkUmVuZGVy
ZXJMaXN0SGFzaFNldDsKICAgICAgICAgZGVzY2VuZGFudHNNYXAtPnNldCh0aGlzLCBhZG9wdFB0
cihkZXNjZW5kYW50U2V0KSk7CiAgICAgfQotICAgIGJvb2wgYWRkZWQgPSBkZXNjZW5kYW50U2V0
LT5hZGQoZGVzY2VuZGFudCkuaXNOZXdFbnRyeTsKKyAgICBib29sIGFkZGVkID0gZGVzY2VuZGFu
dFNldC0+YWRkKCZkZXNjZW5kYW50KS5pc05ld0VudHJ5OwogICAgIGlmICghYWRkZWQpIHsKLSAg
ICAgICAgQVNTRVJUKGNvbnRhaW5lck1hcC0+Z2V0KGRlc2NlbmRhbnQpKTsKLSAgICAgICAgQVNT
RVJUKGNvbnRhaW5lck1hcC0+Z2V0KGRlc2NlbmRhbnQpLT5jb250YWlucyh0aGlzKSk7CisgICAg
ICAgIEFTU0VSVChjb250YWluZXJNYXAtPmdldCgmZGVzY2VuZGFudCkpOworICAgICAgICBBU1NF
UlQoY29udGFpbmVyTWFwLT5nZXQoJmRlc2NlbmRhbnQpLT5jb250YWlucyh0aGlzKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgSGFzaFNldDxSZW5kZXJCbG9jayo+KiBjb250
YWluZXJTZXQgPSBjb250YWluZXJNYXAtPmdldChkZXNjZW5kYW50KTsKKyAgICBIYXNoU2V0PFJl
bmRlckJsb2NrKj4qIGNvbnRhaW5lclNldCA9IGNvbnRhaW5lck1hcC0+Z2V0KCZkZXNjZW5kYW50
KTsKICAgICBpZiAoIWNvbnRhaW5lclNldCkgewogICAgICAgICBjb250YWluZXJTZXQgPSBuZXcg
SGFzaFNldDxSZW5kZXJCbG9jayo+OwotICAgICAgICBjb250YWluZXJNYXAtPnNldChkZXNjZW5k
YW50LCBhZG9wdFB0cihjb250YWluZXJTZXQpKTsKKyAgICAgICAgY29udGFpbmVyTWFwLT5zZXQo
JmRlc2NlbmRhbnQsIGFkb3B0UHRyKGNvbnRhaW5lclNldCkpOwogICAgIH0KICAgICBBU1NFUlQo
IWNvbnRhaW5lclNldC0+Y29udGFpbnModGhpcykpOwogICAgIGNvbnRhaW5lclNldC0+YWRkKHRo
aXMpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFw
cyhSZW5kZXJCb3gqIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComIGRlc2NlbmRh
bnRzTWFwLCBUcmFja2VkQ29udGFpbmVyTWFwKiYgY29udGFpbmVyTWFwKQordm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlRnJvbVRyYWNrZWRSZW5kZXJlck1hcHMoUmVuZGVyQm94JiBkZXNjZW5kYW50
LCBUcmFja2VkRGVzY2VuZGFudHNNYXAqJiBkZXNjZW5kYW50c01hcCwgVHJhY2tlZENvbnRhaW5l
ck1hcComIGNvbnRhaW5lck1hcCkKIHsKICAgICBpZiAoIWRlc2NlbmRhbnRzTWFwKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgT3duUHRyPEhhc2hTZXQ8UmVuZGVyQmxvY2sqPj4gY29udGFp
bmVyU2V0ID0gY29udGFpbmVyTWFwLT50YWtlKGRlc2NlbmRhbnQpOworICAgIE93blB0cjxIYXNo
U2V0PFJlbmRlckJsb2NrKj4+IGNvbnRhaW5lclNldCA9IGNvbnRhaW5lck1hcC0+dGFrZSgmZGVz
Y2VuZGFudCk7CiAgICAgaWYgKCFjb250YWluZXJTZXQpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IGNvbnRhaW5lclNldC0+
ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlbmRlckJsb2NrKj46Oml0ZXJhdG9yIGl0ID0gY29u
dGFpbmVyU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8gaXQg
PSBjb250YWluZXJTZXQtPmJlZ2luKCksIGVuZCA9IGNvbnRhaW5lclNldC0+ZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0gKml0OwogCiAg
ICAgICAgIC8vIEZJWE1FOiBEaXNhYmxpbmcgdGhpcyBhc3NlcnQgdGVtcG9yYXJpbHkgdW50aWwg
d2UgZml4IHRoZSBsYXlvdXQKQEAgLTI5NzksOCArMjk3NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZUZyb21UcmFja2VkUmVuZGUKICAgICAgICAgaWYgKGRlc2NlbmRhbnRzTWFwSXRlcmF0
b3IgPT0gZGVzY2VuZGFudHNNYXAtPmVuZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBkZXNjZW5kYW50U2V0ID0gZGVzY2VuZGFu
dHNNYXBJdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChkZXNjZW5kYW50U2V0
LT5jb250YWlucyhkZXNjZW5kYW50KSk7Ci0gICAgICAgIGRlc2NlbmRhbnRTZXQtPnJlbW92ZShk
ZXNjZW5kYW50KTsKKyAgICAgICAgQVNTRVJUKGRlc2NlbmRhbnRTZXQtPmNvbnRhaW5zKCZkZXNj
ZW5kYW50KSk7CisgICAgICAgIGRlc2NlbmRhbnRTZXQtPnJlbW92ZSgmZGVzY2VuZGFudCk7CiAg
ICAgICAgIGlmIChkZXNjZW5kYW50U2V0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBkZXNjZW5k
YW50c01hcC0+cmVtb3ZlKGRlc2NlbmRhbnRzTWFwSXRlcmF0b3IpOwogICAgIH0KQEAgLTI5OTMs
MTcgKzI5ODgsMTcgQEAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIFJlbmRlckJsb2NrOgog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRQb3NpdGlvbmVkT2Jq
ZWN0KFJlbmRlckJveCogbykKK3ZvaWQgUmVuZGVyQmxvY2s6Omluc2VydFBvc2l0aW9uZWRPYmpl
Y3QoUmVuZGVyQm94JiBvKQogewogICAgIEFTU0VSVCghaXNBbm9ueW1vdXNCbG9jaygpKTsKIAot
ICAgIGlmIChvLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICBpZiAoby5pc1JlbmRlckZsb3dU
aHJlYWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGluc2VydEludG9UcmFja2VkUmVu
ZGVyZXJNYXBzKG8sIGdQb3NpdGlvbmVkRGVzY2VuZGFudHNNYXAsIGdQb3NpdGlvbmVkQ29udGFp
bmVyTWFwKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdChS
ZW5kZXJCb3gqIG8pCit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJl
bmRlckJveCYgbykKIHsKICAgICByZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFwcyhvLCBnUG9z
aXRpb25lZERlc2NlbmRhbnRzTWFwLCBnUG9zaXRpb25lZENvbnRhaW5lck1hcCk7CiB9CkBAIC0z
MDE0LDE0ICszMDA5LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmpl
Y3QKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIFJlbmRlckJveCogcjsKLSAgICAKLSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNl
dDo6aXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKTsKLSAgICAKICAg
ICBWZWN0b3I8UmVuZGVyQm94KiwgMTY+IGRlYWRPYmplY3RzOwogCi0gICAgZm9yIChUcmFja2Vk
UmVuZGVyZXJMaXN0SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICByID0gKml0OworICAgIGZvciAo
YXV0byBpdCA9IHBvc2l0aW9uZWREZXNjZW5kYW50cy0+YmVnaW4oKSwgZW5kID0gcG9zaXRpb25l
ZERlc2NlbmRhbnRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlckJv
eCogciA9ICppdDsKICAgICAgICAgaWYgKCFvIHx8IHItPmlzRGVzY2VuZGFudE9mKG8pKSB7CiAg
ICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrU3RhdGUgPT0gTmV3Q29udGFpbmluZ0Jsb2Nr
KQogICAgICAgICAgICAgICAgIHItPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
QEAgLTMwMzksMTUgKzMwMzAsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25l
ZE9iamVjdAogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVhZE9i
amVjdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoZGVhZE9i
amVjdHMuYXQoaSkpOworICAgICAgICByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KCpkZWFkT2JqZWN0
cy5hdChpKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkZFBlcmNlbnRIZWlnaHREZXNjZW5k
YW50KFJlbmRlckJveCogZGVzY2VuZGFudCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZFBlcmNlbnRI
ZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCYgZGVzY2VuZGFudCkKIHsKICAgICBpbnNlcnRJbnRv
VHJhY2tlZFJlbmRlcmVyTWFwcyhkZXNjZW5kYW50LCBnUGVyY2VudEhlaWdodERlc2NlbmRhbnRz
TWFwLCBnUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCogZGVzY2VuZGFudCkKK3Zv
aWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCYg
ZGVzY2VuZGFudCkKIHsKICAgICByZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFwcyhkZXNjZW5k
YW50LCBnUGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLCBnUGVyY2VudEhlaWdodENvbnRhaW5l
ck1hcCk7CiB9CkBAIC0zMDYyLDE2ICszMDUzLDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc1Bl
cmNlbnRIZWlnaHRDb250YWkKICAgICByZXR1cm4gZ1BlcmNlbnRIZWlnaHRDb250YWluZXJNYXA7
CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6Omhhc1BlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRl
ckJveCogZGVzY2VuZGFudCkKK2Jvb2wgUmVuZGVyQmxvY2s6Omhhc1BlcmNlbnRIZWlnaHREZXNj
ZW5kYW50KFJlbmRlckJveCYgZGVzY2VuZGFudCkKIHsKICAgICAvLyBXZSBkb24ndCBudWxsIGNo
ZWNrIGdQZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwIHNpbmNlIHRoZSBjYWxsZXIKICAgICAvLyBh
bHJlYWR5IGVuc3VyZXMgdGhpcyBhbmQgd2UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24g
ZXZlcnkKICAgICAvLyBkZXNjZW5kYW50IGluIGNsZWFyUGVyY2VudEhlaWdodERlc2NlbmRhbnRz
RnJvbSgpLgogICAgIEFTU0VSVChnUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCk7Ci0gICAgcmV0
dXJuIGdQZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwLT5jb250YWlucyhkZXNjZW5kYW50KTsKKyAg
ICByZXR1cm4gZ1BlcmNlbnRIZWlnaHRDb250YWluZXJNYXAtPmNvbnRhaW5zKCZkZXNjZW5kYW50
KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnRJ
Zk5lZWRlZChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQ
ZXJjZW50SGVpZ2h0RGVzY2VuZGFudElmTmVlZGVkKFJlbmRlckJveCYgZGVzY2VuZGFudCkKIHsK
ICAgICAvLyBXZSBxdWVyeSB0aGUgbWFwIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBsb29raW5nIGF0
IHN0eWxlJ3MKICAgICAvLyBsb2dpY2FsSGVpZ2h0KCkvbG9naWNhbE1pbkhlaWdodCgpL2xvZ2lj
YWxNYXhIZWlnaHQoKSBzaW5jZSB0aG9zZQpAQCAtMzA4NSwxNCArMzA3NiwxNCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzCiAgICAgcmVtb3ZlUGVyY2VudEhlaWdo
dERlc2NlbmRhbnQoZGVzY2VuZGFudCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyUGVy
Y2VudEhlaWdodERlc2NlbmRhbnRzRnJvbShSZW5kZXJCb3gqIHBhcmVudCkKK3ZvaWQgUmVuZGVy
QmxvY2s6OmNsZWFyUGVyY2VudEhlaWdodERlc2NlbmRhbnRzRnJvbShSZW5kZXJCb3gmIHBhcmVu
dCkKIHsKICAgICBBU1NFUlQoZ1BlcmNlbnRIZWlnaHRDb250YWluZXJNYXApOwotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0SW5QcmVPcmRlcihwYXJlbnQpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dEluUHJlT3Jk
ZXIoJnBhcmVudCkpIHsKICAgICAgICAgaWYgKCFjdXJyLT5pc0JveCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgCi0gICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7
CisgICAgICAgIFJlbmRlckJveCYgYm94ID0gdG9SZW5kZXJCb3goKmN1cnIpOwogICAgICAgICBp
ZiAoIWhhc1BlcmNlbnRIZWlnaHREZXNjZW5kYW50KGJveCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIApAQCAtMzM5Miw2MiArMzM4Myw2MCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JD
b2x1bW5SZWN0KExhCiAKIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIGlmIChj
aGlsZHJlbklubGluZSgpICYmICFpc1RhYmxlKCkpIHsKLSAgICAgICAgaWYgKGhpdFRlc3RJbmxp
bmVDaGlsZHJlbihyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSAmJiAh
aXNUYWJsZSgpKQorICAgICAgICByZXR1cm4gaGl0VGVzdElubGluZUNoaWxkcmVuKHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RB
Y3Rpb24pOworCisgICAgLy8gSGl0IHRlc3Qgb3VyIGNoaWxkcmVuLgorICAgIEhpdFRlc3RBY3Rp
b24gY2hpbGRIaXRUZXN0ID0gaGl0VGVzdEFjdGlvbjsKKyAgICBpZiAoaGl0VGVzdEFjdGlvbiA9
PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRzKQorICAgICAgICBjaGlsZEhpdFRlc3QgPSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQ7CisgICAgZm9yIChhdXRvIGNoaWxkID0gbGFzdENo
aWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmdCb3goKSkgewor
ICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hp
bGQoY2hpbGQsIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBj
aGlsZEhpdFRlc3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gSGl0IHRlc3Qgb3VyIGNoaWxkcmVuLgotICAgICAgICBIaXRUZXN0QWN0aW9uIGNo
aWxkSGl0VGVzdCA9IGhpdFRlc3RBY3Rpb247Ci0gICAgICAgIGlmIChoaXRUZXN0QWN0aW9uID09
IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpCi0gICAgICAgICAgICBjaGlsZEhpdFRlc3Qg
PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQ7Ci0gICAgICAgIGZvciAoUmVuZGVyQm94KiBj
aGlsZCA9IGxhc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJs
aW5nQm94KCkpIHsKLSAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9y
V3JpdGluZ01vZGVGb3JDaGlsZChjaGlsZCwgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgICAgICAg
ICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRp
bmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjaGlsZFBvaW50LCBjaGlsZEhpdFRlc3QpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNFZGl0aW5nQm91bmRhcnkoUmVuZGVyRWxlbWVudCogYW5jZXN0b3Is
IFJlbmRlck9iamVjdCogY2hpbGQpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNFZGl0aW5nQm91bmRh
cnkoUmVuZGVyRWxlbWVudCogYW5jZXN0b3IsIFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAg
QVNTRVJUKCFhbmNlc3RvciB8fCBhbmNlc3Rvci0+bm9uUHNldWRvRWxlbWVudCgpKTsKLSAgICBB
U1NFUlQoY2hpbGQgJiYgY2hpbGQtPm5vblBzZXVkb05vZGUoKSk7CisgICAgQVNTRVJUKGNoaWxk
Lm5vblBzZXVkb05vZGUoKSk7CiAgICAgcmV0dXJuICFhbmNlc3RvciB8fCAhYW5jZXN0b3ItPnBh
cmVudCgpIHx8IChhbmNlc3Rvci0+aGFzTGF5ZXIoKSAmJiBhbmNlc3Rvci0+cGFyZW50KCktPmlz
UmVuZGVyVmlldygpKQotICAgICAgICB8fCBhbmNlc3Rvci0+bm9uUHNldWRvRWxlbWVudCgpLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSA9PSBjaGlsZC0+bm9uUHNldWRvTm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKTsKKyAgICAgICAgfHwgYW5jZXN0b3ItPm5vblBzZXVkb0VsZW1lbnQoKS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkgPT0gY2hpbGQubm9uUHNldWRvTm9kZSgpLT5yZW5kZXJlcklzRWRp
dGFibGUoKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdvIG9uIFJlbmRl
ck9iamVjdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuIFRoZW4KIC8vIGFsbCBjYXNlcyBpbiB3aGlj
aCBwb3NpdGlvbkZvclBvaW50IHJlY3VycyBjb3VsZCBjYWxsIHRoaXMgaW5zdGVhZCB0bwogLy8g
cHJldmVudCBjcm9zc2luZyBlZGl0YWJsZSBib3VuZGFyaWVzLiBUaGlzIHdvdWxkIHJlcXVpcmUg
bWFueSB0ZXN0cy4KLVZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGluZ0Vk
aXRpbmdCb3VuZGFyaWVzKFJlbmRlckJsb2NrKiBwYXJlbnQsIFJlbmRlckJveCogY2hpbGQsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluUGFyZW50Q29vcmRpbmF0ZXMpCitWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyhSZW5kZXJCbG9j
ayYgcGFyZW50LCBSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJblBh
cmVudENvb3JkaW5hdGVzKQogewotICAgIExheW91dFBvaW50IGNoaWxkTG9jYXRpb24gPSBjaGls
ZC0+bG9jYXRpb24oKTsKLSAgICBpZiAoY2hpbGQtPmlzSW5GbG93UG9zaXRpb25lZCgpKQotICAg
ICAgICBjaGlsZExvY2F0aW9uICs9IGNoaWxkLT5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbigpOwor
ICAgIExheW91dFBvaW50IGNoaWxkTG9jYXRpb24gPSBjaGlsZC5sb2NhdGlvbigpOworICAgIGlm
IChjaGlsZC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgY2hpbGRMb2NhdGlvbiArPSBj
aGlsZC5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbigpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
d3JvbmcgaWYgdGhlIGNoaWxkJ3Mgd3JpdGluZy1tb2RlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBw
YXJlbnQncy4KICAgICBMYXlvdXRQb2ludCBwb2ludEluQ2hpbGRDb29yZGluYXRlcyh0b0xheW91
dFBvaW50KHBvaW50SW5QYXJlbnRDb29yZGluYXRlcyAtIGNoaWxkTG9jYXRpb24pKTsKIAogICAg
IC8vIElmIHRoaXMgaXMgYW4gYW5vbnltb3VzIHJlbmRlcmVyLCB3ZSBqdXN0IHJlY3VyIG5vcm1h
bGx5Ci0gICAgRWxlbWVudCogY2hpbGRFbGVtZW50PSBjaGlsZC0+bm9uUHNldWRvRWxlbWVudCgp
OworICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudD0gY2hpbGQubm9uUHNldWRvRWxlbWVudCgpOwog
ICAgIGlmICghY2hpbGRFbGVtZW50KQotICAgICAgICByZXR1cm4gY2hpbGQtPnBvc2l0aW9uRm9y
UG9pbnQocG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXMpOworICAgICAgICByZXR1cm4gY2hpbGQucG9z
aXRpb25Gb3JQb2ludChwb2ludEluQ2hpbGRDb29yZGluYXRlcyk7CiAKICAgICAvLyBPdGhlcndp
c2UsIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBlZGl0YWJpbGl0eSBvZiB0aGUgcGFyZW50IGFu
ZCBjaGlsZCBhZ3JlZS4KICAgICAvLyBJZiB0aGV5IGRvbid0IGFncmVlLCB0aGVuIHdlIHJldHVy
biBhIHZpc2libGUgcG9zaXRpb24ganVzdCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaWxkCi0gICAg
UmVuZGVyRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnQ7CisgICAgUmVuZGVyRWxlbWVudCogYW5j
ZXN0b3IgPSAmcGFyZW50OwogICAgIHdoaWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3ItPm5vblBz
ZXVkb0VsZW1lbnQoKSkKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7CiAK
ICAgICAvLyBJZiB3ZSBjYW4ndCBmaW5kIGFuIGFuY2VzdG9yIHRvIGNoZWNrIGVkaXRhYmlsaXR5
IG9uLCBvciBlZGl0YWJpbGl0eSBpcyB1bmNoYW5nZWQsIHdlIHJlY3VyIGxpa2Ugbm9ybWFsCiAg
ICAgaWYgKGlzRWRpdGluZ0JvdW5kYXJ5KGFuY2VzdG9yLCBjaGlsZCkpCi0gICAgICAgIHJldHVy
biBjaGlsZC0+cG9zaXRpb25Gb3JQb2ludChwb2ludEluQ2hpbGRDb29yZGluYXRlcyk7CisgICAg
ICAgIHJldHVybiBjaGlsZC5wb3NpdGlvbkZvclBvaW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVz
KTsKIAogICAgIC8vIE90aGVyd2lzZSByZXR1cm4gYmVmb3JlIG9yIGFmdGVyIHRoZSBjaGlsZCwg
ZGVwZW5kaW5nIG9uIGlmIHRoZSBjbGljayB3YXMgdG8gdGhlIGxvZ2ljYWwgbGVmdCBvciBsb2dp
Y2FsIHJpZ2h0IG9mIHRoZSBjaGlsZAotICAgIExheW91dFVuaXQgY2hpbGRNaWRkbGUgPSBwYXJl
bnQtPmxvZ2ljYWxXaWR0aEZvckNoaWxkKGNoaWxkKSAvIDI7Ci0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdCA9IHBhcmVudC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5DaGls
ZENvb3JkaW5hdGVzLngoKSA6IHBvaW50SW5DaGlsZENvb3JkaW5hdGVzLnkoKTsKKyAgICBMYXlv
dXRVbml0IGNoaWxkTWlkZGxlID0gcGFyZW50LmxvZ2ljYWxXaWR0aEZvckNoaWxkKGNoaWxkKSAv
IDI7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHBhcmVudC5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gcG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXMueCgpIDogcG9pbnRJbkNoaWxkQ29v
cmRpbmF0ZXMueSgpOwogICAgIGlmIChsb2dpY2FsTGVmdCA8IGNoaWxkTWlkZGxlKQogICAgICAg
ICByZXR1cm4gYW5jZXN0b3ItPmNyZWF0ZVZpc2libGVQb3NpdGlvbihjaGlsZEVsZW1lbnQtPm5v
ZGVJbmRleCgpLCBET1dOU1RSRUFNKTsKICAgICByZXR1cm4gYW5jZXN0b3ItPmNyZWF0ZVZpc2li
bGVQb3NpdGlvbihjaGlsZEVsZW1lbnQtPm5vZGVJbmRleCgpICsgMSwgVVBTVFJFQU0pOwpAQCAt
MzQ1OSw5ICszNDQ4LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZv
cgogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKFJlbmRlckJveCogYm94KQorc3RhdGljIGlubGluZSBi
b29sIGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKFJlbmRlckJveCYgYm94KQogewotICAgIHJldHVy
biBib3gtPmhlaWdodCgpICYmIGJveC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUg
JiYgIWJveC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpOworICAgIHJldHVybiBi
b3guaGVpZ2h0KCkgJiYgYm94LnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFi
b3guaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
KQpAQCAtMzQ5MCwyMyArMzQ3OSwyMyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBv
c2l0aW9uRm9yCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxk
cmVuKHBvaW50SW5Mb2dpY2FsQ29udGVudHMpOwogCiAgICAgUmVuZGVyQm94KiBsYXN0Q2FuZGlk
YXRlQm94ID0gbGFzdENoaWxkQm94KCk7Ci0gICAgd2hpbGUgKGxhc3RDYW5kaWRhdGVCb3ggJiYg
IWlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKGxhc3RDYW5kaWRhdGVCb3gpKQorICAgIHdoaWxlIChs
YXN0Q2FuZGlkYXRlQm94ICYmICFpc0NoaWxkSGl0VGVzdENhbmRpZGF0ZSgqbGFzdENhbmRpZGF0
ZUJveCkpCiAgICAgICAgIGxhc3RDYW5kaWRhdGVCb3ggPSBsYXN0Q2FuZGlkYXRlQm94LT5wcmV2
aW91c1NpYmxpbmdCb3goKTsKIAogICAgIGJvb2wgYmxvY2tzQXJlRmxpcHBlZCA9IHN0eWxlKCkt
PmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CiAgICAgaWYgKGxhc3RDYW5kaWRhdGVCb3gp
IHsKLSAgICAgICAgaWYgKHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpID4gbG9naWNhbFRvcEZv
ckNoaWxkKGxhc3RDYW5kaWRhdGVCb3gpCi0gICAgICAgICAgICB8fCAoIWJsb2Nrc0FyZUZsaXBw
ZWQgJiYgcG9pbnRJbkxvZ2ljYWxDb250ZW50cy55KCkgPT0gbG9naWNhbFRvcEZvckNoaWxkKGxh
c3RDYW5kaWRhdGVCb3gpKSkKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50UmVz
cGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKHRoaXMsIGxhc3RDYW5kaWRhdGVCb3gsIHBvaW50SW5D
b250ZW50cyk7CisgICAgICAgIGlmIChwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSA+IGxvZ2lj
YWxUb3BGb3JDaGlsZCgqbGFzdENhbmRpZGF0ZUJveCkKKyAgICAgICAgICAgIHx8ICghYmxvY2tz
QXJlRmxpcHBlZCAmJiBwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSA9PSBsb2dpY2FsVG9wRm9y
Q2hpbGQoKmxhc3RDYW5kaWRhdGVCb3gpKSkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkZv
clBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKCp0aGlzLCAqbGFzdENhbmRpZGF0ZUJv
eCwgcG9pbnRJbkNvbnRlbnRzKTsKIAotICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGRCb3gg
PSBmaXJzdENoaWxkQm94KCk7IGNoaWxkQm94OyBjaGlsZEJveCA9IGNoaWxkQm94LT5uZXh0U2li
bGluZ0JveCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKGNo
aWxkQm94KSkKKyAgICAgICAgZm9yIChhdXRvIGNoaWxkQm94ID0gZmlyc3RDaGlsZEJveCgpOyBj
aGlsZEJveDsgY2hpbGRCb3ggPSBjaGlsZEJveC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAg
ICAgICAgaWYgKCFpc0NoaWxkSGl0VGVzdENhbmRpZGF0ZSgqY2hpbGRCb3gpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxCb3R0
b20gPSBsb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGRCb3gpICsgbG9naWNhbEhlaWdodEZvckNoaWxk
KGNoaWxkQm94KTsKKyAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsQm90dG9tID0g
bG9naWNhbFRvcEZvckNoaWxkKCpjaGlsZEJveCkgKyBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoKmNo
aWxkQm94KTsKICAgICAgICAgICAgIC8vIFdlIGhpdCBjaGlsZCBpZiBvdXIgY2xpY2sgaXMgYWJv
dmUgdGhlIGJvdHRvbSBvZiBpdHMgcGFkZGluZyBib3ggKGxpa2UgSUU2LzcgYW5kIEZGMykuCi0g
ICAgICAgICAgICBpZiAoaXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoY2hpbGRCb3gpICYmIChwb2lu
dEluTG9naWNhbENvbnRlbnRzLnkoKSA8IGNoaWxkTG9naWNhbEJvdHRvbQorICAgICAgICAgICAg
aWYgKGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpjaGlsZEJveCkgJiYgKHBvaW50SW5Mb2dpY2Fs
Q29udGVudHMueSgpIDwgY2hpbGRMb2dpY2FsQm90dG9tCiAgICAgICAgICAgICAgICAgfHwgKGJs
b2Nrc0FyZUZsaXBwZWQgJiYgcG9pbnRJbkxvZ2ljYWxDb250ZW50cy55KCkgPT0gY2hpbGRMb2dp
Y2FsQm90dG9tKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRSZXNw
ZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXModGhpcywgY2hpbGRCb3gsIHBvaW50SW5Db250ZW50cyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGlu
Z0JvdW5kYXJpZXMoKnRoaXMsICpjaGlsZEJveCwgcG9pbnRJbkNvbnRlbnRzKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNTE2MCwxNSArNTE0OSwxNSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
OjpwYWdlUmVtYWluaW5nTG9nCiAgICAgcmV0dXJuIGZsb3dUaHJlYWQtPnBhZ2VSZW1haW5pbmdM
b2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCwgcGFnZUJvdW5kYXJ5UnVsZSk7CiB9CiAKLUxh
eW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJv
eCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucykK
K0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRl
ckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lu
cykKIHsKICAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gdmlldygpLmxheW91dFN0YXRlKCkt
PmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVj
a0NvbHVtbkJyZWFrcyAmJiB2aWV3KCkubGF5b3V0U3RhdGUoKS0+bV9wYWdlTG9naWNhbEhlaWdo
dDsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpOwogICAgIGJvb2wgY2hlY2tSZWdpb25CcmVha3MgPSBmbG93VGhyZWFkICYmIGZs
b3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCk7Ci0gICAgYm9vbCBpc1Vuc3BsaXR0
YWJsZSA9IGNoaWxkLT5pc1Vuc3BsaXR0YWJsZUZvclBhZ2luYXRpb24oKSB8fCAoY2hlY2tDb2x1
bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrSW5zaWRlKCkgPT0gUEJBVk9J
RCkKLSAgICAgICAgfHwgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJy
ZWFrSW5zaWRlKCkgPT0gUEJBVk9JRCkKLSAgICAgICAgfHwgKGNoZWNrUmVnaW9uQnJlYWtzICYm
IGNoaWxkLT5zdHlsZSgpLT5yZWdpb25CcmVha0luc2lkZSgpID09IFBCQVZPSUQpOworICAgIGJv
b2wgaXNVbnNwbGl0dGFibGUgPSBjaGlsZC5pc1Vuc3BsaXR0YWJsZUZvclBhZ2luYXRpb24oKSB8
fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQuc3R5bGUoKS0+Y29sdW1uQnJlYWtJbnNpZGUo
KSA9PSBQQkFWT0lEKQorICAgICAgICB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLnN0eWxl
KCktPnBhZ2VCcmVha0luc2lkZSgpID09IFBCQVZPSUQpCisgICAgICAgIHx8IChjaGVja1JlZ2lv
bkJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLT5yZWdpb25CcmVha0luc2lkZSgpID09IFBCQVZPSUQp
OwogICAgIGlmICghaXNVbnNwbGl0dGFibGUpCiAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0
OwogICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNo
aWxkKGNoaWxkKSArIChpbmNsdWRlTWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxk
KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpIDogTGF5b3V0VW5pdCgpKTsKQEAgLTUyNTgs
MjMgKzUyNDcsNiBAQCBSZW5kZXJSZWdpb24qIFJlbmRlckJsb2NrOjpyZWdpb25BdEJsb2NrCiAg
ICAgcmV0dXJuIGZsb3dUaHJlYWQtPnJlZ2lvbkF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgYmxvY2tPZmZzZXQsIHRydWUpOwogfQogCi12b2lk
IFJlbmRlckJsb2NrOjp1cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJv
eCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRvcCkKLXsKLSAgICBpZiAoY2hpbGQtPnN0eWxl
KCktPmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKQotICAgICAgICBzZXRTdGF0aWNJbmxp
bmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wLCBzdGFydEFsaWduZWRPZmZzZXRG
b3JMaW5lKGxvZ2ljYWxUb3AsIGZhbHNlKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRTdGF0aWNJ
bmxpbmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wLCBzdGFydE9mZnNldEZvckNv
bnRlbnQobG9naWNhbFRvcCkpOwotfQotCi12b2lkIFJlbmRlckJsb2NrOjpzZXRTdGF0aWNJbmxp
bmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgYmxvY2tPZmZz
ZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pCi17Ci0gICAgaWYgKGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKSkgewotICAgICAgICAvLyBTaGlmdCB0aGUgaW5saW5lIHBvc2l0aW9uIHRv
IGV4Y2x1ZGUgdGhlIHJlZ2lvbiBvZmZzZXQuCi0gICAgICAgIGlubGluZVBvc2l0aW9uICs9IHN0
YXJ0T2Zmc2V0Rm9yQ29udGVudCgpIC0gc3RhcnRPZmZzZXRGb3JDb250ZW50KGJsb2NrT2Zmc2V0
KTsKLSAgICB9Ci0gICAgY2hpbGQtPmxheWVyKCktPnNldFN0YXRpY0lubGluZVBvc2l0aW9uKGlu
bGluZVBvc2l0aW9uKTsKLX0KLQogYm9vbCBSZW5kZXJCbG9jazo6bG9naWNhbFdpZHRoQ2hhbmdl
ZEluUmVnaW9ucyhSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKSBjb25zdAogewogICAgIGlm
ICghZmxvd1RocmVhZCB8fCAhZmxvd1RocmVhZC0+aGFzVmFsaWRSZWdpb25JbmZvKCkpCkBAIC01
MjgzLDcgKzUyNTUsNyBAQCBib29sIFJlbmRlckJsb2NrOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5S
CiAgICAgcmV0dXJuIGZsb3dUaHJlYWQtPmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JC
bG9jayh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlZ2lvblJhbmdlRm9y
Qm94Q2hpbGQoY29uc3QgUmVuZGVyQm94KiBib3gpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2NrOjpj
b21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gmIGJveCkgY29uc3QK
IHsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpOwogICAgIGlmICghZmxvd1RocmVhZCB8fCAhZmxvd1RocmVhZC0+aGFzUmVnaW9u
cygpKQpAQCAtNTI5MSwzOSArNTI2MywzOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUmVn
aW9uUmFuZ2VGb3JCCiAKICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uOwogICAgIFJlbmRl
clJlZ2lvbiogZW5kUmVnaW9uOwotICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UmVnaW9uID0gYm94LT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7Ci0g
ICAgaWYgKGJveC0+aXNVbnNwbGl0dGFibGVGb3JQYWdpbmF0aW9uKCkpCisgICAgTGF5b3V0VW5p
dCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24gPSBib3gub2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSgpOworICAgIGlmIChib3guaXNVbnNwbGl0dGFibGVGb3JQYWdpbmF0
aW9uKCkpCiAgICAgICAgIHN0YXJ0UmVnaW9uID0gZW5kUmVnaW9uID0gZmxvd1RocmVhZC0+cmVn
aW9uQXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24s
IHRydWUpOwogICAgIGVsc2UgewogICAgICAgICBzdGFydFJlZ2lvbiA9IGZsb3dUaHJlYWQtPnJl
Z2lvbkF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9u
LCB0cnVlKTsKICAgICAgICAgZW5kUmVnaW9uID0gZmxvd1RocmVhZC0+cmVnaW9uQXRCbG9ja09m
ZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24gKyBsb2dpY2FsSGVp
Z2h0Rm9yQ2hpbGQoYm94KSwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZmxvd1RocmVhZC0+c2V0UmVn
aW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICBmbG93VGhy
ZWFkLT5zZXRSZWdpb25SYW5nZUZvckJveCgmYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsK
IH0KIAotdm9pZCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNv
bnN0IFJlbmRlckJveCogYm94KSBjb25zdAordm9pZCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVSZWdp
b25SYW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJveCYgYm94KSBjb25zdAogewogICAgIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7
CiAgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNSZWdpb25zKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChib3gtPmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigp
KSB7CisgICAgaWYgKGJveC5pc1Vuc3BsaXR0YWJsZUZvclBhZ2luYXRpb24oKSkgewogICAgICAg
ICBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChib3gpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzIGVzdGltYXRlZFZhbHVlczsK
LSAgICBib3gtPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2lj
YWxIZWlnaHQoKSwgbG9naWNhbFRvcEZvckNoaWxkKGJveCksIGVzdGltYXRlZFZhbHVlcyk7Cisg
ICAgYm94LmNvbXB1dGVMb2dpY2FsSGVpZ2h0KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxI
ZWlnaHQoKSwgbG9naWNhbFRvcEZvckNoaWxkKGJveCksIGVzdGltYXRlZFZhbHVlcyk7CiAKLSAg
ICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbiA9IGJveC0+b2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOworICAgIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uID0gYm94Lm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UoKTsKICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gZmxvd1RocmVhZC0+cmVn
aW9uQXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24s
IHRydWUpOwogICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gZmxvd1RocmVhZC0+cmVnaW9u
QXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24gKyBl
c3RpbWF0ZWRWYWx1ZXMubV9leHRlbnQsIHRydWUpOwogCi0gICAgZmxvd1RocmVhZC0+c2V0UmVn
aW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICBmbG93VGhy
ZWFkLT5zZXRSZWdpb25SYW5nZUZvckJveCgmYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsK
IH0KIAotYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChjb25z
dCBSZW5kZXJCb3gqIGJveCkgY29uc3QKK2Jvb2wgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvblJh
bmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBib3gpIGNvbnN0CiB7CiAgICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAg
ICBpZiAoIWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQtPmhhc1JlZ2lvbnMoKSkKQEAgLTUzMzEs
MTMgKzUzMDMsMTMgQEAgYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uUmFuZ2VGb3JCbwog
CiAgICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IDA7CiAgICAgUmVuZGVyUmVnaW9uKiBl
bmRSZWdpb24gPSAwOwotICAgIGZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KGJveCwg
c3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CisgICAgZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VG
b3JCb3goJmJveCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CiAKICAgICBjb21wdXRlUmVnaW9u
UmFuZ2VGb3JCb3hDaGlsZChib3gpOwogCiAgICAgUmVuZGVyUmVnaW9uKiBuZXdTdGFydFJlZ2lv
biA9IDA7CiAgICAgUmVuZGVyUmVnaW9uKiBuZXdFbmRSZWdpb24gPSAwOwotICAgIGZsb3dUaHJl
YWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KGJveCwgbmV3U3RhcnRSZWdpb24sIG5ld0VuZFJlZ2lv
bik7CisgICAgZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3goJmJveCwgbmV3U3RhcnRS
ZWdpb24sIG5ld0VuZFJlZ2lvbik7CiAKICAgICAvLyBUaGUgcmVnaW9uIHJhbmdlIG9mIHRoZSBi
b3ggaGFzIGNoYW5nZWQuIFNvbWUgYm94ZXMgKGUuZyBmbG9hdHMpIG1heSBoYXZlIGJlZW4gcG9z
aXRpb25lZCBhc3N1bWluZwogICAgIC8vIGEgZGlmZmVyZW50IHJhbmdlLgpAQCAtNTM0OCw2OCAr
NTMyMCw2OCBAQCBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25SYW5nZUZvckJvCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb2xsYXBzZWRNYXJn
aW5CZWZvcmVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6Y29sbGFwc2VkTWFyZ2luQmVmb3JlRm9yQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBzYW1lIGRp
cmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMKICAgICAv
LyBjb2xsYXBzZWQgbWFyZ2luLgotICAgIGlmICghY2hpbGQtPmlzV3JpdGluZ01vZGVSb290KCkp
Ci0gICAgICAgIHJldHVybiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQmVmb3JlKCk7CisgICAgaWYg
KCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQorICAgICAgICByZXR1cm4gY2hpbGQuY29sbGFw
c2VkTWFyZ2luQmVmb3JlKCk7CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkIGhhcyBhIGRpZmZlcmVu
dCBkaXJlY3Rpb25hbGl0eS4gIElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdzIGp1
c3QKICAgICAvLyBmbGlwcGVkIHJlbGF0aXZlIHRvIHVzLiAgV2UgY2FuIHVzZSB0aGUgY29sbGFw
c2VkIG1hcmdpbiBmb3IgdGhlIG9wcG9zaXRlIGVkZ2UuCi0gICAgaWYgKGNoaWxkLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAg
IHJldHVybiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKKyAgICBpZiAoY2hpbGQuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAg
ICAgICByZXR1cm4gY2hpbGQuY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKICAgICAKICAgICAvLyBU
aGUgY2hpbGQgaXMgcGVycGVuZGljdWxhciB0byB1cywgd2hpY2ggbWVhbnMgaXRzIG1hcmdpbnMg
ZG9uJ3QgY29sbGFwc2UgYnV0IGFyZSBvbiB0aGUKICAgICAvLyAibG9naWNhbCBsZWZ0L3JpZ2h0
IiBzaWRlcyBvZiB0aGUgY2hpbGQgYm94LiAgV2UgY2FuIGp1c3QgcmV0dXJuIHRoZSByYXcgbWFy
Z2luIGluIHRoaXMgY2FzZS4gIAogICAgIHJldHVybiBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGls
ZCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlZE1hcmdpbkFmdGVyRm9y
Q2hpbGQoY29uc3QgIFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpjb2xsYXBzZWRNYXJnaW5BZnRlckZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyB0aGUgc2FtZSBkaXJlY3Rpb25hbGl0
eSBhcyB3ZSBkbywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gaXRzCiAgICAgLy8gY29sbGFwc2Vk
IG1hcmdpbi4KLSAgICBpZiAoIWNoaWxkLT5pc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAgICBy
ZXR1cm4gY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkFmdGVyKCk7CisgICAgaWYgKCFjaGlsZC5pc1dy
aXRpbmdNb2RlUm9vdCgpKQorICAgICAgICByZXR1cm4gY2hpbGQuY29sbGFwc2VkTWFyZ2luQWZ0
ZXIoKTsKICAgICAKICAgICAvLyBUaGUgY2hpbGQgaGFzIGEgZGlmZmVyZW50IGRpcmVjdGlvbmFs
aXR5LiAgSWYgdGhlIGNoaWxkIGlzIHBhcmFsbGVsLCB0aGVuIGl0J3MganVzdAogICAgIC8vIGZs
aXBwZWQgcmVsYXRpdmUgdG8gdXMuICBXZSBjYW4gdXNlIHRoZSBjb2xsYXBzZWQgbWFyZ2luIGZv
ciB0aGUgb3Bwb3NpdGUgZWRnZS4KLSAgICBpZiAoY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxk
LT5jb2xsYXBzZWRNYXJnaW5CZWZvcmUoKTsKKyAgICBpZiAoY2hpbGQuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4g
Y2hpbGQuY29sbGFwc2VkTWFyZ2luQmVmb3JlKCk7CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkIGlz
IHBlcnBlbmRpY3VsYXIgdG8gdXMsIHdoaWNoIG1lYW5zIGl0cyBtYXJnaW5zIGRvbid0IGNvbGxh
cHNlIGJ1dCBhcmUgb24gdGhlCiAgICAgLy8gImxvZ2ljYWwgbGVmdC9yaWdodCIgc2lkZSBvZiB0
aGUgY2hpbGQgYm94LiAgV2UgY2FuIGp1c3QgcmV0dXJuIHRoZSByYXcgbWFyZ2luIGluIHRoaXMg
Y2FzZS4gIAogICAgIHJldHVybiBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkKTsKIH0KIAotYm9v
bCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmsoY29uc3QgUmVuZGVyQm94KiBjaGls
ZCkgY29uc3QKK2Jvb2wgUmVuZGVyQmxvY2s6Omhhc01hcmdpbkJlZm9yZVF1aXJrKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyB0aGUgc2Ft
ZSBkaXJlY3Rpb25hbGl0eSBhcyB3ZSBkbywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gaXRzCiAg
ICAgLy8gbWFyZ2luIHF1aXJrLgotICAgIGlmICghY2hpbGQtPmlzV3JpdGluZ01vZGVSb290KCkp
Ci0gICAgICAgIHJldHVybiBjaGlsZC0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhj
aGlsZCktPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgOiBjaGlsZC0+c3R5bGUoKS0+aGFzTWFyZ2lu
QmVmb3JlUXVpcmsoKTsKKyAgICBpZiAoIWNoaWxkLmlzV3JpdGluZ01vZGVSb290KCkpCisgICAg
ICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5o
YXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hpbGQuc3R5bGUoKS0+aGFzTWFyZ2luQmVmb3JlUXVp
cmsoKTsKICAgICAKICAgICAvLyBUaGUgY2hpbGQgaGFzIGEgZGlmZmVyZW50IGRpcmVjdGlvbmFs
aXR5LiBJZiB0aGUgY2hpbGQgaXMgcGFyYWxsZWwsIHRoZW4gaXQncyBqdXN0CiAgICAgLy8gZmxp
cHBlZCByZWxhdGl2ZSB0byB1cy4gV2UgY2FuIHVzZSB0aGUgb3Bwb3NpdGUgZWRnZS4KLSAgICBp
ZiAoY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRl
ckJsb2NrKGNoaWxkKS0+aGFzTWFyZ2luQWZ0ZXJRdWlyaygpIDogY2hpbGQtPnN0eWxlKCktPmhh
c01hcmdpbkFmdGVyUXVpcmsoKTsKKyAgICBpZiAoY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gY2hpbGQu
aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkuaGFzTWFyZ2luQWZ0ZXJRdWly
aygpIDogY2hpbGQuc3R5bGUoKS0+aGFzTWFyZ2luQWZ0ZXJRdWlyaygpOwogICAgIAogICAgIC8v
IFRoZSBjaGlsZCBpcyBwZXJwZW5kaWN1bGFyIHRvIHVzIGFuZCBib3ggc2lkZXMgYXJlIG5ldmVy
IHF1aXJreSBpbiBodG1sLmNzcywgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0CiAgICAg
Ly8gd2hldGhlciBvciBub3QgYXV0aG9ycyBzcGVjaWZpZWQgcXVpcmt5IGVtcywgc2luY2UgdGhl
eSdyZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFJlbmRlckJsb2NrOjpoYXNNYXJnaW5BZnRlclF1aXJrKGNvbnN0IFJlbmRlckJveCogY2hp
bGQpIGNvbnN0Citib29sIFJlbmRlckJsb2NrOjpoYXNNYXJnaW5BZnRlclF1aXJrKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyB0aGUgc2Ft
ZSBkaXJlY3Rpb25hbGl0eSBhcyB3ZSBkbywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gaXRzCiAg
ICAgLy8gbWFyZ2luIHF1aXJrLgotICAgIGlmICghY2hpbGQtPmlzV3JpdGluZ01vZGVSb290KCkp
Ci0gICAgICAgIHJldHVybiBjaGlsZC0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhj
aGlsZCktPmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6IGNoaWxkLT5zdHlsZSgpLT5oYXNNYXJnaW5B
ZnRlclF1aXJrKCk7CisgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQorICAgICAg
ICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkuaGFz
TWFyZ2luQWZ0ZXJRdWlyaygpIDogY2hpbGQuc3R5bGUoKS0+aGFzTWFyZ2luQWZ0ZXJRdWlyaygp
OwogICAgIAogICAgIC8vIFRoZSBjaGlsZCBoYXMgYSBkaWZmZXJlbnQgZGlyZWN0aW9uYWxpdHku
IElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdzIGp1c3QKICAgICAvLyBmbGlwcGVk
IHJlbGF0aXZlIHRvIHVzLiBXZSBjYW4gdXNlIHRoZSBvcHBvc2l0ZSBlZGdlLgotICAgIGlmIChj
aGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQotICAgICAgICByZXR1cm4gY2hpbGQtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxv
Y2soY2hpbGQpLT5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hpbGQtPnN0eWxlKCktPmhhc01h
cmdpbkJlZm9yZVF1aXJrKCk7CisgICAgaWYgKGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkLmlz
UmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhhc01hcmdpbkJlZm9yZVF1aXJr
KCkgOiBjaGlsZC5zdHlsZSgpLT5oYXNNYXJnaW5CZWZvcmVRdWlyaygpOwogICAgIAogICAgIC8v
IFRoZSBjaGlsZCBpcyBwZXJwZW5kaWN1bGFyIHRvIHVzIGFuZCBib3ggc2lkZXMgYXJlIG5ldmVy
IHF1aXJreSBpbiBodG1sLmNzcywgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0CiAgICAg
Ly8gd2hldGhlciBvciBub3QgYXV0aG9ycyBzcGVjaWZpZWQgcXVpcmt5IGVtcywgc2luY2UgdGhl
eSdyZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCkBAIC01NTY5LDEyICs1NTQxLDEzIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNoZWNrUG9zaXRpb25lZE9iamVjdHMKICAgICBpZiAoIWdQb3NpdGlv
bmVkRGVzY2VuZGFudHNNYXApCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChUcmFja2VkUmVu
ZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZERlc2NlbmRhbnRTZXQgPSBwb3NpdGlvbmVkT2Jq
ZWN0cygpKSB7Ci0gICAgICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudFNldC0+ZW5kKCk7Ci0gICAgICAgIGZvciAo
VHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9zaXRpb25l
ZERlc2NlbmRhbnRTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
UmVuZGVyQm94KiBjdXJyQm94ID0gKml0OwotICAgICAgICAgICAgQVNTRVJUKCFjdXJyQm94LT5u
ZWVkc0xheW91dCgpKTsKLSAgICAgICAgfQorICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0
KiBwb3NpdGlvbmVkRGVzY2VuZGFudFNldCA9IHBvc2l0aW9uZWRPYmplY3RzKCk7CisgICAgaWYg
KCFwb3NpdGlvbmVkRGVzY2VuZGFudFNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChh
dXRvIGl0ID0gcG9zaXRpb25lZERlc2NlbmRhbnRTZXQtPmJlZ2luKCksIGVuZCA9IHBvc2l0aW9u
ZWREZXNjZW5kYW50U2V0LT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRl
ckJveCogY3VyckJveCA9ICppdDsKKyAgICAgICAgQVNTRVJUKCFjdXJyQm94LT5uZWVkc0xheW91
dCgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCShyZXZpc2lvbiAxNTc3ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDggKzExNyw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKTsKIAotICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9i
amVjdChSZW5kZXJCb3gqKTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0
KFJlbmRlckJveCopOworICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gm
KTsKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYpOwog
ICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoUmVuZGVyQmxvY2sqLCBDb250YWluaW5n
QmxvY2tTdGF0ZSA9IFNhbWVDb250YWluaW5nQmxvY2spOwogCiAgICAgVHJhY2tlZFJlbmRlcmVy
TGlzdEhhc2hTZXQqIHBvc2l0aW9uZWRPYmplY3RzKCkgY29uc3Q7CkBAIC0xMjgsMTMgKzEyOCwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvYmplY3RzICYmICFvYmplY3RzLT5pc0VtcHR5
KCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJC
b3gqKTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5k
ZXJCb3gqKTsKKyAgICB2b2lkIGFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCYp
OworICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJv
eCYpOwogICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudHMoKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBoYXNQZXJjZW50SGVpZ2h0Q29udGFpbmVy
TWFwKCk7Ci0gICAgc3RhdGljIGJvb2wgaGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVy
Qm94Kik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJQZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNGcm9t
KFJlbmRlckJveCopOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5k
YW50SWZOZWVkZWQoUmVuZGVyQm94Kik7CisgICAgc3RhdGljIGJvb2wgaGFzUGVyY2VudEhlaWdo
dERlc2NlbmRhbnQoUmVuZGVyQm94Jik7CisgICAgc3RhdGljIHZvaWQgY2xlYXJQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudHNGcm9tKFJlbmRlckJveCYpOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBl
cmNlbnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQoUmVuZGVyQm94Jik7CiAKICAgICB2b2lkIHNl
dEhhc01hcmdpbkJlZm9yZVF1aXJrKGJvb2wgYikgeyBtX2hhc01hcmdpbkJlZm9yZVF1aXJrID0g
YjsgfQogICAgIHZvaWQgc2V0SGFzTWFyZ2luQWZ0ZXJRdWlyayhib29sIGIpIHsgbV9oYXNNYXJn
aW5BZnRlclF1aXJrID0gYjsgfQpAQCAtMTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc01hcmdpbkJlZm9yZVF1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXJnaW5CZWZvcmVR
dWlyazsgfQogICAgIGJvb2wgaGFzTWFyZ2luQWZ0ZXJRdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzTWFyZ2luQWZ0ZXJRdWlyazsgfQogCi0gICAgYm9vbCBoYXNNYXJnaW5CZWZvcmVRdWlyayhj
b25zdCBSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKLSAgICBib29sIGhhc01hcmdpbkFmdGVyUXVp
cmsoY29uc3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3Q7CisgICAgYm9vbCBoYXNNYXJnaW5CZWZv
cmVRdWlyayhjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBib29sIGhhc01hcmdp
bkFmdGVyUXVpcmsoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAKICAgICBib29sIGdl
bmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNoaWxkKFJlbmRlck9iamVjdCopOwogCkBAIC0yMjYs
OSArMjI2LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRqdXN0U3RhcnRFZGdlRm9yV3JpdGluZ01v
ZGVJbmNsdWRpbmdDb2x1bW5zKExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIEdhcFJlY3RzIHNl
bGVjdGlvbkdhcFJlY3RzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyKTsKLSAgICBMYXlvdXRSZWN0IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uR2Fw
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlz
aWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAg
IExheW91dFJlY3QgbG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9j
aywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIFJlbmRlck9iamVjdCogc2Vs
T2JqLCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYs
IGNvbnN0IFBhaW50SW5mbyopOwotICAgIExheW91dFJlY3QgbG9naWNhbFJpZ2h0U2VsZWN0aW9u
R2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQ
aHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAor
ICAgIExheW91dFJlY3QgbG9naWNhbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290
QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25z
dCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgICAgICBSZW5kZXJPYmplY3Qq
IHNlbE9iaiwgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2Fj
aGVzJiwgY29uc3QgUGFpbnRJbmZvKik7CiAgICAgdm9pZCBnZXRTZWxlY3Rpb25HYXBJbmZvKFNl
bGVjdGlvblN0YXRlLCBib29sJiBsZWZ0R2FwLCBib29sJiByaWdodEdhcCk7CiAgICAgUmVuZGVy
QmxvY2sqIGJsb2NrQmVmb3JlV2l0aGluU2VsZWN0aW9uUm9vdChMYXlvdXRTaXplJiBvZmZzZXQp
IGNvbnN0OwpAQCAtMzA3LDIxICszMDcsMjEgQEAgcHVibGljOgogCiAgICAgLy8gQWNjZXNzb3Jz
IGZvciBsb2dpY2FsIHdpZHRoL2hlaWdodCBhbmQgbWFyZ2lucyBpbiB0aGUgY29udGFpbmluZyBi
bG9jaydzIGJsb2NrLWZsb3cgZGlyZWN0aW9uLgogICAgIGVudW0gQXBwbHlMYXlvdXREZWx0YU1v
ZGUgeyBBcHBseUxheW91dERlbHRhLCBEb05vdEFwcGx5TGF5b3V0RGVsdGEgfTsKLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCogY2hpbGQpIGNvbnN0
IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNo
aWxkLT5oZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodEZvckNoaWxkKGNv
bnN0IFJlbmRlckJveCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBjaGlsZC0+aGVpZ2h0KCkgOiBjaGlsZC0+d2lkdGgoKTsgfQotICAgIExheW91dFVu
aXQgbG9naWNhbFRvcEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCogY2hpbGQpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsg
fQotICAgIHZvaWQgc2V0TG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlv
dXREZWx0YSk7Ci0gICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGls
ZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBw
bHlMYXlvdXREZWx0YSk7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmVGb3JDaGlsZChjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGNoaWxkLT5tYXJn
aW5CZWZvcmUoc3R5bGUoKSk7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpbkFmdGVyRm9yQ2hpbGQo
Y29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBjaGlsZC0+
bWFyZ2luQWZ0ZXIoc3R5bGUoKSk7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0Rm9yQ2hp
bGQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBjaGls
ZC0+bWFyZ2luU3RhcnQoc3R5bGUoKSk7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZEZvckNo
aWxkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gY2hp
bGQtPm1hcmdpbkVuZChzdHlsZSgpKTsgfQotICAgIHZvaWQgc2V0TWFyZ2luU3RhcnRGb3JDaGls
ZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHZhbHVlKSBjb25zdCB7IGNoaWxkLT5zZXRN
YXJnaW5TdGFydCh2YWx1ZSwgc3R5bGUoKSk7IH0KLSAgICB2b2lkIHNldE1hcmdpbkVuZEZvckNo
aWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgdmFsdWUpIGNvbnN0IHsgY2hpbGQtPnNl
dE1hcmdpbkVuZCh2YWx1ZSwgc3R5bGUoKSk7IH0KLSAgICB2b2lkIHNldE1hcmdpbkJlZm9yZUZv
ckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgdmFsdWUpIGNvbnN0IHsgY2hpbGQt
PnNldE1hcmdpbkJlZm9yZSh2YWx1ZSwgc3R5bGUoKSk7IH0KLSAgICB2b2lkIHNldE1hcmdpbkFm
dGVyRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCB2YWx1ZSkgY29uc3QgeyBj
aGlsZC0+c2V0TWFyZ2luQWZ0ZXIodmFsdWUsIHN0eWxlKCkpOyB9Ci0gICAgTGF5b3V0VW5pdCBj
b2xsYXBzZWRNYXJnaW5CZWZvcmVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gqIGNoaWxkKSBjb25z
dDsKLSAgICBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVu
ZGVyQm94KiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhGb3JDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY2hpbGQud2lkdGgoKSA6IGNoaWxkLmhlaWdodCgpOyB9CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLmhlaWdodCgpIDogY2hp
bGQud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFRvcEZvckNoaWxkKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBjaGlsZC55KCkgOiBjaGlsZC54KCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hp
bGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgQXBwbHlMYXlvdXRE
ZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVsdGEpOworICAgIHZvaWQgc2V0TG9naWNhbFRv
cEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgQXBwbHlM
YXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVsdGEpOworICAgIExheW91dFVuaXQg
bWFyZ2luQmVmb3JlRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNoaWxkKSBj
b25zdCB7IHJldHVybiBjaGlsZC5tYXJnaW5CZWZvcmUoc3R5bGUoKSk7IH0KKyAgICBMYXlvdXRV
bml0IG1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNoaWxk
KSBjb25zdCB7IHJldHVybiBjaGlsZC5tYXJnaW5BZnRlcihzdHlsZSgpKTsgfQorICAgIExheW91
dFVuaXQgbWFyZ2luU3RhcnRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGNoaWxkLm1hcmdpblN0YXJ0KHN0eWxlKCkpOyB9CisgICAgTGF5
b3V0VW5pdCBtYXJnaW5FbmRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGNoaWxkLm1hcmdpbkVuZChzdHlsZSgpKTsgfQorICAgIHZvaWQg
c2V0TWFyZ2luU3RhcnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IHZhbHVl
KSBjb25zdCB7IGNoaWxkLnNldE1hcmdpblN0YXJ0KHZhbHVlLCBzdHlsZSgpKTsgfQorICAgIHZv
aWQgc2V0TWFyZ2luRW5kRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCB2YWx1
ZSkgY29uc3QgeyBjaGlsZC5zZXRNYXJnaW5FbmQodmFsdWUsIHN0eWxlKCkpOyB9CisgICAgdm9p
ZCBzZXRNYXJnaW5CZWZvcmVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IHZh
bHVlKSBjb25zdCB7IGNoaWxkLnNldE1hcmdpbkJlZm9yZSh2YWx1ZSwgc3R5bGUoKSk7IH0KKyAg
ICB2b2lkIHNldE1hcmdpbkFmdGVyRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5p
dCB2YWx1ZSkgY29uc3QgeyBjaGlsZC5zZXRNYXJnaW5BZnRlcih2YWx1ZSwgc3R5bGUoKSk7IH0K
KyAgICBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKGNvbnN0IFJlbmRl
ckJveCYgY2hpbGQpIGNvbnN0OworICAgIExheW91dFVuaXQgY29sbGFwc2VkTWFyZ2luQWZ0ZXJG
b3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRl
TG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KGNvbnN0IEVUZXh0QWxpZ24mLCBCaWRpUnVuKiB0cmFp
bGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0
aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQpOwogCkBAIC0zNjYsMTQgKzM2NiwxMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnRP
ZmZzZXRGb3JDb250ZW50KCkgKyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsgfQogICAgIExheW91
dFVuaXQgc3RhcnRPZmZzZXRGb3JDb250ZW50KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCkgOiBs
b2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKTsgfQogICAgIExh
eW91dFVuaXQgZW5kT2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICFzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSA6
IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCgpOyB9Ci0gICAg
Ci0gICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCosIExh
eW91dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pOwotICAgIHZv
aWQgdXBkYXRlU3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqLCBMYXlvdXRV
bml0IGxvZ2ljYWxUb3ApOwogCi0gICAgTGF5b3V0VW5pdCBjb21wdXRlU3RhcnRQb3NpdGlvbkRl
bHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRV
bml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAwKTsKKyAgICBMYXlvdXRVbml0
IGNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgUmVuZGVyUmVnaW9u
KiA9IDApOwogCi0gICAgdm9pZCBwbGFjZVJ1bkluSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCk7Ci0gICAgYm9vbCBydW5JbklzUGxhY2VkSW50b1NpYmxpbmdCbG9jayhSZW5kZXJPYmpl
Y3QqIHJ1bkluKTsKKyAgICB2b2lkIHBsYWNlUnVuSW5JZk5lZWRlZChSZW5kZXJPYmplY3QmIG5l
d0NoaWxkKTsKKyAgICBib29sIHJ1bkluSXNQbGFjZWRJbnRvU2libGluZ0Jsb2NrKFJlbmRlck9i
amVjdCYgcnVuSW4pOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgY2hlY2tQb3NpdGlvbmVk
T2JqZWN0c05lZWRMYXlvdXQoKTsKQEAgLTQyNSwxMiArNDIyLDEyIEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREU7CiAKICAgICB2b2lkIGxheW91dFBvc2l0
aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBmaXhlZFBvc2l0aW9uT2Jq
ZWN0c09ubHkgPSBmYWxzZSk7Ci0gICAgdm9pZCBtYXJrRml4ZWRQb3NpdGlvbk9iamVjdEZvckxh
eW91dElmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQpOworICAgIHZvaWQgbWFya0ZpeGVkUG9z
aXRpb25PYmplY3RGb3JMYXlvdXRJZk5lZWRlZChSZW5kZXJPYmplY3QmIGNoaWxkKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENoaWxkcmVuKFBhaW50
SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8mIGZvckNoaWxkLCBi
b29sIHVzZVByaW50UmVjdCk7Ci0gICAgYm9vbCBwYWludENoaWxkKFJlbmRlckJveCosIFBhaW50
SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8mIGZvckNoaWxkLCBi
b29sIHVzZVByaW50UmVjdCk7CisgICAgYm9vbCBwYWludENoaWxkKFJlbmRlckJveCYsIFBhaW50
SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8mIGZvckNoaWxkLCBi
b29sIHVzZVByaW50UmVjdCk7CiAgICAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBi
b29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7CkBAIC00OTgsMTIgKzQ5NSwx
MiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIHVwZGF0ZVNoYXBlc0JlZm9yZUJsb2NrTGF5b3V0
KCk7CiAgICAgdm9pZCB1cGRhdGVTaGFwZXNBZnRlckJsb2NrTGF5b3V0KGJvb2wgaGVpZ2h0Q2hh
bmdlZCA9IGZhbHNlKTsKLSAgICB2b2lkIGNvbXB1dGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNv
bnN0IFJlbmRlckJveCopIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQm94
Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CiAKLSAgICB2b2lkIGVzdGltYXRlUmVnaW9u
UmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKLSAgICBib29sIHVwZGF0
ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CisgICAgdm9p
ZCBlc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7
CisgICAgYm9vbCB1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJveCYp
IGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVCbG9ja0NoaWxkRGlydHlCaXRzQmVmb3JlTGF5b3V0
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgUmVuZGVyQm94Kik7CisgICAgdm9pZCB1cGRhdGVCbG9j
a0NoaWxkRGlydHlCaXRzQmVmb3JlTGF5b3V0KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgUmVuZGVy
Qm94Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhlaWdo
dENoYW5nZShMYXlvdXRVbml0JiBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCYgcGFnZUxvZ2ljYWxI
ZWlnaHRDaGFuZ2VkLCBib29sJiBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCk7CiAKQEAg
LTUyNiw3ICs1MjMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUJsb2Nr
T3JJbmxpbmVUYWJsZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGlzSW5saW5lKCkg
JiYgaXNSZXBsYWNlZCgpOyB9CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgbWFrZUNoaWxkcmVuTm9u
SW5saW5lKFJlbmRlck9iamVjdCogaW5zZXJ0aW9uUG9pbnQgPSAwKTsKKyAgICB2b2lkIG1ha2VD
aGlsZHJlbk5vbklubGluZShSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50ID0gbnVsbHB0cik7
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxv
Y2sqIGNoaWxkKTsKIAogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFp
b24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwpAQCAtNTQy
LDggKzUzOSw4IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmly
dHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93
CiAgICAgdmlydHVhbCBib29sIGhhc0lubGluZUJveENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAotICAgIHZvaWQgaW5zZXJ0SW50b1RyYWNrZWRSZW5kZXJlck1hcHMoUmVuZGVy
Qm94KiBkZXNjZW5kYW50LCBUcmFja2VkRGVzY2VuZGFudHNNYXAqJiwgVHJhY2tlZENvbnRhaW5l
ck1hcComKTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFwcyhS
ZW5kZXJCb3gqIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComLCBUcmFja2VkQ29u
dGFpbmVyTWFwKiYpOworICAgIHZvaWQgaW5zZXJ0SW50b1RyYWNrZWRSZW5kZXJlck1hcHMoUmVu
ZGVyQm94JiBkZXNjZW5kYW50LCBUcmFja2VkRGVzY2VuZGFudHNNYXAqJiwgVHJhY2tlZENvbnRh
aW5lck1hcComKTsKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFw
cyhSZW5kZXJCb3gmIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComLCBUcmFja2Vk
Q29udGFpbmVyTWFwKiYpOwogCiAgICAgLy8gQ2FsbGVkIHRvIGxheSBvdXQgdGhlIGxlZ2VuZCBm
b3IgYSBmaWVsZHNldCBvciB0aGUgcnVieSB0ZXh0IG9mIGEgcnVieSBydW4uCiAgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKGJvb2wgLypyZWxheW91
dENoaWxkcmVuKi8pIHsgcmV0dXJuIDA7IH0KQEAgLTU1NCwxNCArNTUxLDE0IEBAIHByaXZhdGU6
CiAgICAgTm9kZSogbm9kZUZvckhpdFRlc3QoKSBjb25zdDsKIAogICAgIHN0cnVjdCBGbG9hdFdp
dGhSZWN0IHsKLSAgICAgICAgRmxvYXRXaXRoUmVjdChSZW5kZXJCb3gqIGYpCisgICAgICAgIEZs
b2F0V2l0aFJlY3QoUmVuZGVyQm94JiBmKQogICAgICAgICAgICAgOiBvYmplY3QoZikKLSAgICAg
ICAgICAgICwgcmVjdChMYXlvdXRSZWN0KGYtPngoKSAtIGYtPm1hcmdpbkxlZnQoKSwgZi0+eSgp
IC0gZi0+bWFyZ2luVG9wKCksIGYtPndpZHRoKCkgKyBmLT5tYXJnaW5XaWR0aCgpLCBmLT5oZWln
aHQoKSArIGYtPm1hcmdpbkhlaWdodCgpKSkKLSAgICAgICAgICAgICwgZXZlckhhZExheW91dChm
LT5ldmVySGFkTGF5b3V0KCkpCisgICAgICAgICAgICAsIHJlY3QoTGF5b3V0UmVjdChmLngoKSAt
IGYubWFyZ2luTGVmdCgpLCBmLnkoKSAtIGYubWFyZ2luVG9wKCksIGYud2lkdGgoKSArIGYubWFy
Z2luV2lkdGgoKSwgZi5oZWlnaHQoKSArIGYubWFyZ2luSGVpZ2h0KCkpKQorICAgICAgICAgICAg
LCBldmVySGFkTGF5b3V0KGYuZXZlckhhZExheW91dCgpKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICBSZW5kZXJCb3gqIG9iamVjdDsKKyAgICAgICAgUmVuZGVyQm94JiBvYmplY3Q7
CiAgICAgICAgIExheW91dFJlY3QgcmVjdDsKICAgICAgICAgYm9vbCBldmVySGFkTGF5b3V0Owog
ICAgIH07CkBAIC01NzMsMTMgKzU3MCwxMyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eCgpICsgY2hp
bGQtPnJlbmRlcmVyKCkubWFyZ2luTGVmdCgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gY2hpbGQtPngoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKCZjaGlsZC0+cmVuZGVyZXIo
KSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxk
KGNoaWxkLT5yZW5kZXJlcigpKTsKICAgICB9CiAgICAgICAgIAogICAgIExheW91dFVuaXQgeVBv
c2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxk
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKCZjaGls
ZC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIG1hcmdpbkJl
Zm9yZUZvckNoaWxkKGNoaWxkLT5yZW5kZXJlcigpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkLT55KCkgKyBjaGlsZC0+cmVuZGVyZXIoKS5tYXJnaW5Ub3AoKTsKICAg
ICB9CkBAIC02MjQsMjAgKzYyMSwyMCBAQCBwcml2YXRlOgogICAgIH0KICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CiAgICAg
Ym9vbCBpc1NlbGVjdGlvblJvb3QoKSBjb25zdDsKLSAgICBHYXBSZWN0cyBzZWxlY3Rpb25HYXBz
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlz
aWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAg
IEdhcFJlY3RzIHNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5
b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBM
YXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQs
IGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQYWludEluZm8qID0g
MCk7CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFs
bCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93Ci0gICAgdmlydHVhbCBHYXBS
ZWN0cyBpbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExh
eW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgIHZpcnR1YWwgR2FwUmVjdHMgaW5saW5lU2VsZWN0aW9u
R2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2Nr
UGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywK
ICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dp
Y2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVj
dGlvbk9mZnNldENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopOwotICAgIEdhcFJlY3RzIGJsb2Nr
U2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYg
cm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJv
b3RCbG9jaywKKyAgICBHYXBSZWN0cyBibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJv
b3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNv
bnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIExheW91dFVuaXQm
IGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQm
IGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBj
b25zdCBQYWludEluZm8qKTsKLSAgICBMYXlvdXRSZWN0IGJsb2NrU2VsZWN0aW9uR2FwKFJlbmRl
ckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBv
c2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgIExheW91
dFJlY3QgYmxvY2tTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5
b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIExheW91dFVuaXQgbGFzdExvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbGFzdExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsUmlnaHQsIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbSwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hl
cyYsIGNvbnN0IFBhaW50SW5mbyopOwotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxlY3Rp
b25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29u
c3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYpOwotICAgIExheW91dFVuaXQgbG9naWNh
bFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIExheW91dFVuaXQg
cG9zaXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmKTsKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ss
IExheW91dFVuaXQgcG9zaXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMm
KTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2VsZWN0aW9u
T2Zmc2V0Q2FjaGVzJik7CiAgICAgCiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmly
dHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93
Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXRGbG9hdGluZ09iamVjdHMoUmVuZGVyQmxvY2sqLCBj
b25zdCBQYWludEluZm8qLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFNpemUmKSB7
IH07CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXRGbG9hdGluZ09iamVjdHMoUmVuZGVyQmxvY2sm
LCBjb25zdCBQYWludEluZm8qLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFNpemUm
KSB7IH07CiAgICAgZnJpZW5kIGNsYXNzIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXM7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IE9WRVJSSURFOwpAQCAtNjY5LDE0
ICs2NjYsMTQgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0NvbHVtbnNC
bG9jayhib29sIGFsbG93QW5vbnltb3VzQ29sdW1uQmxvY2sgPSB0cnVlKTsKICAgICBSZW5kZXJC
bG9jayogY29sdW1uc0Jsb2NrRm9yU3Bhbm5pbmdFbGVtZW50KFJlbmRlck9iamVjdCogbmV3Q2hp
bGQpOwogCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNyZWF0ZVJlcGxhY2VtZW50UnVuSW4o
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJ1bkluKTsKLSAgICB2b2lkIG1vdmVSdW5JblVuZGVyU2li
bGluZ0Jsb2NrSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBydW5Jbik7Ci0gICAgdm9pZCBtb3ZlUnVu
SW5Ub09yaWdpbmFsUG9zaXRpb24oUmVuZGVyT2JqZWN0KiBydW5Jbik7CisgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QmIGNyZWF0ZVJlcGxhY2VtZW50UnVuSW4oUmVuZGVyQm94TW9kZWxPYmplY3Qm
IHJ1bkluKTsKKyAgICB2b2lkIG1vdmVSdW5JblVuZGVyU2libGluZ0Jsb2NrSWZOZWVkZWQoUmVu
ZGVyT2JqZWN0JiBydW5Jbik7CisgICAgdm9pZCBtb3ZlUnVuSW5Ub09yaWdpbmFsUG9zaXRpb24o
UmVuZGVyT2JqZWN0JiBydW5Jbik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGRpcnR5Rm9yTGF5
b3V0RnJvbVBlcmNlbnRhZ2VIZWlnaHREZXNjZW5kYW50cygpOwogICAgIAotICAgIHZvaWQgZGV0
ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIEFwcGx5
TGF5b3V0RGVsdGFNb2RlID0gRG9Ob3RBcHBseUxheW91dERlbHRhKTsKKyAgICB2b2lkIGRldGVy
bWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBBcHBseUxh
eW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlvdXREZWx0YSk7CiAgICAgCiAgICAgLy8gUmV0
dXJucyB0aGUgbG9naWNhbE9mZnNldCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UuIElmIHRo
ZSBvZmZzZXQgcGFzc2VkIGluIGlzIGFscmVhZHkgYXQgdGhlIHRvcCBvZiB0aGUgY3VycmVudCBw
YWdlLAogICAgIC8vIHRoZW4gbmV4dFBhZ2VMb2dpY2FsVG9wIHdpdGggRXhjbHVkZVBhZ2VCb3Vu
ZGFyeSB3aWxsIHN0aWxsIG1vdmUgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlLiBuZXh0UGFn
ZUxvZ2ljYWxUb3Agd2l0aApAQCAtNzA1LDcgKzcwMiw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBj
b2x1bW4gYmFsYW5jZXIgdG8gaGVscCBzZXQgYSBnb29kIG1pbmltdW0gY29sdW1uIGhlaWdodC4K
ICAgICB2b2lkIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KExheW91dFVuaXQgb2Zmc2V0LCBMYXlv
dXRVbml0IG1pbkhlaWdodCk7CiAKLSAgICBMYXlvdXRVbml0IGFkanVzdEZvclVuc3BsaXR0YWJs
ZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgYm9vbCBp
bmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBh
bmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBu
ZXh0IHBhZ2UvY29sdW1uLgorICAgIExheW91dFVuaXQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hp
bGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBib29sIGluY2x1
ZGVNYXJnaW5zID0gZmFsc2UpOyAvLyBJZiB0aGUgY2hpbGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBj
YW4ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZSwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQg
cGFnZS9jb2x1bW4uCiAKICAgICAvLyBBZGp1c3QgZnJvbSBwYWludGluZyBvZmZzZXRzIHRvIHRo
ZSBsb2NhbCBjb29yZHMgb2YgdGhpcyByZW5kZXJlcgogICAgIHZvaWQgb2Zmc2V0Rm9yQ29udGVu
dHMoTGF5b3V0UG9pbnQmKSBjb25zdDsKQEAgLTgwNCw5ICs4MDEsOSBAQCBpbmxpbmUgY29uc3Qg
UmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soCiB2b2lkIHRvUmVuZGVyQmxvY2soY29uc3QgUmVu
ZGVyQmxvY2sqKTsKIHZvaWQgdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayYpOwogCi1M
YXlvdXRVbml0IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNv
bnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spOwotTGF5b3V0VW5pdCBpbmxpbmVE
aXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0RnJvbVJvb3RCbG9jayk7Ci1WaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJl
c3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyhSZW5kZXJCbG9jayosIFJlbmRlckJveCosIGNvbnN0
IExheW91dFBvaW50Jik7CitMYXlvdXRVbml0IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJs
b2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spOwor
TGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywg
Y29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jayk7CitWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyhSZW5kZXJCbG9jayYs
IFJlbmRlckJveCYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIENPTVBJTEVfQVNT
RVJUKHNpemVvZihSZW5kZXJCbG9ja0Zsb3c6Ok0KIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZW5k
ZXJCbG9ja0Zsb3c6Ok1hcmdpbkluZm8pID09IHNpemVvZihTYW1lU2l6ZUFzTWFyZ2luSW5mbyks
IE1hcmdpbkluZm9fc2hvdWxkX3N0YXlfc21hbGwpOwogCiAvLyBPdXIgTWFyZ2luSW5mbyBzdGF0
ZSB1c2VkIHdoZW4gbGF5aW5nIG91dCBibG9jayBjaGlsZHJlbi4KLVJlbmRlckJsb2NrRmxvdzo6
TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrLCBMYXlvdXRVbml0
IGJlZm9yZUJvcmRlclBhZGRpbmcsIExheW91dFVuaXQgYWZ0ZXJCb3JkZXJQYWRkaW5nKQorUmVu
ZGVyQmxvY2tGbG93OjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJlbmRlckJsb2NrRmxvdyYgYmxv
Y2ssIExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJvcmRl
clBhZGRpbmcpCiAgICAgOiBtX2F0QmVmb3JlU2lkZU9mQmxvY2sodHJ1ZSkKICAgICAsIG1fYXRB
ZnRlclNpZGVPZkJsb2NrKGZhbHNlKQogICAgICwgbV9oYXNNYXJnaW5CZWZvcmVRdWlyayhmYWxz
ZSkKQEAgLTYwLDExICs2MCwxMSBAQCBSZW5kZXJCbG9ja0Zsb3c6Ok1hcmdpbkluZm86Ok1hcmdp
bkluZm8oCiAgICAgLCBtX2RldGVybWluZWRNYXJnaW5CZWZvcmVRdWlyayhmYWxzZSkKICAgICAs
IG1fZGlzY2FyZE1hcmdpbihmYWxzZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogYmxvY2tTdHlsZSA9
IGJsb2NrLT5zdHlsZSgpOwotICAgIEFTU0VSVChibG9jay0+aXNSZW5kZXJWaWV3KCkgfHwgYmxv
Y2stPnBhcmVudCgpKTsKLSAgICBtX2NhbkNvbGxhcHNlV2l0aENoaWxkcmVuID0gIWJsb2NrLT5p
c1JlbmRlclZpZXcoKSAmJiAhYmxvY2stPmlzUm9vdCgpICYmICFibG9jay0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkKLSAgICAgICAgJiYgIWJsb2NrLT5pc0Zsb2F0aW5nKCkgJiYgIWJsb2NrLT5p
c1RhYmxlQ2VsbCgpICYmICFibG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWJsb2NrLT5pc0lu
bGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpCi0gICAgICAgICYmICFibG9jay0+aXNSZW5kZXJGbG93
VGhyZWFkKCkgJiYgIWJsb2NrLT5pc1dyaXRpbmdNb2RlUm9vdCgpICYmICFibG9jay0+cGFyZW50
KCktPmlzRmxleGlibGVCb3goKQorICAgIFJlbmRlclN0eWxlKiBibG9ja1N0eWxlID0gYmxvY2su
c3R5bGUoKTsKKyAgICBBU1NFUlQoYmxvY2suaXNSZW5kZXJWaWV3KCkgfHwgYmxvY2sucGFyZW50
KCkpOworICAgIG1fY2FuQ29sbGFwc2VXaXRoQ2hpbGRyZW4gPSAhYmxvY2suaXNSZW5kZXJWaWV3
KCkgJiYgIWJsb2NrLmlzUm9vdCgpICYmICFibG9jay5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKQor
ICAgICAgICAmJiAhYmxvY2suaXNGbG9hdGluZygpICYmICFibG9jay5pc1RhYmxlQ2VsbCgpICYm
ICFibG9jay5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhYmxvY2suaXNJbmxpbmVCbG9ja09ySW5saW5l
VGFibGUoKQorICAgICAgICAmJiAhYmxvY2suaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWJsb2Nr
LmlzV3JpdGluZ01vZGVSb290KCkgJiYgIWJsb2NrLnBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkK
ICAgICAgICAgJiYgYmxvY2tTdHlsZS0+aGFzQXV0b0NvbHVtbkNvdW50KCkgJiYgYmxvY2tTdHls
ZS0+aGFzQXV0b0NvbHVtbldpZHRoKCkgJiYgIWJsb2NrU3R5bGUtPmNvbHVtblNwYW4oKTsKIAog
ICAgIG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPSBtX2NhbkNvbGxhcHNl
V2l0aENoaWxkcmVuICYmICFiZWZvcmVCb3JkZXJQYWRkaW5nICYmIGJsb2NrU3R5bGUtPm1hcmdp
bkJlZm9yZUNvbGxhcHNlKCkgIT0gTVNFUEFSQVRFOwpAQCAtNzYsMTIgKzc2LDEyIEBAIFJlbmRl
ckJsb2NrRmxvdzo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbygKICAgICBtX2NhbkNvbGxhcHNlTWFy
Z2luQWZ0ZXJXaXRoQ2hpbGRyZW4gPSBtX2NhbkNvbGxhcHNlV2l0aENoaWxkcmVuICYmICFhZnRl
ckJvcmRlclBhZGRpbmcKICAgICAgICAgJiYgKGJsb2NrU3R5bGUtPmxvZ2ljYWxIZWlnaHQoKS5p
c0F1dG8oKSAmJiAhYmxvY2tTdHlsZS0+bG9naWNhbEhlaWdodCgpLnZhbHVlKCkpICYmIGJsb2Nr
U3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSAhPSBNU0VQQVJBVEU7CiAgICAgCi0gICAgbV9x
dWlya0NvbnRhaW5lciA9IGJsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8IGJsb2NrLT5pc0JvZHkoKTsK
KyAgICBtX3F1aXJrQ29udGFpbmVyID0gYmxvY2suaXNUYWJsZUNlbGwoKSB8fCBibG9jay5pc0Jv
ZHkoKTsKIAotICAgIG1fZGlzY2FyZE1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVX
aXRoQ2hpbGRyZW4gJiYgYmxvY2stPm11c3REaXNjYXJkTWFyZ2luQmVmb3JlKCk7CisgICAgbV9k
aXNjYXJkTWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiAmJiBi
bG9jay5tdXN0RGlzY2FyZE1hcmdpbkJlZm9yZSgpOwogCi0gICAgbV9wb3NpdGl2ZU1hcmdpbiA9
IChtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuICYmICFibG9jay0+bXVzdERp
c2NhcmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay0+bWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6
IExheW91dFVuaXQoKTsKLSAgICBtX25lZ2F0aXZlTWFyZ2luID0gKG1fY2FuQ29sbGFwc2VNYXJn
aW5CZWZvcmVXaXRoQ2hpbGRyZW4gJiYgIWJsb2NrLT5tdXN0RGlzY2FyZE1hcmdpbkJlZm9yZSgp
KSA/IGJsb2NrLT5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOworICAg
IG1fcG9zaXRpdmVNYXJnaW4gPSAobV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJl
biAmJiAhYmxvY2subXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay5tYXhQb3NpdGl2
ZU1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOworICAgIG1fbmVnYXRpdmVNYXJnaW4gPSAo
bV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiAmJiAhYmxvY2subXVzdERpc2Nh
cmRNYXJnaW5CZWZvcmUoKSkgPyBibG9jay5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5
b3V0VW5pdCgpOwogfQogCiBSZW5kZXJCbG9ja0Zsb3c6OlJlbmRlckJsb2NrRmxvdyhFbGVtZW50
JiBlbGVtZW50KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojp3aWxs
QmVEZXN0cm95ZWQoKQogCiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKICAg
ICAgICAgaWYgKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPmlzUnVuSW4oKSkKLSAgICAg
ICAgICAgIG1vdmVSdW5JblRvT3JpZ2luYWxQb3NpdGlvbihmaXJzdENoaWxkKCkpOworICAgICAg
ICAgICAgbW92ZVJ1bkluVG9PcmlnaW5hbFBvc2l0aW9uKCpmaXJzdENoaWxkKCkpOwogICAgIH0K
IAogICAgIC8vIE1ha2Ugc3VyZSB0byBkZXN0cm95IGFub255bW91cyBjaGlsZHJlbiBmaXJzdCB3
aGlsZSB0aGV5IGFyZSBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIHRyZWUsIHNv
IHRoYXQgdGhleSB3aWxsCkBAIC0zOTAsOCArMzkwLDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
OmxheW91dEJsb2NrKGJvb2wgcgogICAgICAgICAgICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidz
IGZsb2F0cyBtYXkgaGF2ZSBiZWNvbWUgYW4gb3ZlcmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBu
ZWVkIHRvIGxvb2sgZm9yIGl0LgogICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhY2hpbGQt
PmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrID0gdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpICsg
YmxvY2stPmxvZ2ljYWxUb3AoKSA+IG5ld0hlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2tGbG93JiBibG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KCpjaGlsZCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChibG9jay5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIGJsb2Nr
LmxvZ2ljYWxUb3AoKSA+IG5ld0hlaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92
ZXJoYW5naW5nRmxvYXRzKGJsb2NrLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtNDgyLDcgKzQ4Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRC
bG9ja0NoaWxkcmUKICAgICAgICAgbGF5b3V0TGluZUdyaWRCb3goKTsKIAogICAgIC8vIFRoZSBt
YXJnaW4gc3RydWN0IGNhY2hlcyBhbGwgb3VyIGN1cnJlbnQgbWFyZ2luIGNvbGxhcHNpbmcgc3Rh
dGUuCi0gICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMsIGJlZm9yZUVkZ2UsIGFmdGVyRWRn
ZSk7CisgICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKCp0aGlzLCBiZWZvcmVFZGdlLCBhZnRlckVk
Z2UpOwogCiAgICAgLy8gRmllbGRzZXRzIG5lZWQgdG8gZmluZCB0aGVpciBsZWdlbmQgYW5kIHBv
c2l0aW9uIGl0IGluc2lkZSB0aGUgYm9yZGVyIG9mIHRoZSBvYmplY3QuCiAgICAgLy8gVGhlIGxl
Z2VuZCB0aGVuIGdldHMgc2tpcHBlZCBkdXJpbmcgbm9ybWFsIGxheW91dC4gVGhlIHNhbWUgaXMg
dHJ1ZSBmb3IgcnVieSB0ZXh0LgpAQCAtNDk1LDIwICs0OTUsMjAgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dEJsb2NrQ2hpbGRyZQogICAgIFJlbmRlckJveCogbmV4dCA9IGZpcnN0Q2hp
bGRCb3goKTsKIAogICAgIHdoaWxlIChuZXh0KSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGQg
PSBuZXh0OwotICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7CisgICAgICAg
IFJlbmRlckJveCYgY2hpbGQgPSAqbmV4dDsKKyAgICAgICAgbmV4dCA9IGNoaWxkLm5leHRTaWJs
aW5nQm94KCk7CiAKLSAgICAgICAgaWYgKGNoaWxkVG9FeGNsdWRlID09IGNoaWxkKQorICAgICAg
ICBpZiAoY2hpbGRUb0V4Y2x1ZGUgPT0gJmNoaWxkKQogICAgICAgICAgICAgY29udGludWU7IC8v
IFNraXAgdGhpcyBjaGlsZCwgc2luY2UgaXQgd2lsbCBiZSBwb3NpdGlvbmVkIGJ5IHRoZSBzcGVj
aWFsaXplZCBzdWJjbGFzcyAoZmllbGRzZXRzIGFuZCBydWJ5IHJ1bnMpLgogCiAgICAgICAgIHVw
ZGF0ZUJsb2NrQ2hpbGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQocmVsYXlvdXRDaGlsZHJlbiwgY2hp
bGQpOwogCi0gICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAg
ICAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVj
dChjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewor
ICAgICAgICAgICAgY2hpbGQuY29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmpl
Y3QoY2hpbGQpOwogICAgICAgICAgICAgYWRqdXN0UG9zaXRpb25lZEJsb2NrKGNoaWxkLCBtYXJn
aW5JbmZvKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
aGlsZC0+aXNGbG9hdGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC5pc0Zsb2F0aW5nKCkpIHsK
ICAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KGNoaWxkKTsKICAgICAgICAgICAgIGFk
anVzdEZsb2F0aW5nQmxvY2sobWFyZ2luSW5mbyk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTUyMywxMyArNTIzLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxk
cmUKICAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFy
Z2luSW5mbyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFJl
bmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQmIHByZXZp
b3VzRmxvYXRMb2dpY2FsQm90dG9tLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20p
Cit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZXJCb3gmIGNoaWxk
LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBMYXlvdXRVbml0JiBwcmV2aW91c0Zsb2F0TG9naWNh
bEJvdHRvbSwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKQogewogICAgIExheW91
dFVuaXQgb2xkUG9zTWFyZ2luQmVmb3JlID0gbWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKTsKICAg
ICBMYXlvdXRVbml0IG9sZE5lZ01hcmdpbkJlZm9yZSA9IG1heE5lZ2F0aXZlTWFyZ2luQmVmb3Jl
KCk7CiAKICAgICAvLyBUaGUgY2hpbGQgaXMgYSBub3JtYWwgZmxvdyBvYmplY3QuIENvbXB1dGUg
dGhlIG1hcmdpbnMgd2Ugd2lsbCB1c2UgZm9yIGNvbGxhcHNpbmcgbm93LgotICAgIGNoaWxkLT5j
b21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMpOworICAgIGNoaWxkLmNvbXB1
dGVBbmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdpbnModGhpcyk7CiAKICAgICAvLyBUcnkgdG8gZ3Vl
c3Mgb3VyIGNvcnJlY3QgbG9naWNhbCB0b3AgcG9zaXRpb24uIEluIG1vc3QgY2FzZXMgdGhpcyBn
dWVzcyB3aWxsCiAgICAgLy8gYmUgY29ycmVjdC4gT25seSBpZiB3ZSdyZSB3cm9uZyAod2hlbiB3
ZSBjb21wdXRlIHRoZSByZWFsIGxvZ2ljYWwgdG9wIHBvc2l0aW9uKQpAQCAtNTM4LDcgKzUzOCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3BFc3RpbWF0ZSA9IGVzdGltYXRlTG9naWNhbFRvcFBvc2l0aW9uKGNoaWxk
LCBtYXJnaW5JbmZvLCBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9uKTsKIAogICAgIC8vIENhY2hl
IG91ciBvbGQgcmVjdCBzbyB0aGF0IHdlIGNhbiBkaXJ0eSB0aGUgcHJvcGVyIHJlcGFpbnQgcmVj
dHMgaWYgdGhlIGNoaWxkIG1vdmVzLgotICAgIExheW91dFJlY3Qgb2xkUmVjdCA9IGNoaWxkLT5m
cmFtZVJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IG9sZFJlY3QgPSBjaGlsZC5mcmFtZVJlY3QoKTsK
ICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQp
OwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtNTQ4LDkgKzU0OCw5IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQo
Y2hpbGQsIGxvZ2ljYWxUb3BFc3RpbWF0ZSwgQXBwbHlMYXlvdXREZWx0YSk7CiAgICAgZXN0aW1h
dGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNoaWxkKTsKIAotICAgIFJlbmRlckJsb2NrRmxvdyog
Y2hpbGRCbG9ja0Zsb3cgPSBjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSA/IHRvUmVuZGVyQmxv
Y2tGbG93KGNoaWxkKSA6IDA7CisgICAgUmVuZGVyQmxvY2tGbG93KiBjaGlsZEJsb2NrRmxvdyA9
IGNoaWxkLmlzUmVuZGVyQmxvY2tGbG93KCkgPyB0b1JlbmRlckJsb2NrRmxvdygmY2hpbGQpIDog
bnVsbHB0cjsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBmYWxzZTsKLSAg
ICBpZiAobG9naWNhbFRvcEVzdGltYXRlICE9IG9sZExvZ2ljYWxUb3AgJiYgIWNoaWxkLT5hdm9p
ZHNGbG9hdHMoKSAmJiBjaGlsZEJsb2NrRmxvdyAmJiBjaGlsZEJsb2NrRmxvdy0+Y29udGFpbnNG
bG9hdHMoKSkKKyAgICBpZiAobG9naWNhbFRvcEVzdGltYXRlICE9IG9sZExvZ2ljYWxUb3AgJiYg
IWNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxvY2tGbG93
LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogICAgIGVsc2UgaWYgKFVOTElLRUxZ
KGxvZ2ljYWxUb3BFc3RpbWF0ZS5taWdodEJlU2F0dXJhdGVkKCkpKQpAQCAtNTYwLDcgKzU2MCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICAgICAgICAgLy8g
bWlnaHQgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMuIElmIHRoaXMgaXMgdGhlIGNhc2UgYWx3YXlz
IG1hcmsgZm9yIGxheW91dC4KICAgICAgICAgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9IHRy
dWU7CiAjZW5kaWYKLSAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxk
LT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsKKyAgICBlbHNlIGlmICghY2hpbGQuYXZvaWRzRmxv
YXRzKCkgfHwgY2hpbGQuc2hyaW5rVG9Bdm9pZEZsb2F0cygpKSB7CiAgICAgICAgIC8vIElmIGFu
IGVsZW1lbnQgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIGZsb2F0cywgdGhl
biBhbHdheXMgbWFyayBpdCBmb3IKICAgICAgICAgLy8gbGF5b3V0LgogICAgICAgICBMYXlvdXRV
bml0IGZiID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBsb3dlc3RGbG9hdExvZ2lj
YWxCb3R0b20oKSk7CkBAIC01NzEsMTcgKzU3MSwxNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
bGF5b3V0QmxvY2tDaGlsZChSCiAgICAgaWYgKGNoaWxkQmxvY2tGbG93KSB7CiAgICAgICAgIGlm
IChtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzKQogICAgICAgICAgICAgY2hpbGRCbG9ja0Zsb3ct
Pm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLSAgICAgICAgaWYgKCFj
aGlsZC0+aXNXcml0aW5nTW9kZVJvb3QoKSkKKyAgICAgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdN
b2RlUm9vdCgpKQogICAgICAgICAgICAgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgo
cHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxUb3AgKyBjaGlsZEJsb2NrRmxv
dy0+bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkpOwogICAgIH0KIAotICAgIGlmICghY2hpbGQt
Pm5lZWRzTGF5b3V0KCkpCi0gICAgICAgIGNoaWxkLT5tYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0
SWZOZWVkZWQoKTsKKyAgICBpZiAoIWNoaWxkLm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGNoaWxk
Lm1hcmtGb3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBjaGlsZEhh
ZExheW91dCA9IGNoaWxkLT5ldmVySGFkTGF5b3V0KCk7Ci0gICAgYm9vbCBjaGlsZE5lZWRlZExh
eW91dCA9IGNoaWxkLT5uZWVkc0xheW91dCgpOworICAgIGJvb2wgY2hpbGRIYWRMYXlvdXQgPSBj
aGlsZC5ldmVySGFkTGF5b3V0KCk7CisgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxk
Lm5lZWRzTGF5b3V0KCk7CiAgICAgaWYgKGNoaWxkTmVlZGVkTGF5b3V0KQotICAgICAgICBjaGls
ZC0+bGF5b3V0KCk7CisgICAgICAgIGNoaWxkLmxheW91dCgpOwogCiAgICAgLy8gQ2FjaGUgaWYg
d2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrIHJpZ2h0IG5vdy4KICAgICBib29sIGF0QmVm
b3JlU2lkZU9mQmxvY2sgPSBtYXJnaW5JbmZvLmF0QmVmb3JlU2lkZU9mQmxvY2soKTsKQEAgLTU5
NSw1MCArNTk1LDQ5IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIK
ICAgICAKICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2lu
YXRlZCgpOwogICAgIGlmIChwYWdpbmF0ZWQpCi0gICAgICAgIGxvZ2ljYWxUb3BBZnRlckNsZWFy
ID0gYWRqdXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24obG9naWNhbFRvcEFmdGVyQ2xlYXIsIGVz
dGltYXRlV2l0aG91dFBhZ2luYXRpb24sIGNoaWxkLAotICAgICAgICAgICAgYXRCZWZvcmVTaWRl
T2ZCbG9jayAmJiBsb2dpY2FsVG9wQmVmb3JlQ2xlYXIgPT0gbG9naWNhbFRvcEFmdGVyQ2xlYXIp
OworICAgICAgICBsb2dpY2FsVG9wQWZ0ZXJDbGVhciA9IGFkanVzdEJsb2NrQ2hpbGRGb3JQYWdp
bmF0aW9uKGxvZ2ljYWxUb3BBZnRlckNsZWFyLCBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9uLCBj
aGlsZCwgYXRCZWZvcmVTaWRlT2ZCbG9jayAmJiBsb2dpY2FsVG9wQmVmb3JlQ2xlYXIgPT0gbG9n
aWNhbFRvcEFmdGVyQ2xlYXIpOwogCiAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGNoaWxkLCBs
b2dpY2FsVG9wQWZ0ZXJDbGVhciwgQXBwbHlMYXlvdXREZWx0YSk7CiAKICAgICAvLyBOb3cgd2Ug
aGF2ZSBhIGZpbmFsIHRvcCBwb3NpdGlvbi4gU2VlIGlmIGl0IHJlYWxseSBkb2VzIGVuZCB1cCBi
ZWluZyBkaWZmZXJlbnQgZnJvbSBvdXIgZXN0aW1hdGUuCiAgICAgLy8gY2xlYXJGbG9hdHNJZk5l
ZWRlZCBjYW4gYWxzbyBtYXJrIHRoZSBjaGlsZCBhcyBuZWVkaW5nIGEgbGF5b3V0IGV2ZW4gdGhv
dWdoIHdlIGRpZG4ndCBtb3ZlLiBUaGlzIGhhcHBlbnMKICAgICAvLyB3aGVuIGNvbGxhcHNlTWFy
Z2lucyBkeW5hbWljYWxseSBhZGRzIG92ZXJoYW5naW5nIGZsb2F0cyBiZWNhdXNlIG9mIGEgY2hp
bGQgd2l0aCBuZWdhdGl2ZSBtYXJnaW5zLgotICAgIGlmIChsb2dpY2FsVG9wQWZ0ZXJDbGVhciAh
PSBsb2dpY2FsVG9wRXN0aW1hdGUgfHwgY2hpbGQtPm5lZWRzTGF5b3V0KCkgfHwgKHBhZ2luYXRl
ZCAmJiBjaGlsZEJsb2NrRmxvdyAmJiBjaGlsZEJsb2NrRmxvdy0+c2hvdWxkQnJlYWtBdExpbmVU
b0F2b2lkV2lkb3coKSkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5zaHJpbmtUb0F2b2lkRmxvYXRz
KCkpIHsKKyAgICBpZiAobG9naWNhbFRvcEFmdGVyQ2xlYXIgIT0gbG9naWNhbFRvcEVzdGltYXRl
IHx8IGNoaWxkLm5lZWRzTGF5b3V0KCkgfHwgKHBhZ2luYXRlZCAmJiBjaGlsZEJsb2NrRmxvdyAm
JiBjaGlsZEJsb2NrRmxvdy0+c2hvdWxkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3coKSkpIHsKKyAg
ICAgICAgaWYgKGNoaWxkLnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewogICAgICAgICAgICAgLy8g
VGhlIGNoaWxkJ3Mgd2lkdGggZGVwZW5kcyBvbiB0aGUgbGluZSB3aWR0aC4KICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIGNoaWxkIHNoaWZ0cyB0byBjbGVhciBhbiBpdGVtLCBpdHMgd2lkdGggY2Fu
CiAgICAgICAgICAgICAvLyBjaGFuZ2UgKGJlY2F1c2UgaXQgaGFzIG1vcmUgYXZhaWxhYmxlIGxp
bmUgd2lkdGgpLgogICAgICAgICAgICAgLy8gU28gZ28gYWhlYWQgYW5kIG1hcmsgdGhlIGl0ZW0g
YXMgZGlydHkuCi0gICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOworICAgICAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY2hpbGRCbG9ja0Zsb3cpIHsK
LSAgICAgICAgICAgIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93
LT5jb250YWluc0Zsb2F0cygpKQorICAgICAgICAgICAgaWYgKCFjaGlsZC5hdm9pZHNGbG9hdHMo
KSAmJiBjaGlsZEJsb2NrRmxvdy0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgICAgICAgICBj
aGlsZEJsb2NrRmxvdy0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwot
ICAgICAgICAgICAgaWYgKCFjaGlsZC0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBj
aGlsZC0+bWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBp
ZiAoIWNoaWxkLm5lZWRzTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgY2hpbGQubWFya0ZvclBh
Z2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBPdXIg
Z3Vlc3Mgd2FzIHdyb25nLiBNYWtlIHRoZSBjaGlsZCBsYXkgaXRzZWxmIG91dCBhZ2Fpbi4KLSAg
ICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIGNoaWxkLmxheW91dElmTmVl
ZGVkKCk7CiAgICAgfQogCiAgICAgaWYgKHVwZGF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY2hp
bGQpKSB7Ci0gICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAg
ICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgY2hpbGQuc2V0TmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgY2hpbGQubGF5b3V0SWZOZWVkZWQoKTsKICAgICB9
CiAKICAgICAvLyBXZSBhcmUgbm8gbG9uZ2VyIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrIGlmIHdl
IGVuY291bnRlciBhIG5vbi1lbXB0eSBjaGlsZC4gIAogICAgIC8vIFRoaXMgaGFzIHRvIGJlIGRv
bmUgYWZ0ZXIgY2hlY2tpbmcgZm9yIGNsZWFyLCBzbyB0aGF0IG1hcmdpbnMgY2FuIGJlIHJlc2V0
IGlmIGEgY2xlYXIgb2NjdXJyZWQuCi0gICAgaWYgKG1hcmdpbkluZm8uYXRCZWZvcmVTaWRlT2ZC
bG9jaygpICYmICFjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpCisgICAgaWYgKG1hcmdp
bkluZm8uYXRCZWZvcmVTaWRlT2ZCbG9jaygpICYmICFjaGlsZC5pc1NlbGZDb2xsYXBzaW5nQmxv
Y2soKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRBdEJlZm9yZVNpZGVPZkJsb2NrKGZhbHNlKTsK
IAogICAgIC8vIE5vdyBwbGFjZSB0aGUgY2hpbGQgaW4gdGhlIGNvcnJlY3QgbGVmdCBwb3NpdGlv
bgogICAgIGRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChjaGlsZCwgQXBwbHlM
YXlvdXREZWx0YSk7CiAKLSAgICBMYXlvdXRTaXplIGNoaWxkT2Zmc2V0ID0gY2hpbGQtPmxvY2F0
aW9uKCkgLSBvbGRSZWN0LmxvY2F0aW9uKCk7CisgICAgTGF5b3V0U2l6ZSBjaGlsZE9mZnNldCA9
IGNoaWxkLmxvY2F0aW9uKCkgLSBvbGRSZWN0LmxvY2F0aW9uKCk7CiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0gICAgcmVsYXlvdXRTaGFwZURlc2NlbmRhbnRJZk1vdmVkKGNoaWxkLT5pc1JlbmRl
ckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDAsIGNoaWxkT2Zmc2V0KTsKKyAgICBy
ZWxheW91dFNoYXBlRGVzY2VuZGFudElmTW92ZWQoY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9S
ZW5kZXJCbG9jaygmY2hpbGQpIDogbnVsbHB0ciwgY2hpbGRPZmZzZXQpOwogI2VuZGlmCiAKICAg
ICAvLyBVcGRhdGUgb3VyIGhlaWdodCBub3cgdGhhdCB0aGUgY2hpbGQgaGFzIGJlZW4gcGxhY2Vk
IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLgpAQCAtNjUwLDcgKzY0OSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIG92
ZXJoYW5naW5nIGZsb2F0cyB0aGF0IGludHJ1ZGUgaW50byBmb2xsb3dpbmcgc2libGluZ3MgKG9y
IHBvc3NpYmx5IG91dAogICAgIC8vIG9mIHRoaXMgYmxvY2spLCB0aGVuIHRoZSBwYXJlbnQgZ2V0
cyBub3RpZmllZCBvZiB0aGUgZmxvYXRzIG5vdy4KICAgICBpZiAoY2hpbGRCbG9ja0Zsb3cgJiYg
Y2hpbGRCbG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgIG1heEZsb2F0TG9naWNh
bEJvdHRvbSA9IG1heChtYXhGbG9hdExvZ2ljYWxCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRz
KHRvUmVuZGVyQmxvY2tGbG93KGNoaWxkKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CisgICAgICAg
IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChtYXhGbG9hdExvZ2ljYWxCb3R0b20sIGFkZE92
ZXJoYW5naW5nRmxvYXRzKCpjaGlsZEJsb2NrRmxvdywgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CiAK
ICAgICBpZiAoY2hpbGRPZmZzZXQud2lkdGgoKSB8fCBjaGlsZE9mZnNldC5oZWlnaHQoKSkgewog
ICAgICAgICB2aWV3KCkuYWRkTGF5b3V0RGVsdGEoY2hpbGRPZmZzZXQpOwpAQCAtNjU4LDEzICs2
NTcsMTMgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQoUgogICAgICAg
ICAvLyBJZiB0aGUgY2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdCBhcyB3ZWxsIGFz
IGFueSBmbG9hdGluZy9wb3NpdGlvbmVkCiAgICAgICAgIC8vIGRlc2NlbmRhbnRzLiBBbiBleGNl
cHRpb24gaXMgaWYgd2UgbmVlZCBhIGxheW91dC4gSW4gdGhpcyBjYXNlLCB3ZSBrbm93IHdlJ3Jl
IGdvaW5nIHRvCiAgICAgICAgIC8vIHJlcGFpbnQgb3Vyc2VsdmVzIChhbmQgdGhlIGNoaWxkKSBh
bnl3YXkuCi0gICAgICAgIGlmIChjaGlsZEhhZExheW91dCAmJiAhc2VsZk5lZWRzTGF5b3V0KCkg
JiYgY2hpbGQtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQotICAgICAgICAgICAgY2hp
bGQtPnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKG9sZFJlY3QpOworICAgICAgICBpZiAoY2hp
bGRIYWRMYXlvdXQgJiYgIXNlbGZOZWVkc0xheW91dCgpICYmIGNoaWxkLmNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpKQorICAgICAgICAgICAgY2hpbGQucmVwYWludER1cmluZ0xheW91dElm
TW92ZWQob2xkUmVjdCk7CiAgICAgfQogCi0gICAgaWYgKCFjaGlsZEhhZExheW91dCAmJiBjaGls
ZC0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpIHsKLSAgICAgICAgY2hpbGQtPnJlcGFp
bnQoKTsKLSAgICAgICAgY2hpbGQtPnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyh0cnVlKTsKKyAg
ICBpZiAoIWNoaWxkSGFkTGF5b3V0ICYmIGNoaWxkLmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpKSB7CisgICAgICAgIGNoaWxkLnJlcGFpbnQoKTsKKyAgICAgICAgY2hpbGQucmVwYWludE92
ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KIAogICAgIGlmIChwYWdpbmF0ZWQpIHsKQEAg
LTY3NywxMCArNjc2LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxk
KFIKICAgICBBU1NFUlQodmlldygpLmxheW91dERlbHRhTWF0Y2hlcyhvbGRMYXlvdXREZWx0YSkp
OwogfQogCi12b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0UG9zaXRpb25lZEJsb2NrKFJlbmRl
ckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCit2b2lkIFJlbmRlckJs
b2NrRmxvdzo6YWRqdXN0UG9zaXRpb25lZEJsb2NrKFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IE1h
cmdpbkluZm8mIG1hcmdpbkluZm8pCiB7CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpOwotICAgIGJvb2wgaGFzU3RhdGljQmxvY2tQb3NpdGlvbiA9IGNo
aWxkLT5zdHlsZSgpLT5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9uKGlzSG9yaXpvbnRhbCk7CisgICAg
Ym9vbCBoYXNTdGF0aWNCbG9ja1Bvc2l0aW9uID0gY2hpbGQuc3R5bGUoKS0+aGFzU3RhdGljQmxv
Y2tQb3NpdGlvbihpc0hvcml6b250YWwpOwogICAgIAogICAgIExheW91dFVuaXQgbG9naWNhbFRv
cCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICB1cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNo
aWxkKGNoaWxkLCBsb2dpY2FsVG9wKTsKQEAgLTY5MywxMSArNjkyLDExIEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjphZGp1c3RQb3NpdGlvbmVkQmwKICAgICAgICAgbG9naWNhbFRvcCArPSBjb2xs
YXBzZWRCZWZvcmVQb3MgLSBjb2xsYXBzZWRCZWZvcmVOZWc7CiAgICAgfQogICAgIAotICAgIFJl
bmRlckxheWVyKiBjaGlsZExheWVyID0gY2hpbGQtPmxheWVyKCk7CisgICAgUmVuZGVyTGF5ZXIq
IGNoaWxkTGF5ZXIgPSBjaGlsZC5sYXllcigpOwogICAgIGlmIChjaGlsZExheWVyLT5zdGF0aWNC
bG9ja1Bvc2l0aW9uKCkgIT0gbG9naWNhbFRvcCkgewogICAgICAgICBjaGlsZExheWVyLT5zZXRT
dGF0aWNCbG9ja1Bvc2l0aW9uKGxvZ2ljYWxUb3ApOwogICAgICAgICBpZiAoaGFzU3RhdGljQmxv
Y2tQb3NpdGlvbikKLSAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7CisgICAgICAgICAgICBjaGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7CiAgICAgfQogfQogCkBAIC03MjIsNyArNzIxLDI0IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjphZGp1c3RGbG9hdGluZ0Jsb2MKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWln
aHQoKSAtIG1hcmdpbk9mZnNldCk7CiB9CiAKLVJlbmRlckJsb2NrRmxvdzo6TWFyZ2luVmFsdWVz
IFJlbmRlckJsb2NrRmxvdzo6bWFyZ2luVmFsdWVzRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkg
Y29uc3QKK3ZvaWQgUmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZv
ckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRvcCkKK3sKKyAgICBp
ZiAoY2hpbGQuc3R5bGUoKS0+aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkpCisgICAgICAg
IHNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3AsIHN0YXJ0
QWxpZ25lZE9mZnNldEZvckxpbmUobG9naWNhbFRvcCwgZmFsc2UpKTsKKyAgICBlbHNlCisgICAg
ICAgIHNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3AsIHN0
YXJ0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wKSk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2tG
bG93OjpzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExh
eW91dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pCit7CisgICAg
aWYgKGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgeworICAgICAgICAvLyBTaGlmdCB0aGUg
aW5saW5lIHBvc2l0aW9uIHRvIGV4Y2x1ZGUgdGhlIHJlZ2lvbiBvZmZzZXQuCisgICAgICAgIGlu
bGluZVBvc2l0aW9uICs9IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudCgpIC0gc3RhcnRPZmZzZXRGb3JD
b250ZW50KGJsb2NrT2Zmc2V0KTsKKyAgICB9CisgICAgY2hpbGQubGF5ZXIoKS0+c2V0U3RhdGlj
SW5saW5lUG9zaXRpb24oaW5saW5lUG9zaXRpb24pOworfQorCitSZW5kZXJCbG9ja0Zsb3c6Ok1h
cmdpblZhbHVlcyBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpblZhbHVlc0ZvckNoaWxkKFJlbmRlckJv
eCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBjaGlsZEJlZm9yZVBvc2l0aXZlID0g
MDsKICAgICBMYXlvdXRVbml0IGNoaWxkQmVmb3JlTmVnYXRpdmUgPSAwOwpAQCAtNzMyLDIxICs3
NDgsMjEgQEAgUmVuZGVyQmxvY2tGbG93OjpNYXJnaW5WYWx1ZXMgUmVuZGVyQmxvYwogICAgIExh
eW91dFVuaXQgYmVmb3JlTWFyZ2luID0gMDsKICAgICBMYXlvdXRVbml0IGFmdGVyTWFyZ2luID0g
MDsKIAotICAgIFJlbmRlckJsb2NrRmxvdyogY2hpbGRSZW5kZXJCbG9jayA9IGNoaWxkLT5pc1Jl
bmRlckJsb2NrRmxvdygpID8gdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpIDogMDsKKyAgICBSZW5k
ZXJCbG9ja0Zsb3cqIGNoaWxkUmVuZGVyQmxvY2sgPSBjaGlsZC5pc1JlbmRlckJsb2NrRmxvdygp
ID8gdG9SZW5kZXJCbG9ja0Zsb3coJmNoaWxkKSA6IG51bGxwdHI7CiAgICAgCiAgICAgLy8gSWYg
dGhlIGNoaWxkIGhhcyB0aGUgc2FtZSBkaXJlY3Rpb25hbGl0eSBhcyB3ZSBkbywgdGhlbiB3ZSBj
YW4ganVzdCByZXR1cm4gaXRzCiAgICAgLy8gbWFyZ2lucyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24u
Ci0gICAgaWYgKCFjaGlsZC0+aXNXcml0aW5nTW9kZVJvb3QoKSkgeworICAgIGlmICghY2hpbGQu
aXNXcml0aW5nTW9kZVJvb3QoKSkgewogICAgICAgICBpZiAoY2hpbGRSZW5kZXJCbG9jaykgewog
ICAgICAgICAgICAgY2hpbGRCZWZvcmVQb3NpdGl2ZSA9IGNoaWxkUmVuZGVyQmxvY2stPm1heFBv
c2l0aXZlTWFyZ2luQmVmb3JlKCk7CiAgICAgICAgICAgICBjaGlsZEJlZm9yZU5lZ2F0aXZlID0g
Y2hpbGRSZW5kZXJCbG9jay0+bWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKTsKICAgICAgICAgICAg
IGNoaWxkQWZ0ZXJQb3NpdGl2ZSA9IGNoaWxkUmVuZGVyQmxvY2stPm1heFBvc2l0aXZlTWFyZ2lu
QWZ0ZXIoKTsKICAgICAgICAgICAgIGNoaWxkQWZ0ZXJOZWdhdGl2ZSA9IGNoaWxkUmVuZGVyQmxv
Y2stPm1heE5lZ2F0aXZlTWFyZ2luQWZ0ZXIoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGJlZm9yZU1hcmdpbiA9IGNoaWxkLT5tYXJnaW5CZWZvcmUoKTsKLSAgICAgICAgICAgIGFm
dGVyTWFyZ2luID0gY2hpbGQtPm1hcmdpbkFmdGVyKCk7CisgICAgICAgICAgICBiZWZvcmVNYXJn
aW4gPSBjaGlsZC5tYXJnaW5CZWZvcmUoKTsKKyAgICAgICAgICAgIGFmdGVyTWFyZ2luID0gY2hp
bGQubWFyZ2luQWZ0ZXIoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAg
IH0gZWxzZSBpZiAoY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIC8vIFRoZSBjaGlsZCBoYXMgYSBkaWZmZXJlbnQg
ZGlyZWN0aW9uYWxpdHkuIElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdzIGp1c3QK
ICAgICAgICAgLy8gZmxpcHBlZCByZWxhdGl2ZSB0byB1cy4gV2UgY2FuIHVzZSB0aGUgbWFyZ2lu
cyBmb3IgdGhlIG9wcG9zaXRlIGVkZ2VzLgogICAgICAgICBpZiAoY2hpbGRSZW5kZXJCbG9jaykg
ewpAQCAtNzU1LDggKzc3MSw4IEBAIFJlbmRlckJsb2NrRmxvdzo6TWFyZ2luVmFsdWVzIFJlbmRl
ckJsb2MKICAgICAgICAgICAgIGNoaWxkQWZ0ZXJQb3NpdGl2ZSA9IGNoaWxkUmVuZGVyQmxvY2st
Pm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7CiAgICAgICAgICAgICBjaGlsZEFmdGVyTmVnYXRp
dmUgPSBjaGlsZFJlbmRlckJsb2NrLT5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYmVmb3JlTWFyZ2luID0gY2hpbGQtPm1hcmdpbkFmdGVy
KCk7Ci0gICAgICAgICAgICBhZnRlck1hcmdpbiA9IGNoaWxkLT5tYXJnaW5CZWZvcmUoKTsKKyAg
ICAgICAgICAgIGJlZm9yZU1hcmdpbiA9IGNoaWxkLm1hcmdpbkFmdGVyKCk7CisgICAgICAgICAg
ICBhZnRlck1hcmdpbiA9IGNoaWxkLm1hcmdpbkJlZm9yZSgpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gVGhlIGNoaWxkIGlzIHBlcnBlbmRpY3VsYXIgdG8gdXMsIHdoaWNo
IG1lYW5zIGl0cyBtYXJnaW5zIGRvbid0IGNvbGxhcHNlIGJ1dCBhcmUgb24gdGhlCkBAIC03ODIs
MTEgKzc5OCwxMSBAQCBSZW5kZXJCbG9ja0Zsb3c6Ok1hcmdpblZhbHVlcyBSZW5kZXJCbG9jCiAg
ICAgcmV0dXJuIE1hcmdpblZhbHVlcyhjaGlsZEJlZm9yZVBvc2l0aXZlLCBjaGlsZEJlZm9yZU5l
Z2F0aXZlLCBjaGlsZEFmdGVyUG9zaXRpdmUsIGNoaWxkQWZ0ZXJOZWdhdGl2ZSk7CiB9CiAKLUxh
eW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGls
ZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK0xheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpj
b2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykK
IHsKICAgICBib29sIGNoaWxkRGlzY2FyZE1hcmdpbkJlZm9yZSA9IG11c3REaXNjYXJkTWFyZ2lu
QmVmb3JlRm9yQ2hpbGQoY2hpbGQpOwogICAgIGJvb2wgY2hpbGREaXNjYXJkTWFyZ2luQWZ0ZXIg
PSBtdXN0RGlzY2FyZE1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpOwotICAgIGJvb2wgY2hpbGRJ
c1NlbGZDb2xsYXBzaW5nID0gY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpOworICAgIGJv
b2wgY2hpbGRJc1NlbGZDb2xsYXBzaW5nID0gY2hpbGQuaXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCk7
CiAKICAgICAvLyBUaGUgY2hpbGQgZGlzY2FyZHMgdGhlIGJlZm9yZSBtYXJnaW4gd2hlbiB0aGUg
dGhlIGFmdGVyIG1hcmdpbiBoYXMgZGlzY2FyZCBpbiB0aGUgY2FzZSBvZiBhIHNlbGYgY29sbGFw
c2luZyBibG9jay4KICAgICBjaGlsZERpc2NhcmRNYXJnaW5CZWZvcmUgPSBjaGlsZERpc2NhcmRN
YXJnaW5CZWZvcmUgfHwgKGNoaWxkRGlzY2FyZE1hcmdpbkFmdGVyICYmIGNoaWxkSXNTZWxmQ29s
bGFwc2luZyk7CkBAIC05MTcsMTAgKzkzMywxMCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxv
dzo6Y29sbGFwc2VNYXJnCiAgICAgLy8gb3IgY2xlYXIgaXQgYW55d2F5LCBzbyBkb24ndCB3b3Jy
eSBhYm91dCBhbnkgZmxvYXRpbmcgY2hpbGRyZW4gaXQgbWF5IGNvbnRhaW4uCiAgICAgTGF5b3V0
VW5pdCBvbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgIHNldExvZ2ljYWxI
ZWlnaHQobG9naWNhbFRvcCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpOworICAgIFJlbmRlck9iamVjdCogcHJldiA9IGNoaWxkLnByZXZpb3VzU2li
bGluZygpOwogICAgIGlmIChwcmV2ICYmIHByZXYtPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXBy
ZXYtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBSZW5kZXJC
bG9ja0Zsb3cqIGJsb2NrID0gdG9SZW5kZXJCbG9ja0Zsb3cocHJldik7Ci0gICAgICAgIGlmIChi
bG9jay0+Y29udGFpbnNGbG9hdHMoKSAmJiAhYmxvY2stPmF2b2lkc0Zsb2F0cygpICYmIChibG9j
ay0+bG9naWNhbFRvcCgpICsgYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpKSA+IGxv
Z2ljYWxUb3ApIAorICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrID0gdG9SZW5kZXJCbG9j
a0Zsb3coKnByZXYpOworICAgICAgICBpZiAoYmxvY2suY29udGFpbnNGbG9hdHMoKSAmJiAhYmxv
Y2suYXZvaWRzRmxvYXRzKCkgJiYgKGJsb2NrLmxvZ2ljYWxUb3AoKSArIGJsb2NrLmxvd2VzdEZs
b2F0TG9naWNhbEJvdHRvbSgpKSA+IGxvZ2ljYWxUb3ApCiAgICAgICAgICAgICBhZGRPdmVyaGFu
Z2luZ0Zsb2F0cyhibG9jaywgZmFsc2UpOwogICAgIH0KICAgICBzZXRMb2dpY2FsSGVpZ2h0KG9s
ZExvZ2ljYWxIZWlnaHQpOwpAQCAtOTI4LDEzICs5NDQsMTMgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9ja0Zsb3c6OmNvbGxhcHNlTWFyZwogICAgIHJldHVybiBsb2dpY2FsVG9wOwogfQogCi1MYXlv
dXRVbml0IFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNo
aWxkLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBMYXlvdXRVbml0IG9sZFRvcFBvc01hcmdpbiwg
TGF5b3V0VW5pdCBvbGRUb3BOZWdNYXJnaW4sIExheW91dFVuaXQgeVBvcykKK0xheW91dFVuaXQg
UmVuZGVyQmxvY2tGbG93OjpjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCYgY2hpbGQsIE1h
cmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQgb2xkVG9wUG9zTWFyZ2luLCBMYXlvdXRV
bml0IG9sZFRvcE5lZ01hcmdpbiwgTGF5b3V0VW5pdCB5UG9zKQogewogICAgIExheW91dFVuaXQg
aGVpZ2h0SW5jcmVhc2UgPSBnZXRDbGVhckRlbHRhKGNoaWxkLCB5UG9zKTsKICAgICBpZiAoIWhl
aWdodEluY3JlYXNlKQogICAgICAgICByZXR1cm4geVBvczsKIAotICAgIGlmIChjaGlsZC0+aXNT
ZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKKyAgICBpZiAoY2hpbGQuaXNTZWxmQ29sbGFwc2luZ0Js
b2NrKCkpIHsKICAgICAgICAgYm9vbCBjaGlsZERpc2NhcmRNYXJnaW4gPSBtdXN0RGlzY2FyZE1h
cmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSB8fCBtdXN0RGlzY2FyZE1hcmdpbkFmdGVyRm9yQ2hp
bGQoY2hpbGQpOwogCiAgICAgICAgIC8vIEZvciBzZWxmLWNvbGxhcHNpbmcgYmxvY2tzIHRoYXQg
Y2xlYXIsIHRoZXkgY2FuIHN0aWxsIGNvbGxhcHNlIHRoZWlyCkBAIC05NTUsNyArOTcxLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzSQogICAgICAgICAvLyBTbyB0
aGUgcGFyZW50J3MgYm90dG9tIG1hcmdpbiBjYW5ub3QgY29sbGFwc2UgdGhyb3VnaCB0aGlzIGJs
b2NrIG9yIGFueSBzdWJzZXF1ZW50IHNlbGYtY29sbGFwc2luZyBibG9ja3MuIENoZWNrIHN1YnNl
cXVlbnQgc2libGluZ3MKICAgICAgICAgLy8gZm9yIGEgYmxvY2sgd2l0aCBoZWlnaHQgLSBpZiBu
b25lIGlzIGZvdW5kIHRoZW4gZG9uJ3QgYWxsb3cgdGhlIG1hcmdpbnMgdG8gY29sbGFwc2Ugd2l0
aCB0aGUgcGFyZW50LgogICAgICAgICBib29sIHdvdWxkQ29sbGFwc2VNYXJnaW5zV2l0aFBhcmVu
dCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VNYXJnaW5BZnRlcldpdGhDaGlsZHJlbigpOwotICAg
ICAgICBmb3IgKFJlbmRlckJveCogY3VyciA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOyBjdXJy
ICYmIHdvdWxkQ29sbGFwc2VNYXJnaW5zV2l0aFBhcmVudDsgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nQm94KCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJCb3gqIGN1cnIgPSBjaGlsZC5uZXh0U2li
bGluZ0JveCgpOyBjdXJyICYmIHdvdWxkQ29sbGFwc2VNYXJnaW5zV2l0aFBhcmVudDsgY3VyciA9
IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNGbG9h
dGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFjdXJyLT5pc1NlbGZDb2xsYXBzaW5nQmxv
Y2soKSkKICAgICAgICAgICAgICAgICB3b3VsZENvbGxhcHNlTWFyZ2luc1dpdGhQYXJlbnQgPSBm
YWxzZTsKICAgICAgICAgfQpAQCAtOTY1LDcgKzk4MSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2tGbG93OjpjbGVhckZsb2F0c0kKICAgICAgICAgLy8gQ1NTMi4xOiAidGhlIGFtb3VudCBvZiBj
bGVhcmFuY2UgaXMgc2V0IHNvIHRoYXQgY2xlYXJhbmNlICsgbWFyZ2luLXRvcCA9IFtoZWlnaHQg
b2YgZmxvYXRdLCBpLmUuLCBjbGVhcmFuY2UgPSBbaGVpZ2h0IG9mIGZsb2F0XSAtIG1hcmdpbi10
b3AiCiAgICAgICAgIC8vIE1vdmUgdGhlIHRvcCBvZiB0aGUgY2hpbGQgYm94IHRvIHRoZSBib3R0
b20gb2YgdGhlIGZsb2F0IGlnbm9yaW5nIHRoZSBjaGlsZCdzIHRvcCBtYXJnaW4uCiAgICAgICAg
IExheW91dFVuaXQgY29sbGFwc2VkTWFyZ2luID0gY29sbGFwc2VkTWFyZ2luQmVmb3JlRm9yQ2hp
bGQoY2hpbGQpOwotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGNoaWxkLT5sb2dpY2FsVG9wKCkg
LSBjb2xsYXBzZWRNYXJnaW4pOworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGNoaWxkLmxvZ2lj
YWxUb3AoKSAtIGNvbGxhcHNlZE1hcmdpbik7CiAgICAgICAgIC8vIEEgbmVnYXRpdmUgY29sbGFw
c2VkIG1hcmdpbi10b3AgdmFsdWUgY2FuY2VscyBpdHNlbGYgb3V0IGFzIGl0IGhhcyBhbHJlYWR5
IGJlZW4gZmFjdG9yZWQgaW50byB8eVBvc3wgYWJvdmUuCiAgICAgICAgIGhlaWdodEluY3JlYXNl
IC09IG1heChMYXlvdXRVbml0KCksIGNvbGxhcHNlZE1hcmdpbik7CiAgICAgfSBlbHNlCkBAIC05
ODgsMjMgKzEwMDQsMjMgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRz
SQogICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IHlQb3MgKyBoZWlnaHRJbmNyZWFzZTsKICAg
ICAvLyBBZnRlciBtYXJnaW4gY29sbGFwc2luZywgb25lIG9mIG91ciBmbG9hdHMgbWF5IG5vdyBp
bnRydWRlIGludG8gdGhlIGNoaWxkLiBJZiB0aGUgY2hpbGQgZG9lc24ndCBjb250YWluIGZsb2F0
cyBvZiBpdHMgb3duIGl0CiAgICAgLy8gd29uJ3QgZ2V0IHBpY2tlZCB1cCBmb3IgcmVsYXlvdXQg
ZXZlbiB0aG91Z2ggdGhlIGxvZ2ljYWwgdG9wIGVzdGltYXRlIHdhcyB3cm9uZyAtIHNvIGFkZCB0
aGUgbmV3bHkgaW50cnVkaW5nIGZsb2F0IG5vdy4KLSAgICBpZiAoY29udGFpbnNGbG9hdHMoKSAm
JiBjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQp
LT5jb250YWluc0Zsb2F0cygpICYmICFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgbG93ZXN0Rmxv
YXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wKQotICAgICAgICB0b1JlbmRlckJsb2NrRmxv
dyhjaGlsZCktPmFkZEludHJ1ZGluZ0Zsb2F0cyh0aGlzLCBsb2dpY2FsTGVmdE9mZnNldEZvckNv
bnRlbnQoKSwgbG9naWNhbFRvcCk7CisgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgJiYgY2hpbGQu
aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpLmNvbnRhaW5z
RmxvYXRzKCkgJiYgIWNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbSgpID4gbG9naWNhbFRvcCkKKyAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpLmFk
ZEludHJ1ZGluZ0Zsb2F0cyh0aGlzLCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSwgbG9n
aWNhbFRvcCk7CiAKICAgICByZXR1cm4gbG9naWNhbFRvcDsKIH0KIAotdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6Om1hcmdpbkJlZm9yZUVzdGltYXRlRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCYgcG9zaXRpdmVNYXJnaW5CZWZvcmUsIExheW91dFVuaXQmIG5lZ2F0aXZlTWFyZ2lu
QmVmb3JlLCBib29sJiBkaXNjYXJkTWFyZ2luQmVmb3JlKSBjb25zdAordm9pZCBSZW5kZXJCbG9j
a0Zsb3c6Om1hcmdpbkJlZm9yZUVzdGltYXRlRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5
b3V0VW5pdCYgcG9zaXRpdmVNYXJnaW5CZWZvcmUsIExheW91dFVuaXQmIG5lZ2F0aXZlTWFyZ2lu
QmVmb3JlLCBib29sJiBkaXNjYXJkTWFyZ2luQmVmb3JlKSBjb25zdAogewogICAgIC8vIEdpdmUg
dXAgaWYgaW4gcXVpcmtzIG1vZGUgYW5kIHdlJ3JlIGEgYm9keS90YWJsZSBjZWxsIGFuZCB0aGUg
dG9wIG1hcmdpbiBvZiB0aGUgY2hpbGQgYm94IGlzIHF1aXJreS4KICAgICAvLyBHaXZlIHVwIGlm
IHRoZSBjaGlsZCBzcGVjaWZpZWQgLXdlYmtpdC1tYXJnaW4tY29sbGFwc2U6IHNlcGFyYXRlIHRo
YXQgcHJldmVudHMgY29sbGFwc2luZy4KICAgICAvLyBGSVhNRTogVXNlIHdyaXRpbmcgbW9kZSBp
bmRlcGVuZGVudCBhY2Nlc3NvciBmb3IgbWFyZ2luQmVmb3JlQ29sbGFwc2UuCi0gICAgaWYgKChk
b2N1bWVudCgpLmluUXVpcmtzTW9kZSgpICYmIGhhc01hcmdpbkFmdGVyUXVpcmsoY2hpbGQpICYm
IChpc1RhYmxlQ2VsbCgpIHx8IGlzQm9keSgpKSkgfHwgY2hpbGQtPnN0eWxlKCktPm1hcmdpbkJl
Zm9yZUNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFKQorICAgIGlmICgoZG9jdW1lbnQoKS5pblF1aXJr
c01vZGUoKSAmJiBoYXNNYXJnaW5BZnRlclF1aXJrKGNoaWxkKSAmJiAoaXNUYWJsZUNlbGwoKSB8
fCBpc0JvZHkoKSkpIHx8IGNoaWxkLnN0eWxlKCktPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0g
TVNFUEFSQVRFKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgbWFyZ2lucyBhcmUgZGlz
Y2FyZGVkIGJ5IGEgY2hpbGQgdGhhdCBzcGVjaWZpZWQgLXdlYmtpdC1tYXJnaW4tY29sbGFwc2U6
IGRpc2NhcmQuCiAgICAgLy8gRklYTUU6IFVzZSB3cml0aW5nIG1vZGUgaW5kZXBlbmRlbnQgYWNj
ZXNzb3IgZm9yIG1hcmdpbkJlZm9yZUNvbGxhcHNlLgotICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+
bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNRElTQ0FSRCkgeworICAgIGlmIChjaGlsZC5zdHls
ZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1ESVNDQVJEKSB7CiAgICAgICAgIHBvc2l0
aXZlTWFyZ2luQmVmb3JlID0gMDsKICAgICAgICAgbmVnYXRpdmVNYXJnaW5CZWZvcmUgPSAwOwog
ICAgICAgICBkaXNjYXJkTWFyZ2luQmVmb3JlID0gdHJ1ZTsKQEAgLTEwMTUsMTkgKzEwMzEsMTkg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpbkJlZm9yZUVzdGltYQogICAgIHBvc2l0aXZl
TWFyZ2luQmVmb3JlID0gbWF4KHBvc2l0aXZlTWFyZ2luQmVmb3JlLCBiZWZvcmVDaGlsZE1hcmdp
bik7CiAgICAgbmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBtYXgobmVnYXRpdmVNYXJnaW5CZWZvcmUs
IC1iZWZvcmVDaGlsZE1hcmdpbik7CiAKLSAgICBpZiAoIWNoaWxkLT5pc1JlbmRlckJsb2NrRmxv
dygpKQorICAgIGlmICghY2hpbGQuaXNSZW5kZXJCbG9ja0Zsb3coKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFJlbmRlckJsb2NrRmxvdyogY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxvY2tG
bG93KGNoaWxkKTsKLSAgICBpZiAoY2hpbGRCbG9jay0+Y2hpbGRyZW5JbmxpbmUoKSB8fCBjaGls
ZEJsb2NrLT5pc1dyaXRpbmdNb2RlUm9vdCgpKQorICAgIFJlbmRlckJsb2NrRmxvdyYgY2hpbGRC
bG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KGNoaWxkKTsKKyAgICBpZiAoY2hpbGRCbG9jay5jaGls
ZHJlbklubGluZSgpIHx8IGNoaWxkQmxvY2suaXNXcml0aW5nTW9kZVJvb3QoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgTWFyZ2luSW5mbyBjaGlsZE1hcmdpbkluZm8oY2hpbGRCbG9jaywgY2hp
bGRCbG9jay0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpLCBjaGlsZEJsb2NrLT5ib3JkZXJBbmRQ
YWRkaW5nQWZ0ZXIoKSk7CisgICAgTWFyZ2luSW5mbyBjaGlsZE1hcmdpbkluZm8oY2hpbGRCbG9j
aywgY2hpbGRCbG9jay5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCksIGNoaWxkQmxvY2suYm9yZGVy
QW5kUGFkZGluZ0FmdGVyKCkpOwogICAgIGlmICghY2hpbGRNYXJnaW5JbmZvLmNhbkNvbGxhcHNl
TWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
ckJveCogZ3JhbmRjaGlsZEJveCA9IGNoaWxkQmxvY2stPmZpcnN0Q2hpbGRCb3goKTsKLSAgICBm
b3IgKCA7IGdyYW5kY2hpbGRCb3g7IGdyYW5kY2hpbGRCb3ggPSBncmFuZGNoaWxkQm94LT5uZXh0
U2libGluZ0JveCgpKSB7CisgICAgUmVuZGVyQm94KiBncmFuZGNoaWxkQm94ID0gY2hpbGRCbG9j
ay5maXJzdENoaWxkQm94KCk7CisgICAgZm9yICg7IGdyYW5kY2hpbGRCb3g7IGdyYW5kY2hpbGRC
b3ggPSBncmFuZGNoaWxkQm94LT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIGlmICghZ3Jh
bmRjaGlsZEJveC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMTA0NywxMCArMTA2MywxMCBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6bWFyZ2luQmVmb3JlRXN0aW1hCiAgICAgfQogCiAgICAgLy8gQ29sbGFwc2UgdGhlIG1h
cmdpbiBvZiB0aGUgZ3JhbmRjaGlsZCBib3ggd2l0aCBvdXIgb3duIHRvIHByb2R1Y2UgYW4gZXN0
aW1hdGUuCi0gICAgY2hpbGRCbG9jay0+bWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JDaGlsZChncmFu
ZGNoaWxkQm94LCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSwgbmVnYXRpdmVNYXJnaW5CZWZvcmUsIGRp
c2NhcmRNYXJnaW5CZWZvcmUpOworICAgIGNoaWxkQmxvY2subWFyZ2luQmVmb3JlRXN0aW1hdGVG
b3JDaGlsZCgqZ3JhbmRjaGlsZEJveCwgcG9zaXRpdmVNYXJnaW5CZWZvcmUsIG5lZ2F0aXZlTWFy
Z2luQmVmb3JlLCBkaXNjYXJkTWFyZ2luQmVmb3JlKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJC
bG9ja0Zsb3c6OmVzdGltYXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNv
bnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQmIGVzdGltYXRlV2l0aG91dFBh
Z2luYXRpb24pCitMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6ZXN0aW1hdGVMb2dpY2FsVG9w
UG9zaXRpb24oUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywg
TGF5b3V0VW5pdCYgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbikKIHsKICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBlbGltaW5hdGUgdGhlIGVzdGltYXRpb24gb2YgdmVydGljYWwgcG9zaXRpb24s
IGJlY2F1c2Ugd2hlbiBpdCdzIHdyb25nIHdlIHNvbWV0aW1lcyB0cmlnZ2VyIGEgcGF0aG9sb2dp
Y2FsCiAgICAgLy8gcmVsYXlvdXQgaWYgdGhlcmUgYXJlIGludHJ1ZGluZyBmbG9hdHMuCkBAIC0x
MDU5LDcgKzEwNzUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6ZXN0aW1hdGVMb2dp
CiAgICAgICAgIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZvcmUgPSAwOwogICAgICAgICBM
YXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gMDsKICAgICAgICAgYm9vbCBkaXNjYXJk
TWFyZ2luQmVmb3JlID0gZmFsc2U7Ci0gICAgICAgIGlmIChjaGlsZC0+c2VsZk5lZWRzTGF5b3V0
KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLnNlbGZOZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAg
ICAvLyBUcnkgdG8gZG8gYSBiYXNpYyBlc3RpbWF0aW9uIG9mIGhvdyB0aGUgY29sbGFwc2UgaXMg
Z29pbmcgdG8gZ28uCiAgICAgICAgICAgICBtYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKGNo
aWxkLCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSwgbmVnYXRpdmVNYXJnaW5CZWZvcmUsIGRpc2NhcmRN
YXJnaW5CZWZvcmUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTA5NCw4ICsxMTEwLDggQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmVzdGltYXRlTG9naQogICAgICAgICAvLyBGb3IgcmVw
bGFjZWQgZWxlbWVudHMgYW5kIHNjcm9sbGVkIGVsZW1lbnRzLCB3ZSB3YW50IHRvIHNoaWZ0IHRo
ZW0gdG8gdGhlIG5leHQgcGFnZSBpZiB0aGV5IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudCBvbmUu
CiAgICAgICAgIGxvZ2ljYWxUb3BFc3RpbWF0ZSA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxk
KGNoaWxkLCBsb2dpY2FsVG9wRXN0aW1hdGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFjaGls
ZC0+c2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAg
ICAgIGxvZ2ljYWxUb3BFc3RpbWF0ZSArPSB0b1JlbmRlckJsb2NrKGNoaWxkKS0+cGFnaW5hdGlv
blN0cnV0KCk7CisgICAgICAgIGlmICghY2hpbGQuc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hpbGQu
aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgbG9naWNhbFRvcEVzdGltYXRlICs9IHRvUmVu
ZGVyQmxvY2soY2hpbGQpLnBhZ2luYXRpb25TdHJ1dCgpOwogICAgIH0KIAogICAgIHJldHVybiBs
b2dpY2FsVG9wRXN0aW1hdGU7CkBAIC0xMTQ5LDkgKzExNjUsOSBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6aGFuZGxlQWZ0ZXJTaWRlT2ZCCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TWF4TWFy
Z2luQmVmb3JlVmFsdWVzKExheW91dFVuaXQgcG9zLCBMYXlvdXRVbml0IG5lZykKIHsKICAgICBp
ZiAoIW1fcmFyZURhdGEpIHsKLSAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja0Zsb3dSYXJl
RGF0YTo6cG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KHRoaXMpICYmIG5lZyA9PSBSZW5kZXJC
bG9ja0Zsb3dSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KHRoaXMpKQorICAg
ICAgICBpZiAocG9zID09IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJl
Zm9yZURlZmF1bHQoKnRoaXMpICYmIG5lZyA9PSBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6bmVn
YXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSh0
aGlzKSk7CisgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tGbG93
UmFyZURhdGEoKnRoaXMpKTsKICAgICB9CiAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnNldFBv
c2l0aXZlTWFyZ2luQmVmb3JlKHBvcyk7CiAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnNldE5l
Z2F0aXZlTWFyZ2luQmVmb3JlKG5lZyk7CkBAIC0xMTYwLDkgKzExNzYsOSBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6c2V0TWF4TWFyZ2luQmVmb3JlCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0
TWF4TWFyZ2luQWZ0ZXJWYWx1ZXMoTGF5b3V0VW5pdCBwb3MsIExheW91dFVuaXQgbmVnKQogewog
ICAgIGlmICghbV9yYXJlRGF0YSkgewotICAgICAgICBpZiAocG9zID09IFJlbmRlckJsb2NrRmxv
d1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gUmVu
ZGVyQmxvY2tGbG93UmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KHRoaXMpKQor
ICAgICAgICBpZiAocG9zID09IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdp
bkFmdGVyRGVmYXVsdCgqdGhpcykgJiYgbmVnID09IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpu
ZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCgqdGhpcykpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tGbG93UmFyZURhdGEo
dGhpcykpOworICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrRmxv
d1JhcmVEYXRhKCp0aGlzKSk7CiAgICAgfQogICAgIG1fcmFyZURhdGEtPm1fbWFyZ2lucy5zZXRQ
b3NpdGl2ZU1hcmdpbkFmdGVyKHBvcyk7CiAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnNldE5l
Z2F0aXZlTWFyZ2luQWZ0ZXIobmVnKTsKQEAgLTExNzksNyArMTE5NSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjpzZXRNdXN0RGlzY2FyZE1hcmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFtX3JhcmVEYXRhKQotICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJlbmRlckJs
b2NrRmxvd1JhcmVEYXRhKHRoaXMpKTsKKyAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5l
dyBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSgqdGhpcykpOwogCiAgICAgbV9yYXJlRGF0YS0+bV9k
aXNjYXJkTWFyZ2luQmVmb3JlID0gdmFsdWU7CiB9CkBAIC0xMTk1LDcgKzEyMTEsNyBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6c2V0TXVzdERpc2NhcmRNYXJnCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBS
ZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSh0aGlzKSk7CisgICAgICAgIG1fcmFyZURhdGEgPSBhZG9w
dFB0cihuZXcgUmVuZGVyQmxvY2tGbG93UmFyZURhdGEoKnRoaXMpKTsKIAogICAgIG1fcmFyZURh
dGEtPm1fZGlzY2FyZE1hcmdpbkFmdGVyID0gdmFsdWU7CiB9CkBAIC0xMjEwLDYxICsxMjI2LDYx
IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93OjptdXN0RGlzY2FyZE1hcmdpbkEKICAgICByZXR1cm4g
c3R5bGUoKS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1ESVNDQVJEIHx8IChtX3JhcmVEYXRh
ICYmIG1fcmFyZURhdGEtPm1fZGlzY2FyZE1hcmdpbkFmdGVyKTsKIH0KIAotYm9vbCBSZW5kZXJC
bG9ja0Zsb3c6Om11c3REaXNjYXJkTWFyZ2luQmVmb3JlRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94
KiBjaGlsZCkgY29uc3QKK2Jvb2wgUmVuZGVyQmxvY2tGbG93OjptdXN0RGlzY2FyZE1hcmdpbkJl
Zm9yZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KCFjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkpOwotICAgIGlmICghY2hpbGQtPmlzV3JpdGluZ01v
ZGVSb290KCkpCi0gICAgICAgIHJldHVybiBjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSA/IHRv
UmVuZGVyQmxvY2tGbG93KGNoaWxkKS0+bXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSA6IChjaGls
ZC0+c3R5bGUoKS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNRElTQ0FSRCk7Ci0gICAgaWYg
KGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSA/IHRvUmVu
ZGVyQmxvY2tGbG93KGNoaWxkKS0+bXVzdERpc2NhcmRNYXJnaW5BZnRlcigpIDogKGNoaWxkLT5z
dHlsZSgpLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTURJU0NBUkQpOworICAgIEFTU0VSVCgh
Y2hpbGQuc2VsZk5lZWRzTGF5b3V0KCkpOworICAgIGlmICghY2hpbGQuaXNXcml0aW5nTW9kZVJv
b3QoKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxvY2tGbG93KCkgPyB0b1JlbmRl
ckJsb2NrRmxvdyhjaGlsZCkubXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSA6IChjaGlsZC5zdHls
ZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1ESVNDQVJEKTsKKyAgICBpZiAoY2hpbGQu
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9ja0Zsb3coKSA/IHRvUmVuZGVyQmxvY2tG
bG93KGNoaWxkKS5tdXN0RGlzY2FyZE1hcmdpbkFmdGVyKCkgOiAoY2hpbGQuc3R5bGUoKS0+bWFy
Z2luQWZ0ZXJDb2xsYXBzZSgpID09IE1ESVNDQVJEKTsKIAogICAgIC8vIEZJWE1FOiBXZSByZXR1
cm4gZmFsc2UgaGVyZSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgZ2VvbWV0cmlj
YWxseSBjb21wbGV0ZS4gV2UgaGF2ZSB2YWx1ZXMgb25seSBmb3IgYmVmb3JlL2FmdGVyLCBub3Qg
c3RhcnQvZW5kLgogICAgIC8vIEluIGNhc2UgdGhlIGJveGVzIGFyZSBwZXJwZW5kaWN1bGFyIHdl
IGFzc3VtZSB0aGUgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZC4KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2tGbG93OjptdXN0RGlzY2FyZE1hcmdpbkFmdGVyRm9yQ2hp
bGQoY29uc3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3QKK2Jvb2wgUmVuZGVyQmxvY2tGbG93Ojpt
dXN0RGlzY2FyZE1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoIWNoaWxkLT5zZWxmTmVlZHNMYXlvdXQoKSk7Ci0gICAgaWYgKCFj
aGlsZC0+aXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5pc1JlbmRl
ckJsb2NrRmxvdygpID8gdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpLT5tdXN0RGlzY2FyZE1hcmdp
bkFmdGVyKCkgOiAoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9PSBNRElT
Q0FSRCk7Ci0gICAgaWYgKGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC0+aXNSZW5kZXJCbG9j
a0Zsb3coKSA/IHRvUmVuZGVyQmxvY2tGbG93KGNoaWxkKS0+bXVzdERpc2NhcmRNYXJnaW5CZWZv
cmUoKSA6IChjaGlsZC0+c3R5bGUoKS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNRElTQ0FS
RCk7CisgICAgQVNTRVJUKCFjaGlsZC5zZWxmTmVlZHNMYXlvdXQoKSk7CisgICAgaWYgKCFjaGls
ZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQorICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9j
a0Zsb3coKSA/IHRvUmVuZGVyQmxvY2tGbG93KGNoaWxkKS5tdXN0RGlzY2FyZE1hcmdpbkFmdGVy
KCkgOiAoY2hpbGQuc3R5bGUoKS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1ESVNDQVJEKTsK
KyAgICBpZiAoY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9ja0Zsb3coKSA/
IHRvUmVuZGVyQmxvY2tGbG93KGNoaWxkKS5tdXN0RGlzY2FyZE1hcmdpbkJlZm9yZSgpIDogKGNo
aWxkLnN0eWxlKCktPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTURJU0NBUkQpOwogCiAgICAg
Ly8gRklYTUU6IFNlZSB8bXVzdERpc2NhcmRNYXJnaW5CZWZvcmVGb3JDaGlsZHwgYWJvdmUuCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckJsb2NrRmxvdzo6bXVzdFNlcGFyYXRl
TWFyZ2luQmVmb3JlRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3QKK2Jvb2wg
UmVuZGVyQmxvY2tGbG93OjptdXN0U2VwYXJhdGVNYXJnaW5CZWZvcmVGb3JDaGlsZChjb25zdCBS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIEFTU0VSVCghY2hpbGQtPnNlbGZOZWVkc0xh
eW91dCgpKTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5zdHls
ZSgpOwotICAgIGlmICghY2hpbGQtPmlzV3JpdGluZ01vZGVSb290KCkpCisgICAgQVNTRVJUKCFj
aGlsZC5zZWxmTmVlZHNMYXlvdXQoKSk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNoaWxkU3R5
bGUgPSBjaGlsZC5zdHlsZSgpOworICAgIGlmICghY2hpbGQuaXNXcml0aW5nTW9kZVJvb3QoKSkK
ICAgICAgICAgcmV0dXJuIGNoaWxkU3R5bGUtPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTVNF
UEFSQVRFOwotICAgIGlmIChjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQorICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID09IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjaGls
ZFN0eWxlLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFOwogCiAgICAgLy8gRklY
TUU6IFNlZSB8bXVzdERpc2NhcmRNYXJnaW5CZWZvcmVGb3JDaGlsZHwgYWJvdmUuCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckJsb2NrRmxvdzo6bXVzdFNlcGFyYXRlTWFyZ2lu
QWZ0ZXJGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAorYm9vbCBSZW5kZXJC
bG9ja0Zsb3c6Om11c3RTZXBhcmF0ZU1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWNoaWxkLT5zZWxmTmVlZHNMYXlvdXQoKSk7
Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjaGlsZC0+c3R5bGUoKTsKLSAg
ICBpZiAoIWNoaWxkLT5pc1dyaXRpbmdNb2RlUm9vdCgpKQorICAgIEFTU0VSVCghY2hpbGQuc2Vs
Zk5lZWRzTGF5b3V0KCkpOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY2hp
bGQuc3R5bGUoKTsKKyAgICBpZiAoIWNoaWxkLmlzV3JpdGluZ01vZGVSb290KCkpCiAgICAgICAg
IHJldHVybiBjaGlsZFN0eWxlLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFOwot
ICAgIGlmIChjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQorICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjaGlsZFN0eWxlLT5t
YXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1TRVBBUkFURTsKIAogICAgIC8vIEZJWE1FOiBTZWUg
fG11c3REaXNjYXJkTWFyZ2luQmVmb3JlRm9yQ2hpbGR8IGFib3ZlLgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIGJvb2wgaW5Ob3JtYWxGbG93KFJlbmRlckJveCogY2hpbGQpCitzdGF0
aWMgYm9vbCBpbk5vcm1hbEZsb3coUmVuZGVyQm94JiBjaGlsZCkKIHsKLSAgICBSZW5kZXJCbG9j
ayogY3VyciA9IGNoaWxkLT5jb250YWluaW5nQmxvY2soKTsKLSAgICB3aGlsZSAoY3VyciAmJiBj
dXJyICE9ICZjaGlsZC0+dmlldygpKSB7CisgICAgUmVuZGVyQmxvY2sqIGN1cnIgPSBjaGlsZC5j
b250YWluaW5nQmxvY2soKTsKKyAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9ICZjaGlsZC52aWV3
KCkpIHsKICAgICAgICAgaWYgKGN1cnItPmhhc0NvbHVtbnMoKSB8fCBjdXJyLT5pc1JlbmRlckZs
b3dUaHJlYWQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoY3Vyci0+
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQpAQCAtMTI3NCwyMSArMTI5MCwyMSBA
QCBzdGF0aWMgYm9vbCBpbk5vcm1hbEZsb3coUmVuZGVyQm94KiBjaGlsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUJlZm9yZUJyZWFrKFJl
bmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCkKK0xheW91dFVuaXQgUmVu
ZGVyQmxvY2tGbG93OjphcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVu
aXQgbG9naWNhbE9mZnNldCkKIHsKICAgICAvLyBGSVhNRTogQWRkIHBhZ2UgYnJlYWsgY2hlY2tp
bmcgaGVyZSB3aGVuIHdlIHN1cHBvcnQgcHJpbnRpbmcuCiAgICAgYm9vbCBjaGVja0NvbHVtbkJy
ZWFrcyA9IHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRpbmdDb2x1bW5zKCk7CiAgICAg
Ym9vbCBjaGVja1BhZ2VCcmVha3MgPSAhY2hlY2tDb2x1bW5CcmVha3MgJiYgdmlldygpLmxheW91
dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJWE1FOiBPbmNlIGNvbHVtbnMgY2Fu
IHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGJvb2wgY2hlY2tSZWdp
b25CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhy
ZWFkKCk7Ci0gICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja0NvbHVtbkJyZWFrcyAm
JiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUykgfHwgKGNo
ZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJB
TFdBWVMpCi0gICAgICAgIHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+
cmVnaW9uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7CisgICAgYm9vbCBjaGVja0JlZm9yZUFs
d2F5cyA9IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLT5jb2x1bW5CcmVha0Jl
Zm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLnN0eWxlKCkt
PnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKQorICAgICAgICB8fCAoY2hlY2tSZWdpb25C
cmVha3MgJiYgY2hpbGQuc3R5bGUoKS0+cmVnaW9uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7
CiAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzICYmIGluTm9ybWFsRmxvdyhjaGlsZCkgJiYgaGFz
TmV4dFBhZ2UobG9naWNhbE9mZnNldCwgSW5jbHVkZVBhZ2VCb3VuZGFyeSkpIHsKICAgICAgICAg
aWYgKGNoZWNrQ29sdW1uQnJlYWtzKQotICAgICAgICAgICAgdmlldygpLmxheW91dFN0YXRlKCkt
PmFkZEZvcmNlZENvbHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKKyAgICAgICAgICAg
IHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhaygmY2hpbGQsIGxvZ2lj
YWxPZmZzZXQpOwogICAgICAgICBpZiAoY2hlY2tSZWdpb25CcmVha3MpIHsKICAgICAgICAgICAg
IExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gMDsKLSAgICAgICAgICAgIGlmIChm
bG93VGhyZWFkLT5hZGRGb3JjZWRSZWdpb25CcmVhayh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0LCBjaGlsZCwgdHJ1ZSwgJm9mZnNldEJyZWFr
QWRqdXN0bWVudCkpCisgICAgICAgICAgICBpZiAoZmxvd1RocmVhZC0+YWRkRm9yY2VkUmVnaW9u
QnJlYWsodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbE9m
ZnNldCwgJmNoaWxkLCB0cnVlLCAmb2Zmc2V0QnJlYWtBZGp1c3RtZW50KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbG9naWNhbE9mZnNldCArIG9mZnNldEJyZWFrQWRqdXN0bWVudDsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gbmV4dFBhZ2VMb2dpY2FsVG9wKGxvZ2ljYWxPZmZzZXQsIElu
Y2x1ZGVQYWdlQm91bmRhcnkpOwpAQCAtMTI5NiwxNSArMTMxMiwxNSBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrRmxvdzo6YXBwbHlCZWZvcmVCCiAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQ7CiB9
CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94
KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZv
KQorTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gm
IGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8p
CiB7CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBz
dXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCkubGF5
b3V0U3RhdGUoKS0+aXNQYWdpbmF0aW5nQ29sdW1ucygpOwogICAgIGJvb2wgY2hlY2tQYWdlQnJl
YWtzID0gIWNoZWNrQ29sdW1uQnJlYWtzICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VM
b2dpY2FsSGVpZ2h0OyAvLyBGSVhNRTogT25jZSBjb2x1bW5zIGNhbiBwcmludCB3ZSBoYXZlIHRv
IGNoZWNrIHRoaXMuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKICAgICBib29sIGNoZWNrUmVnaW9uQnJlYWtzID0gZmxvd1Ro
cmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpOwotICAgIGJvb2wg
Y2hlY2tBZnRlckFsd2F5cyA9IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+
Y29sdW1uQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGNo
aWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKQotICAgICAgICB8fCAo
Y2hlY2tSZWdpb25CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnJlZ2lvbkJyZWFrQWZ0ZXIoKSA9
PSBQQkFMV0FZUyk7CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrQ29sdW1uQnJl
YWtzICYmIGNoaWxkLnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykgfHwg
KGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBC
QUxXQVlTKQorICAgICAgICB8fCAoY2hlY2tSZWdpb25CcmVha3MgJiYgY2hpbGQuc3R5bGUoKS0+
cmVnaW9uQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5
cyAmJiBpbk5vcm1hbEZsb3coY2hpbGQpICYmIGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIElu
Y2x1ZGVQYWdlQm91bmRhcnkpKSB7CiAgICAgICAgIExheW91dFVuaXQgbWFyZ2luT2Zmc2V0ID0g
bWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/IExheW91dFVuaXQoKSA6
IG1hcmdpbkluZm8ubWFyZ2luKCk7CiAKQEAgLTEzMTIsMTAgKzEzMjgsMTAgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcgogICAgICAgICBtYXJnaW5JbmZvLmNsZWFy
TWFyZ2luKCk7CiAKICAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQotICAgICAgICAgICAg
dmlldygpLmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENvbHVtbkJyZWFrKGNoaWxkLCBsb2dpY2Fs
T2Zmc2V0KTsKKyAgICAgICAgICAgIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5hZGRGb3JjZWRDb2x1
bW5CcmVhaygmY2hpbGQsIGxvZ2ljYWxPZmZzZXQpOwogICAgICAgICBpZiAoY2hlY2tSZWdpb25C
cmVha3MpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0g
MDsKLSAgICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5hZGRGb3JjZWRSZWdpb25CcmVhayh0aGlz
LCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0ICsgbWFy
Z2luT2Zmc2V0LCBjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQorICAgICAg
ICAgICAgaWYgKGZsb3dUaHJlYWQtPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKHRoaXMsIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBtYXJnaW5PZmZzZXQs
ICZjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgbWFyZ2luT2Zmc2V0ICsgb2Zmc2V0QnJlYWtBZGp1c3Rt
ZW50OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXh0UGFnZUxvZ2ljYWxUb3AobG9naWNh
bE9mZnNldCwgSW5jbHVkZVBhZ2VCb3VuZGFyeSk7CkBAIC0xMzIzLDkgKzEzMzksOSBAQCBMYXlv
dXRVbml0IFJlbmRlckJsb2NrRmxvdzo6YXBwbHlBZnRlckJyCiAgICAgcmV0dXJuIGxvZ2ljYWxP
ZmZzZXQ7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RCbG9ja0NoaWxk
Rm9yUGFnaW5hdGlvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BBZnRlckNsZWFyLCBMYXlvdXRVbml0
IGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24sIFJlbmRlckJveCogY2hpbGQsIGJvb2wgYXRCZWZv
cmVTaWRlT2ZCbG9jaykKK0xheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RCbG9ja0No
aWxkRm9yUGFnaW5hdGlvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BBZnRlckNsZWFyLCBMYXlvdXRV
bml0IGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24sIFJlbmRlckJveCYgY2hpbGQsIGJvb2wgYXRC
ZWZvcmVTaWRlT2ZCbG9jaykKIHsKLSAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9
IGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAg
UmVuZGVyQmxvY2sqIGNoaWxkUmVuZGVyQmxvY2sgPSBjaGlsZC5pc1JlbmRlckJsb2NrKCkgPyB0
b1JlbmRlckJsb2NrKCZjaGlsZCkgOiBudWxscHRyOwogCiAgICAgaWYgKGVzdGltYXRlV2l0aG91
dFBhZ2luYXRpb24gIT0gbG9naWNhbFRvcEFmdGVyQ2xlYXIpIHsKICAgICAgICAgLy8gT3VyIGd1
ZXNzIHByaW9yIHRvIHBhZ2luYXRpb24gbW92ZW1lbnQgd2FzIHdyb25nLiBCZWZvcmUgd2UgYXR0
ZW1wdCB0byBwYWdpbmF0ZSwgbGV0J3MgdHJ5IGFnYWluIGF0IHRoZSBuZXcKQEAgLTEzMzMsMjMg
KzEzNDksMjMgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQwogICAg
ICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxUb3BBZnRlckNsZWFyKTsKICAgICAgICAgc2V0
TG9naWNhbFRvcEZvckNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wQWZ0ZXJDbGVhciwgQXBwbHlMYXlv
dXREZWx0YSk7CiAKLSAgICAgICAgaWYgKGNoaWxkLT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsK
KyAgICAgICAgaWYgKGNoaWxkLnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewogICAgICAgICAgICAg
Ly8gVGhlIGNoaWxkJ3Mgd2lkdGggZGVwZW5kcyBvbiB0aGUgbGluZSB3aWR0aC4KICAgICAgICAg
ICAgIC8vIFdoZW4gdGhlIGNoaWxkIHNoaWZ0cyB0byBjbGVhciBhbiBpdGVtLCBpdHMgd2lkdGgg
Y2FuCiAgICAgICAgICAgICAvLyBjaGFuZ2UgKGJlY2F1c2UgaXQgaGFzIG1vcmUgYXZhaWxhYmxl
IGxpbmUgd2lkdGgpLgogICAgICAgICAgICAgLy8gU28gZ28gYWhlYWQgYW5kIG1hcmsgdGhlIGl0
ZW0gYXMgZGlydHkuCi0gICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJr
T25seVRoaXMpOworICAgICAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY2hpbGRSZW5kZXJCbG9j
aykgewotICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGRSZW5k
ZXJCbG9jay0+Y29udGFpbnNGbG9hdHMoKSkKKyAgICAgICAgICAgIGlmICghY2hpbGQuYXZvaWRz
RmxvYXRzKCkgJiYgY2hpbGRSZW5kZXJCbG9jay0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAg
ICAgICAgICB0b1JlbmRlckJsb2NrRmxvdyhjaGlsZFJlbmRlckJsb2NrKS0+bWFya0FsbERlc2Nl
bmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICAgICAgaWYgKCFjaGlsZC0+bmVl
ZHNMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBjaGlsZC0+bWFya0ZvclBhZ2luYXRpb25SZWxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBpZiAoIWNoaWxkLm5lZWRzTGF5b3V0KCkpCisg
ICAgICAgICAgICAgICAgY2hpbGQubWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBPdXIgZ3Vlc3Mgd2FzIHdyb25nLiBNYWtlIHRoZSBj
aGlsZCBsYXkgaXRzZWxmIG91dCBhZ2Fpbi4KLSAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVk
KCk7CisgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgTGF5b3V0
VW5pdCBvbGRUb3AgPSBsb2dpY2FsVG9wQWZ0ZXJDbGVhcjsKQEAgLTEzNTksNyArMTM3NSw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RCbG9ja0MKIAogICAgIGlmIChwYWdl
TG9naWNhbEhlaWdodEZvck9mZnNldChyZXN1bHQpKSB7CiAgICAgICAgIExheW91dFVuaXQgcmVt
YWluaW5nTG9naWNhbEhlaWdodCA9IHBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0
KHJlc3VsdCwgRXhjbHVkZVBhZ2VCb3VuZGFyeSk7Ci0gICAgICAgIExheW91dFVuaXQgc3BhY2VT
aG9ydGFnZSA9IGNoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgLSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0
OworICAgICAgICBMYXlvdXRVbml0IHNwYWNlU2hvcnRhZ2UgPSBjaGlsZC5sb2dpY2FsSGVpZ2h0
KCkgLSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0OwogICAgICAgICBpZiAoc3BhY2VTaG9ydGFnZSA+
IDApIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBjcm9zc2VzIGEgY29sdW1uIGJvdW5k
YXJ5LCByZXBvcnQgYSBicmVhaywgaW4gY2FzZSBub3RoaW5nIGluc2lkZSBpdCBoYXMgYWxyZWFk
eQogICAgICAgICAgICAgLy8gZG9uZSBzby4gVGhlIGNvbHVtbiBiYWxhbmNlciBuZWVkcyB0byBr
bm93IGhvdyBtdWNoIGl0IGhhcyB0byBzdHJldGNoIHRoZSBjb2x1bW5zIHRvIG1ha2UgbW9yZQpA
QCAtMTQ5NCw3ICsxNTEwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldEJyZWFrQXRMaW5l
VG9BdgogewogICAgIEFTU0VSVChsaW5lVG9CcmVhayA+PSAwKTsKICAgICBpZiAoIW1fcmFyZURh
dGEpCi0gICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tGbG93UmFy
ZURhdGEodGhpcykpOworICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJlbmRlckJs
b2NrRmxvd1JhcmVEYXRhKCp0aGlzKSk7CiAKICAgICBBU1NFUlQoIW1fcmFyZURhdGEtPm1fZGlk
QnJlYWtBdExpbmVUb0F2b2lkV2lkb3cpOwogICAgIG1fcmFyZURhdGEtPm1fbGluZUJyZWFrVG9B
dm9pZFdpZG93ID0gbGluZVRvQnJlYWs7CkBAIC0xNTYwLDkgKzE1NzYsOSBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0TGluZUdyaWRCb3goCiAgICAgLy8gdG8gdGhpcyBncmlkLgogfQog
Ci1ib29sIFJlbmRlckJsb2NrRmxvdzo6Y29udGFpbnNGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVy
KSBjb25zdAorYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OmNvbnRhaW5zRmxvYXQoUmVuZGVyQm94JiBy
ZW5kZXJlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYgbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPFJlbmRlckJveCYsIEZsb2F0aW5nT2JqZWN0SGFz
aFRyYW5zbGF0b3I+KCpyZW5kZXJlcik7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYm
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5jb250YWluczxSZW5kZXJCb3gmLCBGbG9hdGluZ09i
amVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQpAQCAtMTU4Niw3ICsxNjAyLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnN0
eWxlRGlkQ2hhbmdlKFN0eQogICAgICAgICAgICAgICAgIGlmIChjdXJyQmxvY2stPmhhc092ZXJo
YW5naW5nRmxvYXRzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJCb3gmIHJlbmRlcmVyID0gKCppdCktPnJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckJsb2NrLT5oYXNPdmVyaGFuZ2luZ0Zsb2F0KCZy
ZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQmxvY2stPmhhc092
ZXJoYW5naW5nRmxvYXQocmVuZGVyZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50QmxvY2sgPSBjdXJyQmxvY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNjU5LDcgKzE2NzUsNyBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6bW92ZUFsbENoaWxkcmVuSW5jCiAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAKICAgICAgICAgICAgIC8vIERv
bid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlzdAot
ICAgICAgICAgICAgaWYgKHRvQmxvY2tGbG93LT5jb250YWluc0Zsb2F0KCZmbG9hdGluZ09iamVj
dC0+cmVuZGVyZXIoKSkpCisgICAgICAgICAgICBpZiAodG9CbG9ja0Zsb3ctPmNvbnRhaW5zRmxv
YXQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICB0b0Jsb2NrRmxvdy0+bV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9h
dGluZ09iamVjdC0+dW5zYWZlQ2xvbmUoKSk7CkBAIC0xNzQ1LDcgKzE3NjEsNyBAQCB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6cGFpbnRGbG9hdHMoUGFpbnRJCiAgICAgfQogfQogCi12b2lkIFJlbmRl
ckJsb2NrRmxvdzo6Y2xpcE91dEZsb2F0aW5nT2JqZWN0cyhSZW5kZXJCbG9jayogcm9vdEJsb2Nr
LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2sp
Cit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xpcE91dEZsb2F0aW5nT2JqZWN0cyhSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZy
b21Sb290QmxvY2spCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKQEAgLTE3NTUsNyArMTc3MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpj
bGlwT3V0RmxvYXRpbmdPYmoKICAgICAgICAgICAgIExheW91dFJlY3QgZmxvYXRCb3gob2Zmc2V0
RnJvbVJvb3RCbG9jay53aWR0aCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
ZmxvYXRpbmdPYmplY3QpLAogICAgICAgICAgICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVp
Z2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCks
CiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkud2lkdGgoKSwgZmxv
YXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAgcm9vdEJsb2Nr
LT5mbGlwRm9yV3JpdGluZ01vZGUoZmxvYXRCb3gpOworICAgICAgICAgICAgcm9vdEJsb2NrLmZs
aXBGb3JXcml0aW5nTW9kZShmbG9hdEJveCk7CiAgICAgICAgICAgICBmbG9hdEJveC5tb3ZlKHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24ueCgpLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLnko
KSk7CiAgICAgICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmNsaXBPdXQocGl4ZWxTbmFwcGVk
SW50UmVjdChmbG9hdEJveCkpOwogICAgICAgICB9CkBAIC0xNzc1LDkgKzE3OTEsOSBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlRmxvYXRpbmdPYmplCiAgICAgbV9mbG9hdGluZ09iamVj
dHMtPmNsZWFyKCk7CiB9CiAKLUZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9ja0Zsb3c6Omluc2Vy
dEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogZmxvYXRCb3gpCitGbG9hdGluZ09iamVjdCogUmVu
ZGVyQmxvY2tGbG93OjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmIGZsb2F0Qm94KQog
ewotICAgIEFTU0VSVChmbG9hdEJveC0+aXNGbG9hdGluZygpKTsKKyAgICBBU1NFUlQoZmxvYXRC
b3guaXNGbG9hdGluZygpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBvZiBzcGVjaWFsIG9i
amVjdHMgaWYgd2UgZG9uJ3QgYWxlYWR5IGhhdmUgb25lCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKQEAgLTE3ODUsNDQgKzE4MDEsNDQgQEAgRmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2Nr
Rmxvdzo6aW5zZXJ0RgogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIGZs
b2F0aW5nT2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlzdAogICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7Ci0gICAgICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJl
bmRlckJveCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpmbG9hdEJveCk7CisgICAg
ICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCYsIEZsb2F0aW5n
T2JqZWN0SGFzaFRyYW5zbGF0b3I+KGZsb2F0Qm94KTsKICAgICAgICAgaWYgKGl0ICE9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGl0LT5nZXQoKTsKICAgICB9
CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgZmxvYXRpbmdPYmplY3QgZW50cnkgJiBhcHBl
bmQgaXQgdG8gdGhlIGxpc3QKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4g
ZmxvYXRpbmdPYmplY3QgPSBGbG9hdGluZ09iamVjdDo6Y3JlYXRlKCpmbG9hdEJveCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBmbG9hdGluZ09iamVjdCA9IEZsb2F0aW5n
T2JqZWN0OjpjcmVhdGUoZmxvYXRCb3gpOwogICAgIAogICAgIC8vIE91ciBsb2NhdGlvbiBpcyBp
cnJlbGV2YW50IGlmIHdlJ3JlIHVuc3BsaXR0YWJsZSBvciBubyBwYWdpbmF0aW9uIGlzIGluIGVm
ZmVjdC4KICAgICAvLyBKdXN0IGdvIGFoZWFkIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KLSAgICBi
b29sIGlzQ2hpbGRSZW5kZXJCbG9jayA9IGZsb2F0Qm94LT5pc1JlbmRlckJsb2NrKCk7Ci0gICAg
aWYgKGlzQ2hpbGRSZW5kZXJCbG9jayAmJiAhZmxvYXRCb3gtPm5lZWRzTGF5b3V0KCkgJiYgdmll
dygpLmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCgpKQotICAgICAgICBm
bG9hdEJveC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgIGJvb2wgaXND
aGlsZFJlbmRlckJsb2NrID0gZmxvYXRCb3guaXNSZW5kZXJCbG9jaygpOworICAgIGlmIChpc0No
aWxkUmVuZGVyQmxvY2sgJiYgIWZsb2F0Qm94Lm5lZWRzTGF5b3V0KCkgJiYgdmlldygpLmxheW91
dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCgpKQorICAgICAgICBmbG9hdEJveC5z
ZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgICAgICAKICAgICBib29s
IG5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCA9IGlzQ2hpbGRSZW5k
ZXJCbG9jayAmJiB2aWV3KCkubGF5b3V0U3RhdGUoKS0+bmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0
aW9uU2V0QmVmb3JlTGF5b3V0KCk7CiAgICAgaWYgKCFuZWVkc0Jsb2NrRGlyZWN0aW9uTG9jYXRp
b25TZXRCZWZvcmVMYXlvdXQgfHwgaXNXcml0aW5nTW9kZVJvb3QoKSkgLy8gV2UgYXJlIHVuc3Bs
aXR0YWJsZSBpZiB3ZSdyZSBhIGJsb2NrIGZsb3cgcm9vdC4KLSAgICAgICAgZmxvYXRCb3gtPmxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgIGZsb2F0Qm94LmxheW91dElmTmVlZGVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGZsb2F0Qm94LT51cGRhdGVMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAg
ZmxvYXRCb3gtPmNvbXB1dGVBbmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdpbnModGhpcyk7CisgICAg
ICAgIGZsb2F0Qm94LnVwZGF0ZUxvZ2ljYWxXaWR0aCgpOworICAgICAgICBmbG9hdEJveC5jb21w
dXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMpOwogICAgIH0KIAogICAgIHNldExv
Z2ljYWxXaWR0aEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LmdldCgpLCBsb2dpY2FsV2lkdGhGb3JD
aGlsZChmbG9hdEJveCkgKyBtYXJnaW5TdGFydEZvckNoaWxkKGZsb2F0Qm94KSArIG1hcmdpbkVu
ZEZvckNoaWxkKGZsb2F0Qm94KSk7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAo
U2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gZmxvYXRCb3gtPnNoYXBlT3V0c2lkZUlu
Zm8oKSkKKyAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gZmxvYXRCb3gu
c2hhcGVPdXRzaWRlSW5mbygpKQogICAgICAgICBzaGFwZU91dHNpZGUtPnNldFNoYXBlU2l6ZShs
b2dpY2FsV2lkdGhGb3JDaGlsZChmbG9hdEJveCksIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChmbG9h
dEJveCkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMtPmFkZChzdGQ6
Om1vdmUoZmxvYXRpbmdPYmplY3QpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92
ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogZmxvYXRCb3gpCit2b2lkIFJlbmRlckJsb2NrRmxv
dzo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94JiBmbG9hdEJveCkKIHsKICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBhdXRv
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gmLCBGbG9hdGluZ09iamVjdEhh
c2hUcmFuc2xhdG9yPigqZmxvYXRCb3gpOworICAgICAgICBhdXRvIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZmluZDxSZW5kZXJCb3gmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihmbG9h
dEJveCk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkgewogICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogICAg
ICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTE4NzEsNyArMTg4Nyw3IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpyZW1vdmVGbG9hdGluZ09iamUKIAogTGF5b3V0UG9pbnQgUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29uc3QgRmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQpIGNv
bnN0CiB7Ci0gICAgUmVuZGVyQm94KiBjaGlsZEJveCA9ICZmbG9hdGluZ09iamVjdC0+cmVuZGVy
ZXIoKTsKKyAgICBSZW5kZXJCb3gmIGNoaWxkQm94ID0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVy
KCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiBsZWZ0IG9m
ZnNldC4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldDsgLy8gQ29uc3RhbnQgcGFy
dCBvZiByaWdodCBvZmZzZXQuCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCkBAIC0xOTA1LDcgKzE5
MjEsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dpCiAKICAgICBi
b29sIGluc2lkZUZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAKLSAg
ICBpZiAoY2hpbGRCb3gtPnN0eWxlKCktPmZsb2F0aW5nKCkgPT0gTGVmdEZsb2F0KSB7CisgICAg
aWYgKGNoaWxkQm94LnN0eWxlKCktPmZsb2F0aW5nKCkgPT0gTGVmdEZsb2F0KSB7CiAgICAgICAg
IExheW91dFVuaXQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7CiAgICAgICAgIExheW91dFVuaXQg
aGVpZ2h0UmVtYWluaW5nUmlnaHQgPSAxOwogICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lSWdub3JpbmdTaGFwZU91dHNpZGUobG9naWNhbFRvcE9mZnNl
dCwgbG9naWNhbExlZnRPZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nTGVmdCk7CkBAIC0x
OTg3LDE1ICsyMDAzLDE1IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0
cygKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9j
aygpICE9IHRoaXMpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBSZW5kZXJCb3gq
IGNoaWxkQm94ID0gJmZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJC
b3gmIGNoaWxkQm94ID0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCk7CiAKICAgICAgICAgTGF5
b3V0VW5pdCBjaGlsZExvZ2ljYWxMZWZ0TWFyZ2luID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbWFyZ2luU3RhcnRGb3JDaGlsZChjaGlsZEJveCkgOiBtYXJnaW5FbmRGb3JD
aGlsZChjaGlsZEJveCk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBvbGRSZWN0ID0gY2hpbGRCb3gt
PmZyYW1lUmVjdCgpOworICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QgPSBjaGlsZEJveC5mcmFt
ZVJlY3QoKTsKIAotICAgICAgICBpZiAoY2hpbGRCb3gtPnN0eWxlKCktPmNsZWFyKCkgJiBDTEVG
VCkKKyAgICAgICAgaWYgKGNoaWxkQm94LnN0eWxlKCktPmNsZWFyKCkgJiBDTEVGVCkKICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtYXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5n
T2JqZWN0OjpGbG9hdExlZnQpLCBsb2dpY2FsVG9wKTsKLSAgICAgICAgaWYgKGNoaWxkQm94LT5z
dHlsZSgpLT5jbGVhcigpICYgQ1JJR0hUKQorICAgICAgICBpZiAoY2hpbGRCb3guc3R5bGUoKS0+
Y2xlYXIoKSAmIENSSUdIVCkKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtYXgobG93ZXN0Rmxv
YXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KSwgbG9naWNhbFRvcCk7
CiAKICAgICAgICAgTGF5b3V0UG9pbnQgZmxvYXRMb2dpY2FsTG9jYXRpb24gPSBjb21wdXRlTG9n
aWNhbExvY2F0aW9uRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3ApOwpAQCAtMjAw
OSwxMCArMjAyNSwxMCBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMo
CiAKICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLmxheW91dFN0YXRl
KCk7CiAgICAgICAgIGJvb2wgaXNQYWdpbmF0ZWQgPSBsYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQo
KTsKLSAgICAgICAgaWYgKGlzUGFnaW5hdGVkICYmICFjaGlsZEJveC0+bmVlZHNMYXlvdXQoKSkK
LSAgICAgICAgICAgIGNoaWxkQm94LT5tYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVkZWQo
KTsKKyAgICAgICAgaWYgKGlzUGFnaW5hdGVkICYmICFjaGlsZEJveC5uZWVkc0xheW91dCgpKQor
ICAgICAgICAgICAgY2hpbGRCb3gubWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7
CiAgICAgICAgIAotICAgICAgICBjaGlsZEJveC0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAg
Y2hpbGRCb3gubGF5b3V0SWZOZWVkZWQoKTsKIAogICAgICAgICBpZiAoaXNQYWdpbmF0ZWQpIHsK
ICAgICAgICAgICAgIC8vIElmIHdlIGFyZSB1bnNwbGl0dGFibGUgYW5kIGRvbid0IGZpdCwgdGhl
biB3ZSBuZWVkIHRvIG1vdmUgZG93bi4KQEAgLTIwMjIsNyArMjAzOCw3IEBAIGJvb2wgUmVuZGVy
QmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cygKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBo
YXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhl
ci4KICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3Qg
YWxzbyBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcwogICAgICAgICAgICAgLy8g
ZXhjbHVzaXZlIHdpdGggdGhlIGNhc2UgYWJvdmUuCi0gICAgICAgICAgICBSZW5kZXJCbG9jayog
Y2hpbGRCbG9jayA9IGNoaWxkQm94LT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNo
aWxkQm94KSA6IDA7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IGNoaWxk
Qm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soJmNoaWxkQm94KSA6IG51bGxwdHI7
CiAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3Ry
dXQoKSkgewogICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gY2hpbGRCbG9jay0+cGFn
aW5hdGlvblN0cnV0KCk7CiAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0UGFnaW5hdGlv
blN0cnV0KDApOwpAQCAtMjAzOSwxMiArMjA1NSwxMiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6
cG9zaXRpb25OZXdGbG9hdHMoCiAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChjaGlsZEJs
b2NrKQogICAgICAgICAgICAgICAgICAgICBjaGlsZEJsb2NrLT5zZXRDaGlsZE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgY2hpbGRCb3gtPmxheW91dElmTmVlZGVk
KCk7CisgICAgICAgICAgICAgICAgY2hpbGRCb3gubGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKHVwZGF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY2hp
bGRCb3gpKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGRCb3gtPnNldE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgY2hpbGRCb3gtPmxheW91dElmTmVlZGVkKCk7Cisg
ICAgICAgICAgICAgICAgY2hpbGRCb3guc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAg
ICAgICAgICAgICAgICBjaGlsZEJveC5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKQEAgLTIwNTUsOCArMjA3MSw4IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpw
b3NpdGlvbk5ld0Zsb2F0cygKICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9i
amVjdChmbG9hdGluZ09iamVjdCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIG1vdmVkLCB3
ZSBoYXZlIHRvIHJlcGFpbnQgaXQuCi0gICAgICAgIGlmIChjaGlsZEJveC0+Y2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICBjaGlsZEJveC0+cmVwYWludER1cmluZ0xh
eW91dElmTW92ZWQob2xkUmVjdCk7CisgICAgICAgIGlmIChjaGlsZEJveC5jaGVja0ZvclJlcGFp
bnREdXJpbmdMYXlvdXQoKSkKKyAgICAgICAgICAgIGNoaWxkQm94LnJlcGFpbnREdXJpbmdMYXlv
dXRJZk1vdmVkKG9sZFJlY3QpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIxMTIs
NyArMjEyOCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjpuZXh0RmxvYXRMb2cKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRz
aWRlID0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpOwogICAg
ICAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0ICYmIHNo
YXBlT3V0c2lkZSkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBzaGFwZUJvdHRvbSA9IGxvZ2lj
YWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZCgmKGZs
b2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbEJv
dHRvbSgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBzaGFwZUJvdHRvbSA9IGxvZ2ljYWxUb3BG
b3JGbG9hdChmbG9hdGluZ09iamVjdCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChmbG9hdGluZ09i
amVjdC0+cmVuZGVyZXIoKSkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbEJvdHRvbSgpOwog
ICAgICAgICAgICAgLy8gVXNlIHRoZSBzaGFwZUJvdHRvbSB1bmxlc3MgaXQgZXh0ZW5kcyBvdXRz
aWRlIG9mIHRoZSBtYXJnaW4gYm94LCBpbiB3aGljaCBjYXNlIGl0IGlzIGNsaXBwZWQuCiAgICAg
ICAgICAgICBpZiAoc2hhcGVCb3R0b20gPCBmbG9hdEJvdHRvbSkKICAgICAgICAgICAgICAgICBm
bG9hdEJvdHRvbSA9IHNoYXBlQm90dG9tOwpAQCAtMjE0MCwyMCArMjE1NiwyMCBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrRmxvdzo6bG93ZXN0RmxvYXRMCiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0
Qm90dG9tOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmhhbmdpbmdG
bG9hdHMoUmVuZGVyQmxvY2tGbG93KiBjaGlsZCwgYm9vbCBtYWtlQ2hpbGRQYWludE90aGVyRmxv
YXRzKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJl
bmRlckJsb2NrRmxvdyYgY2hpbGQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKIHsK
ICAgICAvLyBQcmV2ZW50IGZsb2F0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjYW52YXMgYnkg
dGhlIHJvb3QgZWxlbWVudCwgZS5nLiwgPGh0bWw+LgotICAgIGlmIChjaGlsZC0+aGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIWNoaWxkLT5jb250YWluc0Zsb2F0cygpIHx8IGNoaWxkLT5pc1Jvb3QoKSB8
fCBjaGlsZC0+aGFzQ29sdW1ucygpIHx8IGNoaWxkLT5pc1dyaXRpbmdNb2RlUm9vdCgpKQorICAg
IGlmIChjaGlsZC5oYXNPdmVyZmxvd0NsaXAoKSB8fCAhY2hpbGQuY29udGFpbnNGbG9hdHMoKSB8
fCBjaGlsZC5pc1Jvb3QoKSB8fCBjaGlsZC5oYXNDb2x1bW5zKCkgfHwgY2hpbGQuaXNXcml0aW5n
TW9kZVJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBMYXlvdXRVbml0IGNoaWxkTG9n
aWNhbFRvcCA9IGNoaWxkLT5sb2dpY2FsVG9wKCk7Ci0gICAgTGF5b3V0VW5pdCBjaGlsZExvZ2lj
YWxMZWZ0ID0gY2hpbGQtPmxvZ2ljYWxMZWZ0KCk7CisgICAgTGF5b3V0VW5pdCBjaGlsZExvZ2lj
YWxUb3AgPSBjaGlsZC5sb2dpY2FsVG9wKCk7CisgICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxM
ZWZ0ID0gY2hpbGQubG9naWNhbExlZnQoKTsKICAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbSA9IDA7CiAKICAgICAvLyBGbG9hdHMgdGhhdCB3aWxsIHJlbWFpbiB0aGUgY2hp
bGQncyByZXNwb25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFjdG9yIGludG8gaXRzCiAgICAg
Ly8gb3ZlcmZsb3cuCi0gICAgYXV0byBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpLmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkg
eworICAgIGF1dG8gY2hpbGRFbmQgPSBjaGlsZC5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5k
KCk7CisgICAgZm9yIChhdXRvIGNoaWxkSXQgPSBjaGlsZC5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCkuYmVnaW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0KSB7CiAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGNoaWxkSXQtPmdldCgpOwogICAgICAgICBM
YXlvdXRVbml0IGZsb2F0TG9naWNhbEJvdHRvbSA9IG1pbihsb2dpY2FsQm90dG9tRm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QpLCBMYXlvdXRVbml0OjptYXgoKSAtIGNoaWxkTG9naWNhbFRvcCk7CiAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGZsb2F0
TG9naWNhbEJvdHRvbTsKQEAgLTIxNjEsNyArMjE3Nyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2tGbG93OjphZGRPdmVyaGFuZ2kKIAogICAgICAgICBpZiAobG9naWNhbEJvdHRvbSA+IGxvZ2lj
YWxIZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBub3QgaW4gdGhl
IGxpc3QsIHdlIGFkZCBpdCBub3cuCi0gICAgICAgICAgICBpZiAoIWNvbnRhaW5zRmxvYXQoJmZs
b2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkgeworICAgICAgICAgICAgaWYgKCFjb250YWluc0Zs
b2F0KGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkgewogICAgICAgICAgICAgICAgIExheW91
dFNpemUgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExheW91dFNpemUoLWNo
aWxkTG9naWNhbExlZnQsIC1jaGlsZExvZ2ljYWxUb3ApIDogTGF5b3V0U2l6ZSgtY2hpbGRMb2dp
Y2FsVG9wLCAtY2hpbGRMb2dpY2FsTGVmdCk7CiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRQ
YWludCA9IGZhbHNlOwogCkBAIC0yMTgxLDcgKzIxOTcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJs
b2NrRmxvdzo6YWRkT3ZlcmhhbmdpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhZmxvYXRpbmdPYmpl
Y3QtPnNob3VsZFBhaW50KCkgJiYgIWZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmhhc1NlbGZQ
YWludGluZ0xheWVyKCkKLSAgICAgICAgICAgICAgICAmJiBmbG9hdGluZ09iamVjdC0+cmVuZGVy
ZXIoKS5pc0Rlc2NlbmRhbnRPZihjaGlsZCkgJiYgZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCku
ZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVyKCkgPT0gY2hpbGQtPmVuY2xvc2luZ0Zsb2F0UGFp
bnRpbmdMYXllcigpKSB7CisgICAgICAgICAgICAgICAgJiYgZmxvYXRpbmdPYmplY3QtPnJlbmRl
cmVyKCkuaXNEZXNjZW5kYW50T2YoJmNoaWxkKSAmJiBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIo
KS5lbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSA9PSBjaGlsZC5lbmNsb3NpbmdGbG9hdFBh
aW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBmbG9hdCBpcyBub3Qgb3Zl
cmhhbmdpbmcgZnJvbSB0aGlzIGJsb2NrLCBzbyBpZiBpdCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhl
IGNoaWxkLCB0aGUgY2hpbGQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gcGFpbnQgaXQgKHRo
ZSBvdGhlciBjYXNlIGlzIHRoYXQgaXQgaXMgaW50cnVkaW5nIGludG8gdGhlIGNoaWxkKSwgdW5s
ZXNzIGl0IGhhcyBpdHMgb3duIGxheWVyIG9yIGVuY2xvc2luZwogICAgICAgICAgICAgICAgIC8v
IGxheWVyLgpAQCAtMjE5MywxOSArMjIwOSwxOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxv
dzo6YWRkT3ZlcmhhbmdpCiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgZmxvYXQgZG9lc24ndCBv
dmVyaGFuZywgaXQgZGlkbid0IGdldCBwdXQgaW50byBvdXIgbGlzdC4gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgYWRkIGl0cyBvdmVyZmxvdyBpbiB0byB0aGUKICAgICAgICAgICAgIC8vIGNoaWxk
IG5vdy4KICAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpCi0g
ICAgICAgICAgICAgICAgY2hpbGQtPmFkZE92ZXJmbG93RnJvbUNoaWxkKCZmbG9hdGluZ09iamVj
dC0+cmVuZGVyZXIoKSwgTGF5b3V0U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdp
bihmbG9hdGluZ09iamVjdCksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0
aW5nT2JqZWN0KSkpOworICAgICAgICAgICAgICAgIGNoaWxkLmFkZE92ZXJmbG93RnJvbUNoaWxk
KCZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSwgTGF5b3V0U2l6ZSh4UG9zaXRpb25Gb3JGbG9h
dEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVk
aW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b207CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2tGbG93Ojpo
YXNPdmVyaGFuZ2luZ0Zsb2F0KFJlbmRlckJveCogcmVuZGVyZXIpCitib29sIFJlbmRlckJsb2Nr
Rmxvdzo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gmIHJlbmRlcmVyKQogewogICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29sdW1ucygpIHx8ICFwYXJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgIGF1dG8gaXQgPSBmbG9h
dGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0
b3I+KCpyZW5kZXJlcik7CisgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVu
ZGVyQm94JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4ocmVuZGVyZXIpOwogICAgIGlm
IChpdCA9PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0yMjU2LDcgKzIyNzIsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFya0FsbERlc2Nl
bmRhbnRzCiAgICAgc2V0Q2hpbGROZWVkc0xheW91dChtYXJrUGFyZW50cyk7CiAKICAgICBpZiAo
ZmxvYXRUb1JlbW92ZSkKLSAgICAgICAgcmVtb3ZlRmxvYXRpbmdPYmplY3QoZmxvYXRUb1JlbW92
ZSk7CisgICAgICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0KCpmbG9hdFRvUmVtb3ZlKTsKIAogICAg
IC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5kIG1hcmsgdGhlbSBhcyBuZWVkZWQuCiAg
ICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7CkBAIC0yMjcwLDcgKzIyODYsNyBAQCB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6bWFya0FsbERlc2NlbmRhbnRzCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkQmxv
Y2sgPSB0b1JlbmRlckJsb2NrRmxvdyhjaGlsZCk7Ci0gICAgICAgICAgICBpZiAoKGZsb2F0VG9S
ZW1vdmUgPyBjaGlsZEJsb2NrLT5jb250YWluc0Zsb2F0KGZsb2F0VG9SZW1vdmUpIDogY2hpbGRC
bG9jay0+Y29udGFpbnNGbG9hdHMoKSkgfHwgY2hpbGRCbG9jay0+c2hyaW5rVG9Bdm9pZEZsb2F0
cygpKQorICAgICAgICAgICAgaWYgKChmbG9hdFRvUmVtb3ZlID8gY2hpbGRCbG9jay0+Y29udGFp
bnNGbG9hdCgqZmxvYXRUb1JlbW92ZSkgOiBjaGlsZEJsb2NrLT5jb250YWluc0Zsb2F0cygpKSB8
fCBjaGlsZEJsb2NrLT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpCiAgICAgICAgICAgICAgICAgY2hp
bGRCbG9jay0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChmbG9hdFRvUmVt
b3ZlLCBpbkxheW91dCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjkwLDI1ICsyMzA2LDI1IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjptYXJrU2libGluZ3NXaXRoRmwKIAogICAgICAgICBSZW5k
ZXJCbG9ja0Zsb3cqIG5leHRCbG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KG5leHQpOwogICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3ggPSAmKCppdCktPnJlbmRl
cmVyKCk7Ci0gICAgICAgICAgICBpZiAoZmxvYXRUb1JlbW92ZSAmJiBmbG9hdGluZ0JveCAhPSBm
bG9hdFRvUmVtb3ZlKQorICAgICAgICAgICAgUmVuZGVyQm94JiBmbG9hdGluZ0JveCA9ICgqaXQp
LT5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKGZsb2F0VG9SZW1vdmUgJiYgJmZsb2F0aW5n
Qm94ICE9IGZsb2F0VG9SZW1vdmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBpZiAobmV4dEJsb2NrLT5jb250YWluc0Zsb2F0KGZsb2F0aW5nQm94KSkKLSAgICAgICAg
ICAgICAgICBuZXh0QmxvY2stPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQo
ZmxvYXRpbmdCb3gpOworICAgICAgICAgICAgICAgIG5leHRCbG9jay0+bWFya0FsbERlc2NlbmRh
bnRzV2l0aEZsb2F0c0ZvckxheW91dCgmZmxvYXRpbmdCb3gpOwogICAgICAgICB9CiAgICAgfQog
fQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gq
IGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCitMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxv
dzo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3Ap
CiB7CiAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjb21wdXRlIGNsZWFyYW5jZSBpZiB3ZSBo
YXZlIG5vIGZsb2F0cy4KICAgICBpZiAoIWNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIAogICAgIC8vIEF0IGxlYXN0IG9uZSBmbG9hdCBpcyBwcmVzZW50LiBXZSBuZWVk
IHRvIHBlcmZvcm0gdGhlIGNsZWFyYW5jZSBjb21wdXRhdGlvbi4KLSAgICBib29sIGNsZWFyU2V0
ID0gY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkgIT0gQ05PTkU7CisgICAgYm9vbCBjbGVhclNldCA9
IGNoaWxkLnN0eWxlKCktPmNsZWFyKCkgIT0gQ05PTkU7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
Qm90dG9tID0gMDsKLSAgICBzd2l0Y2ggKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpKSB7CisgICAg
c3dpdGNoIChjaGlsZC5zdHlsZSgpLT5jbGVhcigpKSB7CiAgICAgY2FzZSBDTk9ORToKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDTEVGVDoKQEAgLTIzMjQsNyArMjM0MCw3IEBAIExheW91dFVu
aXQgUmVuZGVyQmxvY2tGbG93OjpnZXRDbGVhckRlbHQKIAogICAgIC8vIFdlIGFsc28gY2xlYXIg
ZmxvYXRzIGlmIHdlIGFyZSB0b28gYmlnIHRvIHNpdCBvbiB0aGUgc2FtZSBsaW5lIGFzIGEgZmxv
YXQgKGFuZCB3aXNoIHRvIGF2b2lkIGZsb2F0cyBieSBkZWZhdWx0KS4KICAgICBMYXlvdXRVbml0
IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxCb3R0b20gLSBs
b2dpY2FsVG9wKSA6IExheW91dFVuaXQoKTsKLSAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC0+YXZv
aWRzRmxvYXRzKCkpIHsKKyAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC5hdm9pZHNGbG9hdHMoKSkg
ewogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOwogICAgICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2Fs
V2lkdGhBdE5ld0xvZ2ljYWxUb3BPZmZzZXQgPSBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5l
KG5ld0xvZ2ljYWxUb3AsIGZhbHNlLCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpKTsKQEAg
LTIzMzIsMzIgKzIzNDgsMzIgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmdldENsZWFy
RGVsdAogICAgICAgICAgICAgICAgIHJldHVybiBuZXdMb2dpY2FsVG9wIC0gbG9naWNhbFRvcDsK
IAogICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0
KGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCkpOwotICAgICAgICAgICAgTGF5b3V0UmVjdCBib3Jk
ZXJCb3ggPSBjaGlsZC0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgRG9Ob3RDYWNoZVJl
bmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3ggPSBj
aGlsZC5ib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uLCBEb05vdENhY2hlUmVuZGVyQm94UmVn
aW9uSW5mbyk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbFdpZHRoQXRPbGRM
b2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckJveC53
aWR0aCgpIDogYm9yZGVyQm94LmhlaWdodCgpOwogCiAgICAgICAgICAgICAvLyBGSVhNRTogTm9u
ZSBvZiB0aGlzIGlzIHJpZ2h0IGZvciBwZXJwZW5kaWN1bGFyIHdyaXRpbmctbW9kZSBjaGlsZHJl
bi4KLSAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRPbGRMb2dpY2FsV2lkdGggPSBjaGlsZC0+
bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkT2xkTWFyZ2luTGVm
dCA9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkT2xk
TWFyZ2luUmlnaHQgPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAgIExheW91dFVu
aXQgY2hpbGRPbGRMb2dpY2FsVG9wID0gY2hpbGQtPmxvZ2ljYWxUb3AoKTsKKyAgICAgICAgICAg
IExheW91dFVuaXQgY2hpbGRPbGRMb2dpY2FsV2lkdGggPSBjaGlsZC5sb2dpY2FsV2lkdGgoKTsK
KyAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRPbGRNYXJnaW5MZWZ0ID0gY2hpbGQubWFyZ2lu
TGVmdCgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZE9sZE1hcmdpblJpZ2h0ID0gY2hp
bGQubWFyZ2luUmlnaHQoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRPbGRMb2dpY2Fs
VG9wID0gY2hpbGQubG9naWNhbFRvcCgpOwogCi0gICAgICAgICAgICBjaGlsZC0+c2V0TG9naWNh
bFRvcChuZXdMb2dpY2FsVG9wKTsKLSAgICAgICAgICAgIGNoaWxkLT51cGRhdGVMb2dpY2FsV2lk
dGgoKTsKKyAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxUb3AobmV3TG9naWNhbFRvcCk7Cisg
ICAgICAgICAgICBjaGlsZC51cGRhdGVMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIHJlZ2lv
biA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSk7Ci0gICAg
ICAgICAgICBib3JkZXJCb3ggPSBjaGlsZC0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwg
RG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAgYm9yZGVyQm94ID0g
Y2hpbGQuYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgRG9Ob3RDYWNoZVJlbmRlckJveFJl
Z2lvbkluZm8pOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxXaWR0aEF0TmV3
TG9naWNhbFRvcE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJCb3gu
d2lkdGgoKSA6IGJvcmRlckJveC5oZWlnaHQoKTsKIAotICAgICAgICAgICAgY2hpbGQtPnNldExv
Z2ljYWxUb3AoY2hpbGRPbGRMb2dpY2FsVG9wKTsKLSAgICAgICAgICAgIGNoaWxkLT5zZXRMb2dp
Y2FsV2lkdGgoY2hpbGRPbGRMb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgY2hpbGQtPnNldE1h
cmdpbkxlZnQoY2hpbGRPbGRNYXJnaW5MZWZ0KTsKLSAgICAgICAgICAgIGNoaWxkLT5zZXRNYXJn
aW5SaWdodChjaGlsZE9sZE1hcmdpblJpZ2h0KTsKKyAgICAgICAgICAgIGNoaWxkLnNldExvZ2lj
YWxUb3AoY2hpbGRPbGRMb2dpY2FsVG9wKTsKKyAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxX
aWR0aChjaGlsZE9sZExvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBjaGlsZC5zZXRNYXJnaW5M
ZWZ0KGNoaWxkT2xkTWFyZ2luTGVmdCk7CisgICAgICAgICAgICBjaGlsZC5zZXRNYXJnaW5SaWdo
dChjaGlsZE9sZE1hcmdpblJpZ2h0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGNo
aWxkTG9naWNhbFdpZHRoQXROZXdMb2dpY2FsVG9wT2Zmc2V0IDw9IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aEF0TmV3TG9naWNhbFRvcE9mZnNldCkgewogICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhv
dWdoIHdlIG1heSBub3QgYmUgbW92aW5nLCBpZiB0aGUgbG9naWNhbCB3aWR0aCBkaWQgc2hyaW5r
IGJlY2F1c2Ugb2YgdGhlIHByZXNlbmNlIG9mIG5ldyBmbG9hdHMsIHRoZW4KICAgICAgICAgICAg
ICAgICAvLyB3ZSBuZWVkIHRvIGZvcmNlIGEgcmVsYXlvdXQgYXMgdGhvdWdoIHdlIHNoaWZ0ZWQu
IFRoaXMgaGFwcGVucyBiZWNhdXNlIG9mIHRoZSBkeW5hbWljIGFkZGl0aW9uIG9mIG92ZXJoYW5n
aW5nIGZsb2F0cwogICAgICAgICAgICAgICAgIC8vIGZyb20gcHJldmlvdXMgc2libGluZ3Mgd2hl
biBuZWdhdGl2ZSBtYXJnaW5zIGV4aXN0IG9uIGEgY2hpbGQgKHNlZSB0aGUgYWRkT3Zlcmhhbmdp
bmdGbG9hdHMgY2FsbCBhdCB0aGUgZW5kIG9mIGNvbGxhcHNlTWFyZ2lucykuCiAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkTG9naWNhbFdpZHRoQXRPbGRMb2dpY2FsVG9wT2Zmc2V0ICE9IGNoaWxk
TG9naWNhbFdpZHRoQXROZXdMb2dpY2FsVG9wT2Zmc2V0KQotICAgICAgICAgICAgICAgICAgICBj
aGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAg
ICAgICBjaGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld0xvZ2ljYWxUb3AgLSBsb2dpY2FsVG9wOwogICAgICAgICAgICAgfQog
CkBAIC0yNTMwLDcgKzI1NDYsNyBAQCBpbnQgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVCbG9ja0Jh
c2VsaW5lCiAgICAgcmV0dXJuIC0xOwogfQogCi1HYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6Omlu
bGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9p
bnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZy
b21Sb290QmxvY2ssCitHYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdh
cHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1Bo
eXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAg
ICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVm
dCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9m
ZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIEdh
cFJlY3RzIHJlc3VsdDsKQEAgLTI1NjMsNyArMjU3OSw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2Nr
Rmxvdzo6aW5saW5lU2VsZWN0aW8KICAgICAgICAgCiAgICAgICAgIExheW91dFJlY3QgbG9naWNh
bFJlY3QoY3Vyci0+bG9naWNhbExlZnQoKSwgc2VsVG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwg
c2VsVG9wICsgc2VsSGVpZ2h0KTsKICAgICAgICAgbG9naWNhbFJlY3QubW92ZShpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IG9mZnNldEZyb21Sb290Qmxv
Y2sudHJhbnNwb3NlZFNpemUoKSk7Ci0gICAgICAgIExheW91dFJlY3QgcGh5c2ljYWxSZWN0ID0g
cm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24sIGxvZ2ljYWxSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBwaHlzaWNhbFJlY3QgPSBy
b290QmxvY2subG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0
aW9uLCBsb2dpY2FsUmVjdCk7CiAgICAgICAgIGlmICghcGFpbnRJbmZvIHx8IChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC55KCkgPCBwYWludEluZm8tPnJlY3QubWF4
WSgpICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBwYWludEluZm8tPnJlY3QueSgpKQogICAgICAg
ICAgICAgfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkg
PCBwYWludEluZm8tPnJlY3QubWF4WCgpICYmIHBoeXNpY2FsUmVjdC5tYXhYKCkgPiBwYWludElu
Zm8tPnJlY3QueCgpKSkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZShjdXJyLT5saW5lU2VsZWN0
aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJv
b3RCbG9jaywgc2VsVG9wLCBzZWxIZWlnaHQsIGNhY2hlLCBwYWludEluZm8pKTsKQEAgLTI2MjYs
NyArMjY0Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVMb2dpY2FsSGVpZ2gKIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpzZXRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudChSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogZmxvd0ZyYWdtZW50KQogewogICAgIGlmICghbV9yYXJlRGF0YSkKLSAg
ICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSh0
aGlzKSk7CisgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tGbG93
UmFyZURhdGEoKnRoaXMpKTsKICAgICBpZiAobV9yYXJlRGF0YS0+bV9yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+
ZGVzdHJveSgpOwogICAgIG1fcmFyZURhdGEtPm1fcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBm
bG93RnJhZ21lbnQ7CkBAIC0yODQwLDcgKzI4NTYsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
QmxvY2tGbG93Ojpwb3NpdGlvCiAgICAgICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKICAgICAgICAgICAgIHBvaW50ID0gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7CiAgICAgICAg
IGlmIChjbG9zZXN0Qm94LT5yZW5kZXJlcigpLmlzUmVwbGFjZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKHRoaXMsICZ0
b1JlbmRlckJveChjbG9zZXN0Qm94LT5yZW5kZXJlcigpKSwgcG9pbnQpOworICAgICAgICAgICAg
cmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMoKnRoaXMs
IHRvUmVuZGVyQm94KGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkpLCBwb2ludCk7CiAgICAgICAgIHJl
dHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAko
cmV2aXNpb24gMTU3Nzg5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NywxMyArODcsMTMgQEAgcHVibGljOgogICAgICAg
ICBMYXlvdXRVbml0IG1fcG9zaXRpdmVNYXJnaW5BZnRlcjsKICAgICAgICAgTGF5b3V0VW5pdCBt
X25lZ2F0aXZlTWFyZ2luQWZ0ZXI7CiAgICAgfTsKLSAgICBNYXJnaW5WYWx1ZXMgbWFyZ2luVmFs
dWVzRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgY29uc3Q7CisgICAgTWFyZ2luVmFsdWVzIG1h
cmdpblZhbHVlc0ZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OwogCiAgICAgLy8gQWxs
b2NhdGVkIG9ubHkgd2hlbiBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0IHZh
bHVlcwogICAgIHN0cnVjdCBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSB7CiAgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YShj
b25zdCBSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrKQorICAgICAgICBSZW5kZXJCbG9ja0Zsb3dSYXJl
RGF0YShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQogICAgICAgICAgICAgOiBtX21hcmdp
bnMocG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGJsb2NrKSwgbmVnYXRpdmVNYXJnaW5CZWZv
cmVEZWZhdWx0KGJsb2NrKSwgcG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoYmxvY2spLCBuZWdh
dGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChibG9jaykpCiAgICAgICAgICAgICAsIG1fbGluZUJyZWFr
VG9Bdm9pZFdpZG93KC0xKQogICAgICAgICAgICAgLCBtX2xpbmVHcmlkQm94KDApCkBAIC0xMDQs
MjEgKzEwNCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHsgCiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoY29uc3QgUmVuZGVy
QmxvY2sqIGJsb2NrKQorICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJl
Zm9yZURlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2smIGJsb2NrKQogICAgICAgICB7IAotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KGJsb2NrLT5tYXJnaW5CZWZvcmUoKSwg
MCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oYmxvY2subWFyZ2lu
QmVmb3JlKCksIDApOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5lZ2F0
aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCisgICAgICAg
IHN0YXRpYyBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5k
ZXJCbG9jayYgYmxvY2spCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8
TGF5b3V0VW5pdD4oLWJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgMCk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2NrLm1hcmdpbkJlZm9yZSgpLCAwKTsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVs
dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCisgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IHBv
c2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrJiBibG9jaykKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KGJsb2NrLT5tYXJn
aW5BZnRlcigpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0Pihi
bG9jay5tYXJnaW5BZnRlcigpLCAwKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgTGF5b3V0
VW5pdCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2sp
CisgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNv
bnN0IFJlbmRlckJsb2NrJiBibG9jaykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+bWFyZ2luQWZ0ZXIoKSwgMCk7CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2NrLm1hcmdpbkFmdGVyKCksIDApOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNYXJnaW5WYWx1ZXMgbV9tYXJnaW5zOwpAQCAt
MTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgTGF5b3V0VW5pdCBtX25lZ2F0aXZlTWFy
Z2luOwogCiAgICAgcHVibGljOgotICAgICAgICBNYXJnaW5JbmZvKFJlbmRlckJsb2NrRmxvdyos
IExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJvcmRlclBh
ZGRpbmcpOworICAgICAgICBNYXJnaW5JbmZvKFJlbmRlckJsb2NrRmxvdyYsIExheW91dFVuaXQg
YmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJvcmRlclBhZGRpbmcpOwogCiAg
ICAgICAgIHZvaWQgc2V0QXRCZWZvcmVTaWRlT2ZCbG9jayhib29sIGIpIHsgbV9hdEJlZm9yZVNp
ZGVPZkJsb2NrID0gYjsgfQogICAgICAgICB2b2lkIHNldEF0QWZ0ZXJTaWRlT2ZCbG9jayhib29s
IGIpIHsgbV9hdEFmdGVyU2lkZU9mQmxvY2sgPSBiOyB9CkBAIC0yMTAsMTQgKzIxMCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIExheW91dFVuaXQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9wb3Np
dGl2ZU1hcmdpbiAtIG1fbmVnYXRpdmVNYXJnaW47IH0KICAgICB9OwogCi0gICAgdm9pZCBsYXlv
dXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBMYXlvdXRVbml0JiBw
cmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90
dG9tKTsKLSAgICB2b2lkIGFkanVzdFBvc2l0aW9uZWRCbG9jayhSZW5kZXJCb3gqIGNoaWxkLCBj
b25zdCBNYXJnaW5JbmZvJik7CisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCYg
Y2hpbGQsIE1hcmdpbkluZm8mLCBMYXlvdXRVbml0JiBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRv
bSwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAgICB2b2lkIGFkanVzdFBv
c2l0aW9uZWRCbG9jayhSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAg
dm9pZCBhZGp1c3RGbG9hdGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mKTsKIAotICAgIExheW91
dFVuaXQgY29sbGFwc2VNYXJnaW5zKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mKTsKLSAg
ICBMYXlvdXRVbml0IGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2lu
SW5mbyYsIExheW91dFVuaXQgb2xkVG9wUG9zTWFyZ2luLCBMYXlvdXRVbml0IG9sZFRvcE5lZ01h
cmdpbiwgTGF5b3V0VW5pdCB5UG9zKTsKLSAgICBMYXlvdXRVbml0IGVzdGltYXRlTG9naWNhbFRv
cFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBMYXlvdXRVbml0
JiBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9uKTsKLSAgICB2b2lkIG1hcmdpbkJlZm9yZUVzdGlt
YXRlRm9yQ2hpbGQoUmVuZGVyQm94KiwgTGF5b3V0VW5pdCYsIExheW91dFVuaXQmLCBib29sJikg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJv
eCYgY2hpbGQsIExheW91dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRp
b24pOworICAgIHZvaWQgdXBkYXRlU3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChSZW5kZXJC
b3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApOworCisgICAgTGF5b3V0VW5pdCBjb2xs
YXBzZU1hcmdpbnMoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYpOworICAgIExheW91dFVu
aXQgY2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gmIGNoaWxkLCBNYXJnaW5JbmZvJiwgTGF5
b3V0VW5pdCBvbGRUb3BQb3NNYXJnaW4sIExheW91dFVuaXQgb2xkVG9wTmVnTWFyZ2luLCBMYXlv
dXRVbml0IHlQb3MpOworICAgIExheW91dFVuaXQgZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24o
UmVuZGVyQm94JiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIExheW91dFVuaXQmIGVzdGltYXRl
V2l0aG91dFBhZ2luYXRpb24pOworICAgIHZvaWQgbWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JDaGls
ZChSZW5kZXJCb3gmLCBMYXlvdXRVbml0JiwgTGF5b3V0VW5pdCYsIGJvb2wmKSBjb25zdDsKICAg
ICB2b2lkIGhhbmRsZUFmdGVyU2lkZU9mQmxvY2soTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQg
Ym90dG9tLCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4o
Y29uc3QgTWFyZ2luSW5mbyYpOwogCkBAIC0yMzYsNyArMjM5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0TGluZUdyaWRCb3goUm9vdElubGluZUJveCogYm94KQogICAgIHsKICAgICAgICAgaWYg
KCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5k
ZXJCbG9ja0Zsb3dSYXJlRGF0YSh0aGlzKSk7CisgICAgICAgICAgICBtX3JhcmVEYXRhID0gYWRv
cHRQdHIobmV3IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhKCp0aGlzKSk7CiAgICAgICAgIGlmICht
X3JhcmVEYXRhLT5tX2xpbmVHcmlkQm94KQogICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9saW5l
R3JpZEJveC0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9s
aW5lR3JpZEJveCA9IGJveDsKQEAgLTI0NywxNCArMjUwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Kik7CiAK
ICAgICBib29sIGNvbnRhaW5zRmxvYXRzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9mbG9h
dGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCk7IH0KLSAg
ICBib29sIGNvbnRhaW5zRmxvYXQoUmVuZGVyQm94KikgY29uc3Q7CisgICAgYm9vbCBjb250YWlu
c0Zsb2F0KFJlbmRlckJveCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUxpbmVC
b3hUcmVlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVPdmVyZmxvdyhMYXlv
dXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1dGVGbG9hdHMgPSBmYWxzZSkg
T1ZFUlJJREU7CiAKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOwotICAgIHZvaWQg
bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9S
ZW1vdmUgPSAwLCBib29sIGluTGF5b3V0ID0gdHJ1ZSk7Ci0gICAgdm9pZCBtYXJrU2libGluZ3NX
aXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSA9IDApOworICAgIHZv
aWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0
VG9SZW1vdmUgPSBudWxscHRyLCBib29sIGluTGF5b3V0ID0gdHJ1ZSk7CisgICAgdm9pZCBtYXJr
U2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSA9IG51
bGxwdHIpOwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yRmxvYXQoY29uc3QgRmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPnkoKSA6IGZsb2F0aW5nT2JqZWN0LT54KCk7IH0K
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVj
dCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBmbG9hdGluZ09iamVjdC0+bWF4WSgpIDogZmxvYXRpbmdPYmplY3QtPm1heFgoKTsgfQpA
QCAtMzI1LDE3ICszMjgsMTcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBM
YXlvdXRVbml0IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIDogUmVu
ZGVyQmxvY2tGbG93UmFyZURhdGE6OnBvc2l0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKTsg
fQotICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLm5lZ2F0aXZlTWFyZ2luQmVmb3Jl
KCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0
KHRoaXMpOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXhQb3NpdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2ZU1hcmdp
bkFmdGVyKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6cG9zaXRpdmVNYXJnaW5BZnRlckRl
ZmF1bHQodGhpcyk7IH0KLSAgICBMYXlvdXRVbml0IG1heE5lZ2F0aXZlTWFyZ2luQWZ0ZXIoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLm5lZ2F0aXZl
TWFyZ2luQWZ0ZXIoKSA6IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkFm
dGVyRGVmYXVsdCh0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4UG9zaXRpdmVNYXJnaW5CZWZv
cmUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnBv
c2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6cG9zaXRpdmVN
YXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVN
YXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9t
YXJnaW5zLm5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6
bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4
UG9zaXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX21hcmdpbnMucG9zaXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tGbG93UmFy
ZURhdGE6OnBvc2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKTsgfQorICAgIExheW91dFVu
aXQgbWF4TmVnYXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX21hcmdpbnMubmVnYXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tG
bG93UmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKTsgfQogCiAgICAg
dm9pZCBpbml0TWF4TWFyZ2luVmFsdWVzKCkKICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0
YSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zID0g
TWFyZ2luVmFsdWVzKFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9y
ZURlZmF1bHQodGhpcykgLCBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5C
ZWZvcmVEZWZhdWx0KHRoaXMpLAotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6
OnBvc2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KHRoaXMpLCBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0
YTo6bmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQodGhpcykpOworICAgICAgICBtX3JhcmVEYXRh
LT5tX21hcmdpbnMgPSBNYXJnaW5WYWx1ZXMoUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6OnBvc2l0
aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCgqdGhpcykgLCBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6
bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKSwKKyAgICAgICAgICAgIFJlbmRlckJs
b2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCgqdGhpcyksIFJlbmRl
ckJsb2NrRmxvd1JhcmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCgqdGhpcykpOwog
ICAgICAgICBtX3JhcmVEYXRhLT5tX2Rpc2NhcmRNYXJnaW5CZWZvcmUgPSBmYWxzZTsKICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9kaXNjYXJkTWFyZ2luQWZ0ZXIgPSBmYWxzZTsKICAgICB9CkBAIC0z
NDksMTUgKzM1MiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtdXN0RGlzY2FyZE1hcmdpbkJl
Zm9yZSgpIGNvbnN0OwogICAgIGJvb2wgbXVzdERpc2NhcmRNYXJnaW5BZnRlcigpIGNvbnN0Owog
Ci0gICAgYm9vbCBtdXN0RGlzY2FyZE1hcmdpbkJlZm9yZUZvckNoaWxkKGNvbnN0IFJlbmRlckJv
eCopIGNvbnN0OwotICAgIGJvb2wgbXVzdERpc2NhcmRNYXJnaW5BZnRlckZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCopIGNvbnN0OwotCi0gICAgYm9vbCBtdXN0U2VwYXJhdGVNYXJnaW5CZWZvcmVG
b3JDaGlsZChjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKLSAgICBib29sIG11c3RTZXBhcmF0ZU1h
cmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94KikgY29uc3Q7Ci0KLSAgICBMYXlvdXRV
bml0IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2Fs
T2Zmc2V0KTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhlbiByZXR1cm4g
YSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1u
LgotICAgIExheW91dFVuaXQgYXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCogY2hpbGQsIExheW91
dFVuaXQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFu
IGFmdGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyBvZmZzZXQgdGhhdCBzaGlmdHMgdG8gdGhl
IHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KLSAgICBMYXlvdXRVbml0IGFkanVzdEJsb2Nr
Q2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRvcEFmdGVyQ2xlYXIsIExheW91
dFVuaXQgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiwgUmVuZGVyQm94KiBjaGlsZCwgYm9vbCBh
dEJlZm9yZVNpZGVPZkJsb2NrKTsKKyAgICBib29sIG11c3REaXNjYXJkTWFyZ2luQmVmb3JlRm9y
Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CisgICAgYm9vbCBtdXN0RGlzY2FyZE1hcmdp
bkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CisgICAgYm9vbCBtdXN0U2Vw
YXJhdGVNYXJnaW5CZWZvcmVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKKyAgICBi
b29sIG11c3RTZXBhcmF0ZU1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29u
c3Q7CisKKyAgICBMYXlvdXRVbml0IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94JiBjaGlsZCwg
TGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0KTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBi
cmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRo
ZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIExheW91dFVuaXQgYXBwbHlBZnRlckJyZWFrKFJlbmRl
ckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYpOyAvLyBJ
ZiB0aGUgY2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyBvZmZzZXQg
dGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBMYXlv
dXRVbml0IGFkanVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRv
cEFmdGVyQ2xlYXIsIExheW91dFVuaXQgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiwgUmVuZGVy
Qm94JiBjaGlsZCwgYm9vbCBhdEJlZm9yZVNpZGVPZkJsb2NrKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3
U3R5bGUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgT1ZFUlJJREU7CkBAIC0zNzMs
MTAgKzM3NSwxMCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIG1vdmVBbGxDaGlsZHJl
bkluY2x1ZGluZ0Zsb2F0c1RvKFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBib29sIGZ1bGxSZW1vdmVJ
bnNlcnQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50T3ZlcmhhbmdpbmdGbG9h
dHMoYm9vbCBwYWludEFsbERlc2NlbmRhbnRzKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcE91dEZsb2F0aW5nT2JqZWN0cyhSZW5kZXJCbG9jayosIGNvbnN0IFBhaW50SW5m
byosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBjbGlwT3V0RmxvYXRpbmdPYmplY3RzKFJlbmRlckJsb2NrJiwgY29uc3Qg
UGFpbnRJbmZvKiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRTaXplJikgT1ZFUlJJ
REU7CiAKLSAgICBGbG9hdGluZ09iamVjdCogaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
Kik7Ci0gICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKKyAgICBGbG9h
dGluZ09iamVjdCogaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94Jik7CisgICAgdm9pZCBy
ZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5n
T2JqZWN0c0JlbG93KEZsb2F0aW5nT2JqZWN0KiwgaW50IGxvZ2ljYWxPZmZzZXQpOwogICAgIExh
eW91dFBvaW50IGNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCosIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCkgY29uc3Q7CiAKQEAgLTM5MSwxMSAr
MzkzLDExIEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUgPSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0UmlnaHQp
IGNvbnN0OyAKICAgICBMYXlvdXRVbml0IG5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhMYXlv
dXRVbml0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdE1h
cmdpbkJveE9mZnNldCkgY29uc3Q7CiAgICAgCi0gICAgTGF5b3V0VW5pdCBhZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkLCBib29sIG1ha2VDaGlsZFBhaW50T3RoZXJG
bG9hdHMpOwotICAgIGJvb2wgaGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqKTsKKyAgICBM
YXlvdXRVbml0IGFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrRmxvdyYgY2hpbGQsIGJv
b2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyk7CisgICAgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zs
b2F0KFJlbmRlckJveCYpOwogICAgIHZvaWQgYWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2Nr
RmxvdyogcHJldiwgTGF5b3V0VW5pdCB4b2Zmc2V0LCBMYXlvdXRVbml0IHlvZmZzZXQpOwogICAg
IGJvb2wgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSB7IHJldHVybiBwYXJlbnQoKSAmJiAhaGFzQ29s
dW1ucygpICYmIGNvbnRhaW5zRmxvYXRzKCkgJiYgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkg
PiBsb2dpY2FsSGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGdldENsZWFyRGVsdGEoUmVuZGVy
Qm94KiBjaGlsZCwgTGF5b3V0VW5pdCB5UG9zKTsKKyAgICBMYXlvdXRVbml0IGdldENsZWFyRGVs
dGEoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCB5UG9zKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaGl0VGVz
dElubGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKQEAgLTQwOCw3
ICs0MTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5n
ZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSwgUm9vdElu
bGluZUJveCogaGlnaGVzdCA9IDApOwogCi0gICAgdmlydHVhbCBHYXBSZWN0cyBpbmxpbmVTZWxl
Y3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrLAorICAgIHZpcnR1YWwgR2FwUmVjdHMgaW5saW5lU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlv
biwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKICAgICAgICAgTGF5b3V0
VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hl
cyYsIGNvbnN0IFBhaW50SW5mbyopIE9WRVJSSURFOwogICAgIAogICAgIFBvc2l0aW9uIHBvc2l0
aW9uRm9yQm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBjb25zdDsKQEAgLTQyOCw3
ICs0MzAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUm9vdElubGluZUJveCogY3JlYXRlUm9v
dElubGluZUJveCgpOyAvLyBTdWJjbGFzc2VkIGJ5IFNWRyBhbmQgUnVieS4KICAgICBJbmxpbmVG
bG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiwgY29uc3QgTGluZUluZm8mLCBJ
bmxpbmVCb3gqIGNoaWxkQm94LCBib29sIHN0YXJ0c05ld1NlZ21lbnQpOwogICAgIFJvb3RJbmxp
bmVCb3gqIGNvbnN0cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBjb25zdCBMaW5lSW5m
byYpOwotICAgIHZvaWQgc2V0TWFyZ2luc0ZvclJ1YnlSdW4oQmlkaVJ1biosIFJlbmRlclJ1YnlS
dW4qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBMaW5lSW5mbyYpOworICAgIHZvaWQgc2V0TWFyZ2lu
c0ZvclJ1YnlSdW4oQmlkaVJ1biosIFJlbmRlclJ1YnlSdW4mLCBSZW5kZXJPYmplY3QqLCBjb25z
dCBMaW5lSW5mbyYpOwogICAgIHZvaWQgY29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zv
ckxpbmUoUm9vdElubGluZUJveCosIGNvbnN0IExpbmVJbmZvJiwgQmlkaVJ1biogZmlyc3RSdW4s
IEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCwgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBXb3JkTWVhc3Vy
ZW1lbnRzJik7CiAgICAgQmlkaVJ1biogY29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zv
clNlZ21lbnQoUm9vdElubGluZUJveCosIGNvbnN0IExpbmVJbmZvJiwgRVRleHRBbGlnbiwgZmxv
YXQmIGxvZ2ljYWxMZWZ0LAogICAgICAgICBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBC
aWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUmLCBXb3JkTWVhc3VyZW1lbnRzJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTU3Nzg5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgc3RydWN0IFJlbmRlclRleHRJbmZvIHsKIAogY2xh
c3MgTGluZUJyZWFrZXIgewogcHVibGljOgotICAgIExpbmVCcmVha2VyKFJlbmRlckJsb2NrRmxv
dyogYmxvY2spCisgICAgTGluZUJyZWFrZXIoUmVuZGVyQmxvY2tGbG93JiBibG9jaykKICAgICAg
ICAgOiBtX2Jsb2NrKGJsb2NrKQogICAgIHsKICAgICAgICAgcmVzZXQoKTsKQEAgLTk1LDYgKzk1
LDcgQEAgcHVibGljOgogICAgIGJvb2wgbGluZVdhc0h5cGhlbmF0ZWQoKSB7IHJldHVybiBtX2h5
cGhlbmF0ZWQ7IH0KICAgICBjb25zdCBWZWN0b3I8UmVuZGVyQm94Kj4mIHBvc2l0aW9uZWRPYmpl
Y3RzKCkgeyByZXR1cm4gbV9wb3NpdGlvbmVkT2JqZWN0czsgfQogICAgIEVDbGVhciBjbGVhcigp
IHsgcmV0dXJuIG1fY2xlYXI7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0KCk7CiAKQEAg
LTEwMiw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFj
ZShJbmxpbmVJdGVyYXRvciYsIGNvbnN0IExpbmVJbmZvJik7CiAgICAgdm9pZCBza2lwTGVhZGlu
Z1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiwgTGluZUluZm8mLCBGbG9hdGluZ09iamVj
dCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZVdpZHRoJik7CiAKLSAgICBSZW5kZXJC
bG9ja0Zsb3cqIG1fYmxvY2s7CisgICAgUmVuZGVyQmxvY2tGbG93JiBtX2Jsb2NrOwogICAgIGJv
b2wgbV9oeXBoZW5hdGVkOwogICAgIEVDbGVhciBtX2NsZWFyOwogICAgIFZlY3RvcjxSZW5kZXJC
b3gqPiBtX3Bvc2l0aW9uZWRPYmplY3RzOwpAQCAtMzI0LDIzICszMjUsMjMgQEAgc3RhdGljIGlu
bGluZSBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveAogCiAvLyBGSVhNRTogRG9uJ3QgbGV0IGNv
dW50ZXJzIG1hcmsgdGhlbXNlbHZlcyBhcyBuZWVkaW5nIHByZWYgd2lkdGggcmVjYWxjcyBkdXJp
bmcgbGF5b3V0CiAvLyBzbyB3ZSBkb24ndCBuZWVkIHRoaXMgaGFjay4KLXN0YXRpYyBpbmxpbmUg
dm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyVGV4dCogbykKK3N0YXRpYyBpbmxpbmUg
dm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCkKIHsKLSAg
ICBpZiAoIW8tPnByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpIHx8ICFvLT5pc0NvdW50ZXIo
KSkKKyAgICBpZiAoIXJlbmRlclRleHQucHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkgfHwg
IXJlbmRlclRleHQuaXNDb3VudGVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB0b1JlbmRlckNv
dW50ZXIobyktPnVwZGF0ZUNvdW50ZXIoKTsKKyAgICB0b1JlbmRlckNvdW50ZXIocmVuZGVyVGV4
dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlydHlMaW5lQm94
ZXNGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIG8sIGJvb2wgZnVsbExheW91dCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBkaXJ0eUxpbmVCb3hlc0ZvclJlbmRlcmVyKFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIsIGJvb2wgZnVsbExheW91dCkKIHsKLSAgICBpZiAoby0+aXNUZXh0KCkpIHsKLSAgICAgICAg
UmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChvKTsKKyAgICBpZiAocmVuZGVy
ZXIuaXNUZXh0KCkpIHsKKyAgICAgICAgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCA9IHRvUmVuZGVy
VGV4dChyZW5kZXJlcik7CiAgICAgICAgIHVwZGF0ZUNvdW50ZXJJZk5lZWRlZChyZW5kZXJUZXh0
KTsKLSAgICAgICAgcmVuZGVyVGV4dC0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7Ci0gICAg
fSBlbHNlIGlmIChvLT5pc0xpbmVCcmVhaygpKQotICAgICAgICB0b1JlbmRlckxpbmVCcmVhayhv
KS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7CisgICAgICAgIHJlbmRlclRleHQuZGlydHlM
aW5lQm94ZXMoZnVsbExheW91dCk7CisgICAgfSBlbHNlIGlmIChyZW5kZXJlci5pc0xpbmVCcmVh
aygpKQorICAgICAgICB0b1JlbmRlckxpbmVCcmVhayhyZW5kZXJlcikuZGlydHlMaW5lQm94ZXMo
ZnVsbExheW91dCk7CiAgICAgZWxzZQotICAgICAgICB0b1JlbmRlcklubGluZShvKS0+ZGlydHlM
aW5lQm94ZXMoZnVsbExheW91dCk7CisgICAgICAgIHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKS5k
aXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKIH0KIAogc3RhdGljIGJvb2wgcGFyZW50SXNDb25z
dHJ1Y3RlZE9ySGF2ZU5leHQoSW5saW5lRmxvd0JveCogcGFyZW50Qm94KQpAQCAtNTg2LDcgKzU4
Nyw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckNlbnRlckEKICAgICAgICAg
bG9naWNhbExlZnQgKz0gdG90YWxMb2dpY2FsV2lkdGggPiBhdmFpbGFibGVMb2dpY2FsV2lkdGgg
PyAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGgpIDogKGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCAtIHRvdGFsTG9naWNhbFdpZHRoKSAvIDIgLSB0cmFpbGluZ1NwYWNlV2lk
dGg7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRNYXJnaW5zRm9yUnVieVJ1bihCaWRp
UnVuKiBydW4sIFJlbmRlclJ1YnlSdW4qIHJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIHByZXZpb3Vz
T2JqZWN0LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6
c2V0TWFyZ2luc0ZvclJ1YnlSdW4oQmlkaVJ1biogcnVuLCBSZW5kZXJSdWJ5UnVuJiByZW5kZXJl
ciwgUmVuZGVyT2JqZWN0KiBwcmV2aW91c09iamVjdCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZv
KQogewogICAgIGludCBzdGFydE92ZXJoYW5nOwogICAgIGludCBlbmRPdmVyaGFuZzsKQEAgLTU5
Nyw3ICs1OTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TWFyZ2luc0ZvclJ1YnlSCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICByZW5kZXJlci0+Z2V0T3Zl
cmhhbmcobGluZUluZm8uaXNGaXJzdExpbmUoKSwgcmVuZGVyZXItPnN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IHByZXZpb3VzT2JqZWN0IDogbmV4dE9iamVjdCwgcmVuZGVyZXIt
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG5leHRPYmplY3QgOiBwcmV2aW91
c09iamVjdCwgc3RhcnRPdmVyaGFuZywgZW5kT3ZlcmhhbmcpOworICAgIHJlbmRlcmVyLmdldE92
ZXJoYW5nKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksIHJlbmRlcmVyLnN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IHByZXZpb3VzT2JqZWN0IDogbmV4dE9iamVjdCwgcmVuZGVyZXIu
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV4dE9iamVjdCA6IHByZXZpb3Vz
T2JqZWN0LCBzdGFydE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7CiAgICAgc2V0TWFyZ2luU3RhcnRG
b3JDaGlsZChyZW5kZXJlciwgLXN0YXJ0T3ZlcmhhbmcpOwogICAgIHNldE1hcmdpbkVuZEZvckNo
aWxkKHJlbmRlcmVyLCAtZW5kT3ZlcmhhbmcpOwogfQpAQCAtOTI3LDggKzkyOCw4IEBAIEJpZGlS
dW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghci0+
bV9vYmplY3QtPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gq
IHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHItPm1fb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBp
ZiAocmVuZGVyQm94LT5pc1J1YnlSdW4oKSkKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gmIHJl
bmRlckJveCA9IHRvUmVuZGVyQm94KCpyLT5tX29iamVjdCk7CisgICAgICAgICAgICAgICAgaWYg
KHJlbmRlckJveC5pc1J1YnlSdW4oKSkKICAgICAgICAgICAgICAgICAgICAgc2V0TWFyZ2luc0Zv
clJ1YnlSdW4ociwgdG9SZW5kZXJSdWJ5UnVuKHJlbmRlckJveCksIHByZXZpb3VzT2JqZWN0LCBs
aW5lSW5mbyk7CiAgICAgICAgICAgICAgICAgci0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aChsb2dp
Y2FsV2lkdGhGb3JDaGlsZChyZW5kZXJCb3gpKTsKICAgICAgICAgICAgICAgICB0b3RhbExvZ2lj
YWxXaWR0aCArPSBtYXJnaW5TdGFydEZvckNoaWxkKHJlbmRlckJveCkgKyBtYXJnaW5FbmRGb3JD
aGlsZChyZW5kZXJCb3gpOwpAQCAtOTkzLDIxICs5OTQsMjEgQEAgc3RhdGljIGlubGluZSBib29s
IGlzQ29sbGFwc2libGVTcGFjZShVQwogfQogCiAKLXN0YXRpYyB2b2lkIHNldFN0YXRpY1Bvc2l0
aW9ucyhSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrLCBSZW5kZXJCb3gqIGNoaWxkKQorc3RhdGljIHZv
aWQgc2V0U3RhdGljUG9zaXRpb25zKFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIFJlbmRlckJveCYg
Y2hpbGQpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBtYXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJl
YWxseSByaWdodC4gSXQncyBhIGJlc3QtZ3Vlc3MgYXBwcm94aW1hdGlvbiB0aGF0CiAgICAgLy8g
d2lsbCB3b3JrIGZvciB0aGUgY29tbW9uIGNhc2VzCi0gICAgUmVuZGVyRWxlbWVudCogY29udGFp
bmVyQmxvY2sgPSBjaGlsZC0+Y29udGFpbmVyKCk7Ci0gICAgTGF5b3V0VW5pdCBibG9ja0hlaWdo
dCA9IGJsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgUmVuZGVyRWxlbWVudCogY29udGFpbmVy
QmxvY2sgPSBjaGlsZC5jb250YWluZXIoKTsKKyAgICBMYXlvdXRVbml0IGJsb2NrSGVpZ2h0ID0g
YmxvY2subG9naWNhbEhlaWdodCgpOwogICAgIGlmIChjb250YWluZXJCbG9jay0+aXNSZW5kZXJJ
bmxpbmUoKSkgewogICAgICAgICAvLyBBIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5lIGVuY2xv
c2VzIHVzLiBJbiB0aGlzIGNhc2UsIHdlIGFsc28gaGF2ZSB0byBkZXRlcm1pbmUgb3VyCiAgICAg
ICAgIC8vIHBvc2l0aW9uIGFzIHRob3VnaCB3ZSB3ZXJlIGFuIGlubGluZS4gU2V0IHxzdGF0aWNJ
bmxpbmVQb3NpdGlvbnwgYW5kIHxzdGF0aWNCbG9ja1Bvc2l0aW9ufCBvbiB0aGUgcmVsYXRpdmUg
cG9zaXRpb25lZAogICAgICAgICAvLyBpbmxpbmUgc28gdGhhdCB3ZSBjYW4gb2J0YWluIHRoZSB2
YWx1ZSBsYXRlci4KLSAgICAgICAgdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyQmxvY2spLT5sYXll
cigpLT5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihibG9jay0+c3RhcnRBbGlnbmVkT2Zmc2V0Rm9y
TGluZShibG9ja0hlaWdodCwgZmFsc2UpKTsKKyAgICAgICAgdG9SZW5kZXJJbmxpbmUoY29udGFp
bmVyQmxvY2spLT5sYXllcigpLT5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihibG9jay5zdGFydEFs
aWduZWRPZmZzZXRGb3JMaW5lKGJsb2NrSGVpZ2h0LCBmYWxzZSkpOwogICAgICAgICB0b1JlbmRl
cklubGluZShjb250YWluZXJCbG9jayktPmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24o
YmxvY2tIZWlnaHQpOwogICAgIH0KLSAgICBibG9jay0+dXBkYXRlU3RhdGljSW5saW5lUG9zaXRp
b25Gb3JDaGlsZChjaGlsZCwgYmxvY2tIZWlnaHQpOwotICAgIGNoaWxkLT5sYXllcigpLT5zZXRT
dGF0aWNCbG9ja1Bvc2l0aW9uKGJsb2NrSGVpZ2h0KTsKKyAgICBibG9jay51cGRhdGVTdGF0aWNJ
bmxpbmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBibG9ja0hlaWdodCk7CisgICAgY2hpbGQubGF5
ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlvbihibG9ja0hlaWdodCk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtMTA3OSw3ICsxMDgwLDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmFwcGVuZEZsb2F0aW5nT2JqZQogewogICAgIEFTU0VSVCghZmxvYXRpbmdP
YmplY3QtPm9yaWdpbmF0aW5nTGluZSgpKTsKICAgICBmbG9hdGluZ09iamVjdC0+c2V0T3JpZ2lu
YXRpbmdMaW5lKGxhc3RSb290Qm94KCkpOwotICAgIGxhc3RSb290Qm94KCktPmFwcGVuZEZsb2F0
KCZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CisgICAgbGFzdFJvb3RCb3goKS0+YXBwZW5k
RmxvYXQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOwogfQogCiAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgYSBCaWRpU3RhdHVzIGNvbnN0cnVjdG9yIG9yIGNyZWF0ZSBtZXRob2QuCkBAIC0x
MTI4LDcgKzExMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JT
CiAKICAgICAgICAgLy8gRklYTUU6IFRoZSBmYWN0IHRoYXQgd2UgaGF2ZSB0byBjb25zdHJ1Y3Qg
YW4gSXRlcmF0b3IgaGVyZQogICAgICAgICAvLyBjdXJyZW50bHkgcHJldmVudHMgdGhpcyBjb2Rl
IGZyb20gbW92aW5nIGludG8gQmlkaVJlc29sdmVyLgotICAgICAgICBpZiAoIWJpZGlGaXJzdFNr
aXBwaW5nRW1wdHlJbmxpbmVzKGlzb2xhdGVkSW5saW5lLCAmaXNvbGF0ZWRSZXNvbHZlcikpCisg
ICAgICAgIGlmICghYmlkaUZpcnN0U2tpcHBpbmdFbXB0eUlubGluZXMoKmlzb2xhdGVkSW5saW5l
LCAmaXNvbGF0ZWRSZXNvbHZlcikpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAv
LyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcnVu
IHdpdGhpbiB0aGUgaXNvbGF0ZSB0aGF0IHdhcyBpZGVudGlmaWVkCkBAIC0xNTE0LDcgKzE1MTUs
NyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0CiAgICAgUmVuZGVy
VGV4dEluZm8gcmVuZGVyVGV4dEluZm87CiAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRp
Y2FsUG9zaXRpb25DYWNoZTsKIAotICAgIExpbmVCcmVha2VyIGxpbmVCcmVha2VyKHRoaXMpOwor
ICAgIExpbmVCcmVha2VyIGxpbmVCcmVha2VyKCp0aGlzKTsKIAogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQogICAgIExheW91dFNpemUgbG9naWNhbE9mZnNldEZyb21TaGFwZUNvbnRhaW5lcjsKQEAg
LTE2NDMsNyArMTY0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxv
YXQKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZUJyZWFr
ZXIucG9zaXRpb25lZE9iamVjdHMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHNldFN0YXRp
Y1Bvc2l0aW9ucyh0aGlzLCBsaW5lQnJlYWtlci5wb3NpdGlvbmVkT2JqZWN0cygpW2ldKTsKKyAg
ICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucygqdGhpcywgKmxpbmVCcmVha2VyLnBvc2l0aW9u
ZWRPYmplY3RzKClbaV0pOwogCiAgICAgICAgIGlmICghbGF5b3V0U3RhdGUubGluZUluZm8oKS5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0Rmlyc3RM
aW5lKGZhbHNlKTsKQEAgLTE2NjMsNyArMTY2NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojps
YXlvdXRSdW5zQW5kRmxvYXQKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGl0LT5nZXQoKTsKICAgICAgICAg
ICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCZmLT5yZW5kZXJlcigpID09IGxheW91dFN0YXRlLmZsb2F0cygpW2xheW91dFN0
YXRlLmZsb2F0SW5kZXgoKV0ub2JqZWN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoJmYtPnJl
bmRlcmVyKCkgPT0gJmxheW91dFN0YXRlLmZsb2F0cygpW2xheW91dFN0YXRlLmZsb2F0SW5kZXgo
KV0ub2JqZWN0KTsKICAgICAgICAgICAgICAgICAvLyBJZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFz
IGNoYW5nZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRoIGNsZWFuIGxpbmVzLgogICAgICAgICAg
ICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG9hdHMoKVtsYXlvdXRTdGF0ZS5mbG9hdEluZGV4KCld
LnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5k
TGluZU1hdGNoID0gZmFsc2U7CkBAIC0xNzU5LDEyICsxNzYwLDEyIEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpsaW5rVG9FbmRMaW5lSWZOZWUKICAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUuZmxvd1RocmVhZCgpKQogICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5l
KGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGlu
ZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGYgPSBj
bGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IGYgIT0gZW5kOyArK2YpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGluc2VydEZsb2F0aW5n
T2JqZWN0KCpmKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gY2xlYW5MaW5l
RmxvYXRzLT5iZWdpbigpLCBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3gg
PSAqaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QgPSBpbnNlcnRGbG9hdGluZ09iamVjdCgqZmxvYXRpbmdCb3gpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldE9yaWdpbmF0aW5nTGlu
ZShsaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNh
bFRvcEZvckNoaWxkKCpmKSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKCpmKSArIGRlbHRhKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbFRvcEZvckNoaWxk
KCpmbG9hdGluZ0JveCkgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZmxvYXRpbmdCb3gpICsgZGVs
dGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTE4MjIsOSArMTgyMyw5IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjpyZXBhaW50RGlydHlGbG9hdHMKICAgICAvLyBwYWludGVk
LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmxvYXRDb3VudDsgKytpKSB7CiAgICAgICAg
IGlmICghZmxvYXRzW2ldLmV2ZXJIYWRMYXlvdXQpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCog
ZiA9IGZsb2F0c1tpXS5vYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIWYtPngoKSAmJiAhZi0+eSgp
ICYmIGYtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQotICAgICAgICAgICAgICAgIGYt
PnJlcGFpbnQoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gZmxvYXRzW2ldLm9iamVj
dDsKKyAgICAgICAgICAgIGlmICghYm94LngoKSAmJiAhYm94LnkoKSAmJiBib3guY2hlY2tGb3JS
ZXBhaW50RHVyaW5nTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgYm94LnJlcGFpbnQoKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTE4NjksNDAgKzE4NzAsNDAgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcgogICAgICAgICAvLyBlbGVtZW50cyBhdCB0aGUgc2Ft
ZSB0aW1lLgogICAgICAgICBib29sIGhhc0lubGluZUNoaWxkID0gZmFsc2U7CiAgICAgICAgIFZl
Y3RvcjxSZW5kZXJCb3gqPiByZXBsYWNlZENoaWxkcmVuOwotICAgICAgICBmb3IgKElubGluZVdh
bGtlciB3YWxrZXIodGhpcyk7ICF3YWxrZXIuYXRFbmQoKTsgd2Fsa2VyLmFkdmFuY2UoKSkgewot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gd2Fsa2VyLmN1cnJlbnQoKTsKKyAgICAgICAg
Zm9yIChJbmxpbmVXYWxrZXIgd2Fsa2VyKCp0aGlzKTsgIXdhbGtlci5hdEVuZCgpOyB3YWxrZXIu
YWR2YW5jZSgpKSB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QmIG8gPSAqd2Fsa2VyLmN1cnJl
bnQoKTsKIAotICAgICAgICAgICAgaWYgKCFoYXNJbmxpbmVDaGlsZCAmJiBvLT5pc0lubGluZSgp
KQorICAgICAgICAgICAgaWYgKCFoYXNJbmxpbmVDaGlsZCAmJiBvLmlzSW5saW5lKCkpCiAgICAg
ICAgICAgICAgICAgaGFzSW5saW5lQ2hpbGQgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAoby0+
aXNSZXBsYWNlZCgpIHx8IG8tPmlzRmxvYXRpbmcoKSB8fCBvLT5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7
CisgICAgICAgICAgICBpZiAoby5pc1JlcGxhY2VkKCkgfHwgby5pc0Zsb2F0aW5nKCkgfHwgby5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlckJveCYgYm94
ID0gdG9SZW5kZXJCb3gobyk7CiAKLSAgICAgICAgICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJl
biB8fCBib3gtPmhhc1JlbGF0aXZlRGltZW5zaW9ucygpKQotICAgICAgICAgICAgICAgICAgICBi
b3gtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVsYXlvdXRDaGlsZHJlbiB8fCBib3guaGFzUmVsYXRpdmVEaW1lbnNpb25zKCkpCisgICAg
ICAgICAgICAgICAgICAgIGJveC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAK
ICAgICAgICAgICAgICAgICAvLyBJZiByZWxheW91dENoaWxkcmVuIGlzIHNldCBhbmQgdGhlIGNo
aWxkIGhhcyBwZXJjZW50YWdlIHBhZGRpbmcgb3IgYW4gZW1iZWRkZWQgY29udGVudCBib3gsIHdl
IGFsc28gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBjaGlsZHMgcHJlZiB3aWR0aHMuCi0gICAgICAg
ICAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgYm94LT5uZWVkc1ByZWZlcnJlZFdpZHRo
c1JlY2FsY3VsYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgby0+c2V0UHJlZmVycmVkTG9n
aWNhbFdpZHRoc0RpcnR5KHRydWUsIE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYg
KHJlbGF5b3V0Q2hpbGRyZW4gJiYgYm94Lm5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlv
bigpKQorICAgICAgICAgICAgICAgICAgICBib3guc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0Rp
cnR5KHRydWUsIE1hcmtPbmx5VGhpcyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoby0+aXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG8tPmNvbnRhaW5pbmdCbG9j
aygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGJveCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoby0+aXNGbG9hdGluZygpKQorICAgICAgICAgICAgICAgIGlmIChib3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGJveC5jb250YWluaW5nQmxvY2soKS0+
aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJv
eC5pc0Zsb2F0aW5nKCkpCiAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLmZsb2F0cygp
LmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlz
RnVsbExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXNGdWxsTGF5b3V0IHx8IGJveC5uZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlcGxhY2VkIGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGJveC0+ZGlydHlM
aW5lQm94ZXMoaXNGdWxsTGF5b3V0KTsKKyAgICAgICAgICAgICAgICAgICAgYm94LmRpcnR5TGlu
ZUJveGVzKGlzRnVsbExheW91dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bGxMYXlv
dXQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZENoaWxkcmVuLmFwcGVuZChib3gp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRDaGlsZHJlbi5hcHBlbmQoJmJveCk7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+
bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJveC5sYXlvdXRJZk5l
ZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNU
ZXh0T3JMaW5lQnJlYWsoKSB8fCAoby0+aXNSZW5kZXJJbmxpbmUoKSAmJiAhd2Fsa2VyLmF0RW5k
T2ZJbmxpbmUoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJJbmxpbmUoKSkK
LSAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJJbmxpbmUobyktPnVwZGF0ZUFsd2F5c0NyZWF0
ZUxpbmVCb3hlcyhsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpIHx8IG8tPnNlbGZOZWVkc0xheW91dCgpKQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChvLmlzVGV4dE9yTGluZUJyZWFrKCkgfHwgKG8uaXNSZW5k
ZXJJbmxpbmUoKSAmJiAhd2Fsa2VyLmF0RW5kT2ZJbmxpbmUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoby5pc1JlbmRlcklubGluZSgpKQorICAgICAgICAgICAgICAgICAgICB0b1JlbmRlcklu
bGluZShvKS51cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMobGF5b3V0U3RhdGUuaXNGdWxsTGF5
b3V0KCkpOworICAgICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSB8
fCBvLnNlbGZOZWVkc0xheW91dCgpKQogICAgICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVCb3hl
c0ZvclJlbmRlcmVyKG8sIGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpKTsKLSAgICAgICAgICAg
ICAgICBvLT5jbGVhck5lZWRzTGF5b3V0KCk7CisgICAgICAgICAgICAgICAgby5jbGVhck5lZWRz
TGF5b3V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTk0MCwyMSArMTk0MSwx
OSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGbG9hdHNJbkNsZWFuCiAgICAgaWYgKCFj
bGVhbkxpbmVGbG9hdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZW5kZXJCb3gq
Pjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKLSAgICBmb3IgKFZlY3Rv
cjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgaXQgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IGNsZWFuTGluZUZsb2F0cy0+YmVn
aW4oKSwgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3ggPSAqaXQ7CiAgICAgICAgIGZsb2F0aW5nQm94
LT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBMYXlvdXRTaXplIG5ld1NpemUoZmxvYXRpbmdC
b3gtPndpZHRoKCkgKyBmbG9hdGluZ0JveC0+bWFyZ2luV2lkdGgoKSwgZmxvYXRpbmdCb3gtPmhl
aWdodCgpICsgZmxvYXRpbmdCb3gtPm1hcmdpbkhlaWdodCgpKTsKICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZmxvYXRJbmRleCA8IGZsb2F0cy5zaXplKCkpOwotICAg
ICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCAhPSBmbG9hdGluZ0JveCkgeworICAg
ICAgICBpZiAoJmZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZmxvYXRpbmdCb3gpIHsKICAg
ICAgICAgICAgIGVuY291bnRlcmVkTmV3RmxvYXQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnNpemUo
KSAhPSBuZXdTaXplKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGZsb2F0VG9wID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnkoKSA6IGZsb2F0
c1tmbG9hdEluZGV4XS5yZWN0LngoKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRIZWln
aHQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4KGZsb2F0c1tmbG9hdEluZGV4XS5y
ZWN0LmhlaWdodCgpLCBuZXdTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1heChmbG9hdHNbZmxv
YXRJbmRleF0ucmVjdC53aWR0aCgpLCBuZXdTaXplLndpZHRoKCkpOworICAgICAgICAgICAgTGF5
b3V0VW5pdCBmbG9hdEhlaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXgoZmxv
YXRzW2Zsb2F0SW5kZXhdLnJlY3QuaGVpZ2h0KCksIG5ld1NpemUuaGVpZ2h0KCkpIDogbWF4KGZs
b2F0c1tmbG9hdEluZGV4XS5yZWN0LndpZHRoKCksIG5ld1NpemUud2lkdGgoKSk7CiAgICAgICAg
ICAgICBmbG9hdEhlaWdodCA9IG1pbihmbG9hdEhlaWdodCwgTGF5b3V0VW5pdDo6bWF4KCkgLSBm
bG9hdFRvcCk7CiAgICAgICAgICAgICBsaW5lLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgIG1h
cmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGxpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpLCBm
bG9hdFRvcCArIGZsb2F0SGVpZ2h0LCBsaW5lKTsKQEAgLTIwNDYsMTQgKzIwNDUsMTQgQEAgUm9v
dElubGluZUJveCogUmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbgogICAgICAgICBSb290SW5saW5l
Qm94KiBsaW5lID0gZmlyc3RSb290Qm94KCk7CiAgICAgICAgIHdoaWxlIChsaW5lICE9IGN1cnIp
IHsKICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9
IGxpbmUtPmZsb2F0c1B0cigpKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+
OjppdGVyYXRvciBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOwotICAgICAgICAgICAgICAg
IGZvciAoVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBmID0gY2xlYW5MaW5lRmxvYXRzLT5i
ZWdpbigpOyBmICE9IGVuZDsgKytmKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiBmbG9hdGluZ09iamVjdCA9IGluc2VydEZsb2F0aW5nT2JqZWN0KCpmKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8gaXQgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCksIGVuZCA9IGNs
ZWFuTGluZUZsb2F0cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gKml0OworICAgICAgICAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpbnNlcnRGbG9hdGluZ09iamVjdCgqZmxv
YXRpbmdCb3gpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWZsb2F0aW5nT2JqZWN0LT5v
cmlnaW5hdGluZ0xpbmUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5z
ZXRPcmlnaW5hdGluZ0xpbmUobGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxI
ZWlnaHQobG9naWNhbFRvcEZvckNoaWxkKCpmKSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKCpmKSk7
CisgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbFRvcEZvckNoaWxk
KCpmbG9hdGluZ0JveCkgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZmxvYXRpbmdCb3gpKTsKICAg
ICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGxheW91dFN0YXRlLmZsb2F0cygpW251bUNsZWFuRmxvYXRzXS5vYmplY3QgPT0g
KmYpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJmxheW91dFN0YXRlLmZsb2F0cygpW251
bUNsZWFuRmxvYXRzXS5vYmplY3QgPT0gZmxvYXRpbmdCb3gpOwogICAgICAgICAgICAgICAgICAg
ICBudW1DbGVhbkZsb2F0cysrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTIwNzQsOSArMjA3Myw5IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrRmxvdzo6ZGV0ZXJt
aW4KICAgICB9IGVsc2UgewogICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxl
KCktPmRpcmVjdGlvbigpOwogICAgICAgICBpZiAoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBQ
bGFpbnRleHQpCi0gICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24s
IElubGluZUl0ZXJhdG9yKHRoaXMsIGJpZGlGaXJzdFNraXBwaW5nRW1wdHlJbmxpbmVzKHRoaXMp
LCAwKSk7CisgICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24sIElu
bGluZUl0ZXJhdG9yKHRoaXMsIGJpZGlGaXJzdFNraXBwaW5nRW1wdHlJbmxpbmVzKCp0aGlzKSwg
MCkpOwogICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlz
T3ZlcnJpZGUoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSkpKTsKLSAgICAgICAgSW5saW5lSXRlcmF0
b3IgaXRlciA9IElubGluZUl0ZXJhdG9yKHRoaXMsIGJpZGlGaXJzdFNraXBwaW5nRW1wdHlJbmxp
bmVzKHRoaXMsICZyZXNvbHZlciksIDApOworICAgICAgICBJbmxpbmVJdGVyYXRvciBpdGVyID0g
SW5saW5lSXRlcmF0b3IodGhpcywgYmlkaUZpcnN0U2tpcHBpbmdFbXB0eUlubGluZXMoKnRoaXMs
ICZyZXNvbHZlciksIDApOwogICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihpdGVyLCBudW1i
ZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOwogICAgIH0KICAgICByZXR1cm4gY3VycjsKQEAg
LTIzMDYsMzcgKzIzMDUsMzYgQEAgYm9vbCBSZW5kZXJCbG9jazo6Z2VuZXJhdGVzTGluZUJveGVz
Rm9ySQogdm9pZCBMaW5lQnJlYWtlcjo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVy
YXRvciYgaXRlcmF0b3IsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKICAgICB3aGlsZSAo
IWl0ZXJhdG9yLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChpdGVyYXRvciwgbGluZUluZm8s
IFRyYWlsaW5nV2hpdGVzcGFjZSkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBp
dGVyYXRvci5tX29iajsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCisgICAgICAgIFJlbmRlck9iamVjdCYgb2JqZWN0ID0gKml0ZXJhdG9yLm1fb2JqOworICAg
ICAgICBpZiAob2JqZWN0LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgc2V0
U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9iamVjdCkpOwotICAgICAgICBl
bHNlIGlmIChvYmplY3QtPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgIG1fYmxvY2stPmluc2Vy
dEZsb2F0aW5nT2JqZWN0KHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAgICBlbHNlIGlmIChv
YmplY3QuaXNGbG9hdGluZygpKQorICAgICAgICAgICAgbV9ibG9jay5pbnNlcnRGbG9hdGluZ09i
amVjdCh0b1JlbmRlckJveChvYmplY3QpKTsKICAgICAgICAgaXRlcmF0b3IuaW5jcmVtZW50KCk7
CiAgICAgfQogfQogCi12b2lkIExpbmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5s
aW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgTGluZUluZm8mIGxpbmVJbmZvLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZVdpZHRoJiB3aWR0aCkKK3ZvaWQgTGlu
ZUJyZWFrZXI6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
dmVyLCBMaW5lSW5mbyYgbGluZUluZm8sIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lLCBMaW5lV2lkdGgmIHdpZHRoKQogewogICAgIHdoaWxlICghcmVzb2x2ZXIucG9z
aXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIucG9zaXRpb24oKSwg
bGluZUluZm8sIExlYWRpbmdXaGl0ZXNwYWNlKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9i
amVjdCA9IHJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmo7Ci0gICAgICAgIGlmIChvYmplY3QtPmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCYgb2JqZWN0ID0g
KnJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmo7CisgICAgICAgIGlmIChvYmplY3QuaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyhtX2Jsb2Nr
LCB0b1JlbmRlckJveChvYmplY3QpKTsKLSAgICAgICAgICAgIGlmIChvYmplY3QtPnN0eWxlKCkt
PmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZXIucnVucygpLmFkZFJ1bihjcmVhdGVSdW4oMCwgMSwgb2JqZWN0LCByZXNvbHZlcikpOworICAg
ICAgICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLT5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUo
KSkgeworICAgICAgICAgICAgICAgIHJlc29sdmVyLnJ1bnMoKS5hZGRSdW4oY3JlYXRlUnVuKDAs
IDEsICZvYmplY3QsIHJlc29sdmVyKSk7CiAgICAgICAgICAgICAgICAgbGluZUluZm8uaW5jcmVt
ZW50UnVuc0Zyb21MZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7CisgICAgICAgIH0gZWxzZSBpZiAob2Jq
ZWN0LmlzRmxvYXRpbmcoKSkgewogICAgICAgICAgICAgLy8gVGhlIHRvcCBtYXJnaW4gZWRnZSBv
ZiBhIHNlbGYtY29sbGFwc2luZyBibG9jayB0aGF0IGNsZWFycyBhIGZsb2F0IGludHJ1ZGVzIHVw
IGludG8gaXQgYnkgdGhlIGhlaWdodCBvZiB0aGUgbWFyZ2luLAogICAgICAgICAgICAgLy8gc28g
aW4gb3JkZXIgdG8gcGxhY2UgdGhpcyBmaXJzdCBjaGlsZCBmbG9hdCBhdCB0aGUgdG9wIGNvbnRl
bnQgZWRnZSBvZiB0aGUgc2VsZi1jb2xsYXBzaW5nIGJsb2NrIGFkZCB0aGUgbWFyZ2luIGJhY2sg
aW4gYmVmb3JlIHBsYWNlbWVudC4KLSAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luT2Zmc2V0
ID0gKCFvYmplY3QtPnByZXZpb3VzU2libGluZygpICYmIG1fYmxvY2stPmlzU2VsZkNvbGxhcHNp
bmdCbG9jaygpICYmIG1fYmxvY2stPnN0eWxlKCktPmNsZWFyKCkgJiYgbV9ibG9jay0+Z2V0Q2xl
YXJEZWx0YShtX2Jsb2NrLCBMYXlvdXRVbml0KCkpKSA/IG1fYmxvY2stPmNvbGxhcHNlZE1hcmdp
bkJlZm9yZUZvckNoaWxkKG1fYmxvY2spIDogTGF5b3V0VW5pdCgpOwotICAgICAgICAgICAgTGF5
b3V0VW5pdCBvbGRMb2dpY2FsSGVpZ2h0ID0gbV9ibG9jay0+bG9naWNhbEhlaWdodCgpOwotICAg
ICAgICAgICAgbV9ibG9jay0+c2V0TG9naWNhbEhlaWdodChvbGRMb2dpY2FsSGVpZ2h0ICsgbWFy
Z2luT2Zmc2V0KTsKLSAgICAgICAgICAgIG1fYmxvY2stPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUo
bV9ibG9jay0+aW5zZXJ0RmxvYXRpbmdPYmplY3QodG9SZW5kZXJCb3gob2JqZWN0KSksIGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7Ci0gICAgICAgICAgICBtX2Js
b2NrLT5zZXRMb2dpY2FsSGVpZ2h0KG9sZExvZ2ljYWxIZWlnaHQpOwotICAgICAgICB9IGVsc2Ug
aWYgKG9iamVjdC0+aXNUZXh0KCkgJiYgb2JqZWN0LT5zdHlsZSgpLT5oYXNUZXh0Q29tYmluZSgp
ICYmIG9iamVjdC0+aXNDb21iaW5lVGV4dCgpICYmICF0b1JlbmRlckNvbWJpbmVUZXh0KCpvYmpl
Y3QpLmlzQ29tYmluZWQoKSkgewotICAgICAgICAgICAgdG9SZW5kZXJDb21iaW5lVGV4dCgqb2Jq
ZWN0KS5jb21iaW5lVGV4dCgpOwotICAgICAgICAgICAgaWYgKHRvUmVuZGVyQ29tYmluZVRleHQo
Km9iamVjdCkuaXNDb21iaW5lZCgpKQorICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZz
ZXQgPSAoIW9iamVjdC5wcmV2aW91c1NpYmxpbmcoKSAmJiBtX2Jsb2NrLmlzU2VsZkNvbGxhcHNp
bmdCbG9jaygpICYmIG1fYmxvY2suc3R5bGUoKS0+Y2xlYXIoKSAmJiBtX2Jsb2NrLmdldENsZWFy
RGVsdGEobV9ibG9jaywgTGF5b3V0VW5pdCgpKSkgPyBtX2Jsb2NrLmNvbGxhcHNlZE1hcmdpbkJl
Zm9yZUZvckNoaWxkKG1fYmxvY2spIDogTGF5b3V0VW5pdCgpOworICAgICAgICAgICAgTGF5b3V0
VW5pdCBvbGRMb2dpY2FsSGVpZ2h0ID0gbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAg
ICAgICBtX2Jsb2NrLnNldExvZ2ljYWxIZWlnaHQob2xkTG9naWNhbEhlaWdodCArIG1hcmdpbk9m
ZnNldCk7CisgICAgICAgICAgICBtX2Jsb2NrLnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobV9ibG9j
ay5pbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKKyAgICAgICAgICAgIG1fYmxvY2suc2V0
TG9naWNhbEhlaWdodChvbGRMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgfSBlbHNlIGlmIChvYmpl
Y3QuaXNUZXh0KCkgJiYgb2JqZWN0LnN0eWxlKCktPmhhc1RleHRDb21iaW5lKCkgJiYgb2JqZWN0
LmlzQ29tYmluZVRleHQoKSAmJiAhdG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmlzQ29tYmlu
ZWQoKSkgeworICAgICAgICAgICAgdG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmNvbWJpbmVU
ZXh0KCk7CisgICAgICAgICAgICBpZiAodG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmlzQ29t
YmluZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXNvbHZlci5pbmNyZW1lbnQoKTsKQEAgLTIzNDYsNyArMjM0NCw3IEBAIHZvaWQgTGluZUJyZWFr
ZXI6OnNraXBMZWFkaW5nV2hpdGVzcGFjZSgKIAogLy8gVGhpcyBpcyBjdXJyZW50bHkganVzdCB1
c2VkIGZvciBsaXN0IG1hcmtlcnMgYW5kIGlubGluZSBmbG93cyB0aGF0IGhhdmUgbGluZSBib3hl
cy4gTmVpdGhlciBzaG91bGQKIC8vIGhhdmUgYW4gZWZmZWN0IG9uIHdoaXRlc3BhY2UgYXQgdGhl
IHN0YXJ0IG9mIHRoZSBsaW5lLgotc3RhdGljIGJvb2wgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRl
clN0YXJ0T2JqZWN0KFJlbmRlckJsb2NrRmxvdyogYmxvY2ssIFJlbmRlck9iamVjdCogbywgTGlu
ZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlKQorc3RhdGljIGJvb2wgc2hvdWxkU2tp
cFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIFJlbmRl
ck9iamVjdCogbywgTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlKQogewogICAg
IFJlbmRlck9iamVjdCogbmV4dCA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoYmxvY2ss
IG8pOwogICAgIHdoaWxlIChuZXh0ICYmIG5leHQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKQEAgLTI1NDYsNyArMjU0NCw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2Vy
OjpuZXh0TGluZUJyZWEKICNpZiAhRU5BQkxFKENTU19TSEFQRVMpCiAgICAgcmV0dXJuIG5leHRT
ZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJl
bWVudHMpOwogI2Vsc2UKLSAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IG1f
YmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hh
cGVJbnNpZGVJbmZvID0gbV9ibG9jay5sYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKIAogICAgIGlm
ICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmxpbmVPdmVybGFwc1NoYXBl
Qm91bmRzKCkpCiAgICAgICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5l
SW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0
aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKQEAgLTI2NTUsMjMgKzI2NTMs
MjMgQEAgc3RhdGljIGJvb2wgY2FuQnJlYWtBdFRoaXNQb3NpdGlvbihib29sIAogfQogCiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi1zdGF0aWMgdm9pZCB1cGRhdGVTZWdtZW50c0ZvclNoYXBlcyhS
ZW5kZXJCbG9ja0Zsb3cqIGJsb2NrLCBjb25zdCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSwgY29uc3QgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywg
TGluZVdpZHRoJiB3aWR0aCwgYm9vbCBpc0ZpcnN0TGluZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNl
Z21lbnRzRm9yU2hhcGVzKFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zdCBXb3JkTWVhc3VyZW1lbnRzJiB3
b3JkTWVhc3VyZW1lbnRzLCBMaW5lV2lkdGgmIHdpZHRoLCBib29sIGlzRmlyc3RMaW5lKQogewog
ICAgIEFTU0VSVChsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKIAotICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwor
ICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gYmxvY2subGF5b3V0U2hhcGVJ
bnNpZGVJbmZvKCk7CiAgICAgaWYgKCFsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLT5pc1BsYWNl
ZCgpIHx8ICFzaGFwZUluc2lkZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgPSBibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsK
LSAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVDb250YWluZXIgPSBibG9jay0+
bG9naWNhbE9mZnNldEZyb21TaGFwZUFuY2VzdG9yQ29udGFpbmVyKHNoYXBlSW5zaWRlSW5mby0+
b3duZXIoKSkuaGVpZ2h0KCk7CisgICAgYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSA9IGJs
b2NrLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zm
c2V0RnJvbVNoYXBlQ29udGFpbmVyID0gYmxvY2subG9naWNhbE9mZnNldEZyb21TaGFwZUFuY2Vz
dG9yQ29udGFpbmVyKHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSkuaGVpZ2h0KCk7CiAKLSAgICBM
YXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wID0gYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSArIGxvZ2lj
YWxPZmZzZXRGcm9tU2hhcGVDb250YWluZXI7Ci0gICAgTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhl
aWdodCA9IGJsb2NrLT5saW5lSGVpZ2h0KGlzRmlyc3RMaW5lLCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JM
aW5lQm94ZXMpOworICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3AgPSBibG9jay5sb2dpY2Fs
SGVpZ2h0KCkgKyBsb2dpY2FsT2Zmc2V0RnJvbVNoYXBlQ29udGFpbmVyOworICAgIExheW91dFVu
aXQgbGluZUxvZ2ljYWxIZWlnaHQgPSBibG9jay5saW5lSGVpZ2h0KGlzRmlyc3RMaW5lLCBpc0hv
cml6b250YWxXcml0aW5nTW9kZSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3Np
dGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwogICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxCb3R0
b20gPSBsaW5lTG9naWNhbFRvcCArIGxpbmVMb2dpY2FsSGVpZ2h0OwogCi0gICAgTGF5b3V0VW5p
dCBmbG9hdExvZ2ljYWxUb3AgPSBibG9jay0+bG9naWNhbFRvcEZvckZsb2F0KGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUpOwotICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsQm90dG9tID0gYmxv
Y2stPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKyAg
ICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFRvcCA9IGJsb2NrLmxvZ2ljYWxUb3BGb3JGbG9hdChs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbEJv
dHRvbSA9IGJsb2NrLmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lKTsKIAogICAgIGJvb2wgbGluZU92ZXJsYXBzV2l0aEZsb2F0ID0gKGZsb2F0TG9naWNhbFRv
cCA8IGxpbmVMb2dpY2FsQm90dG9tKSAmJiAobGluZUxvZ2ljYWxUb3AgPCBmbG9hdExvZ2ljYWxC
b3R0b20pOwogICAgIGlmICghbGluZU92ZXJsYXBzV2l0aEZsb2F0KQpAQCAtMjY3OSwxNyArMjY3
NywxNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVTZWdtZW50c0ZvclNoYXBlcyhSZW5kCiAKICAgICBm
bG9hdCBtaW5TZWdtZW50V2lkdGggPSBmaXJzdFBvc2l0aXZlV2lkdGgod29yZE1lYXN1cmVtZW50
cyk7CiAKLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoID0gYmxvY2stPmxvZ2ljYWxX
aWR0aEZvckZsb2F0KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwotICAgIExheW91dFVuaXQg
YXZhaWxhYmxlTG9naWNhbFdpZHRoID0gYmxvY2stPmxvZ2ljYWxXaWR0aCgpIC0gYmxvY2stPmxv
Z2ljYWxSaWdodEZvckZsb2F0KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOworICAgIExheW91
dFVuaXQgZmxvYXRMb2dpY2FsV2lkdGggPSBibG9jay5sb2dpY2FsV2lkdGhGb3JGbG9hdChsYXN0
RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCA9IGJsb2NrLmxvZ2ljYWxXaWR0aCgpIC0gYmxvY2subG9naWNhbFJpZ2h0Rm9yRmxvYXQo
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgaWYgKGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCA8IG1pblNlZ21lbnRXaWR0aCkKLSAgICAgICAgYmxvY2stPnNldExvZ2ljYWxIZWlnaHQoZmxv
YXRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAgYmxvY2suc2V0TG9naWNhbEhlaWdodChmbG9hdExv
Z2ljYWxCb3R0b20pOwogCi0gICAgaWYgKGJsb2NrLT5sb2dpY2FsSGVpZ2h0KCkgPCBmbG9hdExv
Z2ljYWxUb3ApIHsKKyAgICBpZiAoYmxvY2subG9naWNhbEhlaWdodCgpIDwgZmxvYXRMb2dpY2Fs
VG9wKSB7CiAgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+YWRqdXN0TG9naWNhbExpbmVUb3AobWlu
U2VnbWVudFdpZHRoICsgZmxvYXRMb2dpY2FsV2lkdGgpOwotICAgICAgICBibG9jay0+c2V0TG9n
aWNhbEhlaWdodChzaGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5lVG9wKCkgLSBsb2dpY2FsT2Zm
c2V0RnJvbVNoYXBlQ29udGFpbmVyKTsKKyAgICAgICAgYmxvY2suc2V0TG9naWNhbEhlaWdodChz
aGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5lVG9wKCkgLSBsb2dpY2FsT2Zmc2V0RnJvbVNoYXBl
Q29udGFpbmVyKTsKICAgICB9CiAKLSAgICBsaW5lTG9naWNhbFRvcCA9IGJsb2NrLT5sb2dpY2Fs
SGVpZ2h0KCkgKyBsb2dpY2FsT2Zmc2V0RnJvbVNoYXBlQ29udGFpbmVyOworICAgIGxpbmVMb2dp
Y2FsVG9wID0gYmxvY2subG9naWNhbEhlaWdodCgpICsgbG9naWNhbE9mZnNldEZyb21TaGFwZUNv
bnRhaW5lcjsKIAogICAgIHNoYXBlSW5zaWRlSW5mby0+dXBkYXRlU2VnbWVudHNGb3JMaW5lKGxp
bmVMb2dpY2FsVG9wLCBsaW5lTG9naWNhbEhlaWdodCk7CiAgICAgd2lkdGgudXBkYXRlQ3VycmVu
dFNoYXBlU2VnbWVudCgpOwpAQCAtMjcwMSwxMyArMjY5OSwxMyBAQCBJbmxpbmVJdGVyYXRvciBM
aW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiB7CiAgICAgcmVzZXQoKTsKIAotICAgIEFTU0VSVChy
ZXNvbHZlci5wb3NpdGlvbigpLnJvb3QoKSA9PSBtX2Jsb2NrKTsKKyAgICBBU1NFUlQocmVzb2x2
ZXIucG9zaXRpb24oKS5yb290KCkgPT0gJm1fYmxvY2spOwogCiAgICAgYm9vbCBhcHBsaWVkU3Rh
cnRXaWR0aCA9IHJlc29sdmVyLnBvc2l0aW9uKCkubV9wb3MgPiAwOwogICAgIGJvb2wgaW5jbHVk
ZUVuZFdpZHRoID0gdHJ1ZTsKICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3Rh
dGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CiAKLSAgICBMaW5lV2lkdGggd2lkdGgoKm1f
YmxvY2ssIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksIHJlcXVpcmVzSW5kZW50KGxpbmVJbmZvLmlz
Rmlyc3RMaW5lKCksIGxpbmVJbmZvLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpLCAqbV9ibG9j
ay0+c3R5bGUoKSkpOworICAgIExpbmVXaWR0aCB3aWR0aChtX2Jsb2NrLCBsaW5lSW5mby5pc0Zp
cnN0TGluZSgpLCByZXF1aXJlc0luZGVudChsaW5lSW5mby5pc0ZpcnN0TGluZSgpLCBsaW5lSW5m
by5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSwgKm1fYmxvY2suc3R5bGUoKSkpOwogCiAgICAg
c2tpcExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBsaW5lSW5mbywgbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSwgd2lkdGgpOwogCkBAIC0yNzQzLDggKzI3NDEsOCBAQCBJbmxpbmVJdGVyYXRv
ciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgLy8gRmlyZWZveCBhbmQgT3BlcmEgd2ls
bCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVu
ZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0byBtYXRj
aCBjb21tb24gV2luSUUgcmVuZGVyaW5ncykuCiAgICAgLy8gTm90IHN1cHBvcnRpbmcgdGhlIHF1
aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChTZWUgQnVn
emlsbGEgMTA1MTcuKQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0eWxlID0gKm1fYmxv
Y2stPnN0eWxlKCk7Ci0gICAgYm9vbCBhbGxvd0ltYWdlc1RvQnJlYWsgPSAhbV9ibG9jay0+ZG9j
dW1lbnQoKS5pblF1aXJrc01vZGUoKSB8fCAhbV9ibG9jay0+aXNUYWJsZUNlbGwoKSB8fCAhYmxv
Y2tTdHlsZS5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpOworICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBibG9ja1N0eWxlID0gKm1fYmxvY2suc3R5bGUoKTsKKyAgICBib29sIGFsbG93
SW1hZ2VzVG9CcmVhayA9ICFtX2Jsb2NrLmRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkgfHwgIW1f
YmxvY2suaXNUYWJsZUNlbGwoKSB8fCAhYmxvY2tTdHlsZS5sb2dpY2FsV2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpOwogCiAgICAgRVdoaXRlU3BhY2UgY3VycldTID0gYmxvY2tTdHlsZS53aGl0
ZVNwYWNlKCk7CiAgICAgRVdoaXRlU3BhY2UgbGFzdFdTID0gY3VycldTOwpAQCAtMjc4MSw3ICsy
Nzc5LDcgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogICAgICAg
ICAgICAgICAgIC8vIGNsZWFubHkuICBPdGhlcndpc2UgdGhlIDxicj4gaGFzIG5vIGVmZmVjdCBv
biB3aGV0aGVyIHRoZSBsaW5lIGlzCiAgICAgICAgICAgICAgICAgLy8gZW1wdHkgb3Igbm90Lgog
ICAgICAgICAgICAgICAgIGlmIChzdGFydGluZ05ld1BhcmFncmFwaCkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZUluZm8uc2V0RW1wdHkoZmFsc2UsIG1fYmxvY2ssICZ3aWR0aCk7CisgICAgICAg
ICAgICAgICAgICAgIGxpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywgJndpZHRoKTsK
ICAgICAgICAgICAgICAgICB0cmFpbGluZ09iamVjdHMuY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBsaW5lSW5mby5zZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkodHJ1ZSk7CiAKQEAgLTI4MDgs
MTEgKzI4MDYsMTEgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50Qgog
ICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChjdXJyZW50Lm1fb2JqKTsK
ICAgICAgICAgICAgIGJvb2wgaXNJbmxpbmVUeXBlID0gYm94LT5zdHlsZSgpLT5pc09yaWdpbmFs
RGlzcGxheUlubGluZVR5cGUoKTsKICAgICAgICAgICAgIGlmICghaXNJbmxpbmVUeXBlKQotICAg
ICAgICAgICAgICAgIG1fYmxvY2stPnNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoYm94
LCBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCksIG1fYmxvY2stPnN0YXJ0T2Zmc2V0Rm9yQ29udGVu
dChtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLnNl
dFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoKmJveCwgbV9ibG9jay5sb2dpY2FsSGVpZ2h0
KCksIG1fYmxvY2suc3RhcnRPZmZzZXRGb3JDb250ZW50KG1fYmxvY2subG9naWNhbEhlaWdodCgp
KSk7CiAgICAgICAgICAgICBlbHNlICB7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIG9yaWdp
bmFsIGRpc3BsYXkgd2FzIGFuIElOTElORSB0eXBlLCB0aGVuIHdlIGNhbiBnbyBhaGVhZAogICAg
ICAgICAgICAgICAgIC8vIGFuZCBkZXRlcm1pbmUgb3VyIHN0YXRpYyB5IHBvc2l0aW9uIG5vdy4K
LSAgICAgICAgICAgICAgICBib3gtPmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24obV9i
bG9jay0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBib3gtPmxheWVyKCktPnNl
dFN0YXRpY0Jsb2NrUG9zaXRpb24obV9ibG9jay5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpZ25vcmluZyBzcGFjZXMsIHdlIGhhdmUg
dG8gc3RvcCBhbmQgaW5jbHVkZSB0aGlzIG9iamVjdCBhbmQKQEAgLTI4MjcsMTQgKzI4MjUsMTQg
QEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogICAgICAgICAgICAg
Ly8gUmVzZXQgcHJpb3IgbGluZSBicmVhayBjb250ZXh0IGNoYXJhY3RlcnMuCiAgICAgICAgICAg
ICByZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0UHJpb3JDb250ZXh0KCk7
CiAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5tX29iai0+aXNGbG9hdGluZygpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJCb3gqIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3goY3VycmVudC5tX29iaik7
Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IG1fYmxvY2stPmluc2VydEZsb2F0aW5n
T2JqZWN0KGZsb2F0Qm94KTsKKyAgICAgICAgICAgIFJlbmRlckJveCYgZmxvYXRCb3ggPSB0b1Jl
bmRlckJveCgqY3VycmVudC5tX29iaik7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9
IG1fYmxvY2suaW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOwogICAgICAgICAgICAgLy8g
Y2hlY2sgaWYgaXQgZml0cyBpbiB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAgICAgLy8gSWYg
aXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAgICAg
ICAvLyBpdCBhZnRlciBtb3ZpbmcgdG8gbmV4dCBsaW5lIChpbiBuZXdMaW5lKCkgZnVuYykKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBCdWcgMTEwMzcyOiBQcm9wZXJseSBwb3NpdGlvbiBtdWx0aXBs
ZSBzdGFja2VkIGZsb2F0cyB3aXRoIG5vbi1yZWN0YW5ndWxhciBzaGFwZSBvdXRzaWRlLgotICAg
ICAgICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiB3aWR0aC5maXRzT25MaW5lRXhjbHVkaW5n
VHJhaWxpbmdXaGl0ZXNwYWNlKG1fYmxvY2stPmxvZ2ljYWxXaWR0aEZvckZsb2F0KGYpKSkgewot
ICAgICAgICAgICAgICAgIG1fYmxvY2stPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoZiwgbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKKyAgICAgICAgICAgIGlmIChm
bG9hdHNGaXRPbkxpbmUgJiYgd2lkdGguZml0c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5nV2hpdGVz
cGFjZShtX2Jsb2NrLmxvZ2ljYWxXaWR0aEZvckZsb2F0KGYpKSkgeworICAgICAgICAgICAgICAg
IG1fYmxvY2sucG9zaXRpb25OZXdGbG9hdE9uTGluZShmLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lLCBsaW5lSW5mbywgd2lkdGgpOwogICAgICAgICAgICAgICAgIGlmIChsQnJlYWsubV9vYmog
PT0gY3VycmVudC5tX29iaikgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWxCcmVhay5t
X3Bvcyk7CiAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5pbmNyZW1lbnQoKTsKQEAgLTI4NTYs
NyArMjg1NCw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIKICAg
ICAgICAgICAgICAgICAvLyBBbiBlbXB0eSBpbmxpbmUgdGhhdCBvbmx5IGhhcyBsaW5lLWhlaWdo
dCwgdmVydGljYWwtYWxpZ24gb3IgZm9udC1tZXRyaWNzIHdpbGwgb25seSBnZXQgYQogICAgICAg
ICAgICAgICAgIC8vIGxpbmUgYm94IHRvIGFmZmVjdCB0aGUgaGVpZ2h0IG9mIHRoZSBsaW5lIGlm
IHRoZSByZXN0IG9mIHRoZSBsaW5lIGlzIG5vdCBlbXB0eS4KICAgICAgICAgICAgICAgICBpZiAo
cmVxdWlyZXNMaW5lQm94KQotICAgICAgICAgICAgICAgICAgICBsaW5lSW5mby5zZXRFbXB0eShm
YWxzZSwgbV9ibG9jaywgJndpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0
RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmd2lkdGgpOwogICAgICAgICAgICAgICAgIGlmIChpZ25v
cmluZ1NwYWNlcykgewogICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ09iamVjdHMuY2xlYXIo
KTsKICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMo
bGluZU1pZHBvaW50U3RhdGUsIGN1cnJlbnQubV9vYmopOwpAQCAtMjg3NCwxMCArMjg3MiwxMCBA
QCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAKICAgICAgICAgICAg
IHdpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5lTG9naWNhbFdpZHRoKGN1cnJlbnQubV9v
YmopICsgYm9yZGVyUGFkZGluZ01hcmdpblN0YXJ0KGZsb3dCb3gpICsgYm9yZGVyUGFkZGluZ01h
cmdpbkVuZChmbG93Qm94KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5tX29iai0+aXNS
ZXBsYWNlZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIHJlcGxhY2VkQm94ID0gdG9SZW5k
ZXJCb3goY3VycmVudC5tX29iaik7CisgICAgICAgICAgICBSZW5kZXJCb3gmIHJlcGxhY2VkQm94
ID0gdG9SZW5kZXJCb3goKmN1cnJlbnQubV9vYmopOwogCiAgICAgICAgICAgICBpZiAoYXRTdGFy
dCkKLSAgICAgICAgICAgICAgICB3aWR0aC51cGRhdGVBdmFpbGFibGVXaWR0aChyZXBsYWNlZEJv
eC0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICB3aWR0aC51cGRhdGVBdmFpbGFi
bGVXaWR0aChyZXBsYWNlZEJveC5sb2dpY2FsSGVpZ2h0KCkpOwogCiAgICAgICAgICAgICAvLyBC
cmVhayBvbiByZXBsYWNlZCBlbGVtZW50cyBpZiBlaXRoZXIgaGFzIG5vcm1hbCB3aGl0ZS1zcGFj
ZS4KICAgICAgICAgICAgIGlmICgoYXV0b1dyYXAgfHwgUmVuZGVyU3R5bGU6OmF1dG9XcmFwKGxh
c3RXUykpICYmICghY3VycmVudC5tX29iai0+aXNJbWFnZSgpIHx8IGFsbG93SW1hZ2VzVG9CcmVh
aykpCkBAIC0yODg2LDcgKzI4ODQsNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4
dFNlZ21lbnRCCiAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpCiAgICAgICAgICAgICAg
ICAgc3RvcElnbm9yaW5nU3BhY2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigw
LCBjdXJyZW50Lm1fb2JqLCAwKSk7CiAKLSAgICAgICAgICAgIGxpbmVJbmZvLnNldEVtcHR5KGZh
bHNlLCBtX2Jsb2NrLCAmd2lkdGgpOworICAgICAgICAgICAgbGluZUluZm8uc2V0RW1wdHkoZmFs
c2UsICZtX2Jsb2NrLCAmd2lkdGgpOwogICAgICAgICAgICAgaWdub3JpbmdTcGFjZXMgPSBmYWxz
ZTsKICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gZmFsc2U7CiAgICAgICAg
ICAgICBjdXJyZW50Q2hhcmFjdGVySXNXUyA9IGZhbHNlOwpAQCAtMjg5NCw3ICsyODkyLDcgQEAg
SW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogCiAgICAgICAgICAgICAv
LyBPcHRpbWl6ZSBmb3IgYSBjb21tb24gY2FzZS4gSWYgd2UgY2FuJ3QgZmluZCB3aGl0ZXNwYWNl
IGFmdGVyIHRoZSBsaXN0CiAgICAgICAgICAgICAvLyBpdGVtLCB0aGVuIHRoaXMgaXMgYWxsIG1v
b3QuCi0gICAgICAgICAgICBMYXlvdXRVbml0IHJlcGxhY2VkTG9naWNhbFdpZHRoID0gbV9ibG9j
ay0+bG9naWNhbFdpZHRoRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgbV9ibG9jay0+bWFyZ2luU3Rh
cnRGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLT5tYXJnaW5FbmRGb3JDaGlsZChyZXBs
YWNlZEJveCkgKyBpbmxpbmVMb2dpY2FsV2lkdGgoY3VycmVudC5tX29iaik7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IHJlcGxhY2VkTG9naWNhbFdpZHRoID0gbV9ibG9jay5sb2dpY2FsV2lkdGhG
b3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLm1hcmdpblN0YXJ0Rm9yQ2hpbGQocmVwbGFj
ZWRCb3gpICsgbV9ibG9jay5tYXJnaW5FbmRGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBpbmxpbmVM
b2dpY2FsV2lkdGgoY3VycmVudC5tX29iaik7CiAgICAgICAgICAgICBpZiAoY3VycmVudC5tX29i
ai0+aXNMaXN0TWFya2VyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tTdHlsZS5jb2xs
YXBzZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3Qo
bV9ibG9jaywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIExpa2Ugd2l0aCBpbmxpbmUgZmxvd3MsIHdlIHN0YXJ0IGlnbm9yaW5nIHNw
YWNlcyB0byBtYWtlIHN1cmUgdGhhdCBhbnkKQEAgLTI5NjQsNyArMjk2Miw3IEBAIElubGluZUl0
ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIKICNlbmRpZgogCiAgICAgICAgICAgICBp
ZiAocmVuZGVyVGV4dEluZm8ubV90ZXh0ICE9IHQpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVD
b3VudGVySWZOZWVkZWQodCk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ291bnRlcklmTmVlZGVk
KCp0KTsKICAgICAgICAgICAgICAgICByZW5kZXJUZXh0SW5mby5tX3RleHQgPSB0OwogICAgICAg
ICAgICAgICAgIHJlbmRlclRleHRJbmZvLm1fZm9udCA9ICZmOwogICAgICAgICAgICAgICAgIHJl
bmRlclRleHRJbmZvLm1fbGF5b3V0ID0gZi5jcmVhdGVMYXlvdXQodCwgd2lkdGguY3VycmVudFdp
ZHRoKCksIGNvbGxhcHNlV2hpdGVTcGFjZSk7CkBAIC0yOTkwLDcgKzI5ODgsNyBAQCBJbmxpbmVJ
dGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAgICAgY3VycmVu
dENoYXJhY3RlcklzU3BhY2UgPSBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgKCFwcmVzZXJ2ZU5l
d2xpbmUgJiYgKGMgPT0gJ1xuJykpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzZVdo
aXRlU3BhY2UgfHwgIWN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlKQotICAgICAgICAgICAgICAgICAg
ICBsaW5lSW5mby5zZXRFbXB0eShmYWxzZSwgbV9ibG9jaywgJndpZHRoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGluZUluZm8uc2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmd2lkdGgpOwogCiAg
ICAgICAgICAgICAgICAgaWYgKGMgPT0gc29mdEh5cGhlbiAmJiBhdXRvV3JhcCAmJiAhaHlwaGVu
V2lkdGggJiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhlbnNOb25lKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGh5cGhlbldpZHRoID0gbWVhc3VyZUh5cGhlbldpZHRoKHQsIGYsICZmYWxsYmFja0Zv
bnRzKTsKQEAgLTMyOTMsNyArMzI5MSw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpu
ZXh0U2VnbWVudEIKIAogIGVuZDoKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBTaGFwZUlu
c2lkZUluZm8qIHNoYXBlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwor
ICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0gbV9ibG9jay5sYXlvdXRTaGFwZUluc2lk
ZUluZm8oKTsKICAgICBib29sIHNlZ21lbnRBbGxvd3NPdmVyZmxvdyA9ICFzaGFwZUluZm8gfHwg
IXNoYXBlSW5mby0+aGFzU2VnbWVudHMoKTsKICNlbHNlCiAgICAgYm9vbCBzZWdtZW50QWxsb3dz
T3ZlcmZsb3cgPSB0cnVlOwpAQCAtMzQ2MywxMSArMzQ2MSwxMSBAQCBib29sIFJlbmRlckJsb2Nr
Rmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYg
KGxvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgPT0gbG9naWNhbEhlaWdodCgpICsg
bGluZUluZm8uZmxvYXRQYWdpbmF0aW9uU3RydXQoKSkgewogICAgICAgICAgICAgZmxvYXRpbmdP
YmplY3QtPnNldFBhZ2luYXRpb25TdHJ1dChwYWdpbmF0aW9uU3RydXQgKyBmbG9hdGluZ09iamVj
dC0+cGFnaW5hdGlvblN0cnV0KCkpOwotICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdEJveCA9
ICZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCYgZmxv
YXRCb3ggPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIHNldExvZ2lj
YWxUb3BGb3JDaGlsZChmbG9hdEJveCwgbG9naWNhbFRvcEZvckNoaWxkKGZsb2F0Qm94KSArIG1h
cmdpbkJlZm9yZUZvckNoaWxkKGZsb2F0Qm94KSArIHBhZ2luYXRpb25TdHJ1dCk7Ci0gICAgICAg
ICAgICBpZiAoZmxvYXRCb3gtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICB0b1Jl
bmRlckJsb2NrKGZsb2F0Qm94KS0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwot
ICAgICAgICAgICAgZmxvYXRCb3gtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBpZiAo
ZmxvYXRCb3guaXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2so
ZmxvYXRCb3gpLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAg
IGZsb2F0Qm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICAvLyBTYXZlIHRoZSBvbGQg
bG9naWNhbCB0b3AgYmVmb3JlIGNhbGxpbmcgcmVtb3ZlUGxhY2VkT2JqZWN0IHdoaWNoIHdpbGwg
c2V0CiAgICAgICAgICAgICAvLyBpc1BsYWNlZCB0byBmYWxzZS4gT3RoZXJ3aXNlIGl0IHdpbGwg
dHJpZ2dlciBhbiBhc3NlcnQgaW4gbG9naWNhbFRvcEZvckZsb2F0LgogICAgICAgICAgICAgTGF5
b3V0VW5pdCBvbGRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAx
NTc3ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgUmVuZGVyQm94Ojp3aWxsQmVEZXN0cm95
ZWQoKQogICAgIGNsZWFyT3ZlcnJpZGVTaXplKCk7CiAgICAgY2xlYXJDb250YWluaW5nQmxvY2tP
dmVycmlkZVNpemUoKTsKIAotICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudElmTmVlZGVkKHRoaXMpOworICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudElmTmVlZGVkKCp0aGlzKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQog
ICAgIFNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CkBAIC0yMzksNyArMjM5LDcg
QEAgUmVuZGVyQmxvY2tGbG93KiBSZW5kZXJCb3g6Om91dGVybW9zdEJsbwogICAgIGZvciAoYXV0
byBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygpOyBjdXJyID0g
Y3Vyci0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKGN1cnItPmlzUmVuZGVyQmxvY2tGbG93KCkp
IHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdyogY3VyckJsb2NrID0gdG9SZW5kZXJCbG9j
a0Zsb3coY3Vycik7Ci0gICAgICAgICAgICBpZiAoIXBhcmVudEJsb2NrIHx8IGN1cnJCbG9jay0+
Y29udGFpbnNGbG9hdCh0aGlzKSkKKyAgICAgICAgICAgIGlmICghcGFyZW50QmxvY2sgfHwgY3Vy
ckJsb2NrLT5jb250YWluc0Zsb2F0KCp0aGlzKSkKICAgICAgICAgICAgICAgICBwYXJlbnRCbG9j
ayA9IGN1cnJCbG9jazsKICAgICAgICAgfQogICAgIH0KQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lk
IFJlbmRlckJveDo6cmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uCiAgICAgfQogCiAgICAgaWYgKGlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRp
b25lZE9iamVjdCh0aGlzKTsKKyAgICAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRP
YmplY3QoKnRoaXMpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCkBAIC0zMDgsNyAr
MzA4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogCiAgICAg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAobmVlZHNMYXlvdXQoKSAm
JiBvbGRTdHlsZSkgewotICAgICAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERl
c2NlbmRhbnRJZk5lZWRlZCh0aGlzKTsKKyAgICAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNl
bnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQoKnRoaXMpOwogCiAgICAgICAgIC8vIE5vcm1hbGx5
IHdlIGNhbiBkbyBvcHRpbWl6ZWQgcG9zaXRpb25pbmcgbGF5b3V0IGZvciBhYnNvbHV0ZS9maXhl
ZCBwb3NpdGlvbmVkIG9iamVjdHMuIFRoZXJlIGlzIG9uZSBzcGVjaWFsIGNhc2UsIGhvd2V2ZXIs
IHdoaWNoIGlzCiAgICAgICAgIC8vIHdoZW4gdGhlIHBvc2l0aW9uZWQgb2JqZWN0J3MgbWFyZ2lu
LWJlZm9yZSBpcyBjaGFuZ2VkLiBJbiB0aGlzIGNhc2UgdGhlIHBhcmVudCBoYXMgdG8gZ2V0IGEg
bGF5b3V0IGluIG9yZGVyIHRvIHJ1biBtYXJnaW4gY29sbGFwc2luZwpAQCAtMzIwLDcgKzMyMCw3
IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKIAogICAgIGlmIChS
ZW5kZXJCbG9jazo6aGFzUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCgpICYmIGZpcnN0Q2hpbGQo
KQogICAgICAgICAmJiBvbGRIb3Jpem9udGFsV3JpdGluZ01vZGUgIT0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKLSAgICAgICAgUmVuZGVyQmxvY2s6OmNsZWFyUGVyY2VudEhlaWdodERlc2Nl
bmRhbnRzRnJvbSh0aGlzKTsKKyAgICAgICAgUmVuZGVyQmxvY2s6OmNsZWFyUGVyY2VudEhlaWdo
dERlc2NlbmRhbnRzRnJvbSgqdGhpcyk7CiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hh
bmdlcyBhbmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRq
dXN0IHRoYXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3Bh
Y2UuCkBAIC0xOTY2LDcgKzE5NjYsNyBAQCB2b2lkIFJlbmRlckJveDo6cG9zaXRpb25MaW5lQm94
KElubGluZUJvCiAgICAgICAgICAgICAvLyBvdXIgb2JqZWN0IHdhcyBpbmxpbmUgb3JpZ2luYWxs
eSwgc2luY2Ugb3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUgZW5kZWQgdXAgdW5kZXJuZWF0aAogICAg
ICAgICAgICAgLy8gdGhlIGlubGluZXMuCiAgICAgICAgICAgICBSb290SW5saW5lQm94JiByb290
Qm94ID0gYm94LT5yb290KCk7Ci0gICAgICAgICAgICByb290Qm94LmJsb2NrRmxvdygpLnNldFN0
YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQodGhpcywgcm9vdEJveC5saW5lVG9wV2l0aExlYWRp
bmcoKSwgcm91bmRlZExheW91dFVuaXQoYm94LT5sb2dpY2FsTGVmdCgpKSk7CisgICAgICAgICAg
ICByb290Qm94LmJsb2NrRmxvdygpLnNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoKnRo
aXMsIHJvb3RCb3gubGluZVRvcFdpdGhMZWFkaW5nKCksIHJvdW5kZWRMYXlvdXRVbml0KGJveC0+
bG9naWNhbExlZnQoKSkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmhhc1N0YXRpY0lubGlu
ZVBvc2l0aW9uKGJveC0+aXNIb3Jpem9udGFsKCkpKQogICAgICAgICAgICAgICAgIHNldENoaWxk
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsgLy8gSnVzdCBnbyBhaGVhZCBhbmQgbWFyayB0aGUg
cG9zaXRpb25lZCBvYmplY3QgYXMgbmVlZGluZyBsYXlvdXQsIHNvIGl0IHdpbGwgdXBkYXRlIGl0
cyBwb3NpdGlvbiBwcm9wZXJseS4KICAgICAgICAgfSBlbHNlIHsKQEAgLTIyMjgsNyArMjIyOCw3
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWcKICAgICAKICAgICBp
ZiAoIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgJiYgY29udGFpbmVyTG9naWNhbFdp
ZHRoICYmIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAhPSAoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQg
KyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9zdGFydCArIGNvbXB1dGVkVmFsdWVzLm1fbWFy
Z2lucy5tX2VuZCkKICAgICAgICAgJiYgIWlzRmxvYXRpbmcoKSAmJiAhaXNJbmxpbmUoKSAmJiAh
Y2ItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkgJiYgIWNiLT5pc1JlbmRlckdy
aWQoKSkgewotICAgICAgICBMYXlvdXRVbml0IG5ld01hcmdpbiA9IGNvbnRhaW5lckxvZ2ljYWxX
aWR0aCAtIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50IC0gY2ItPm1hcmdpblN0YXJ0Rm9yQ2hpbGQo
dGhpcyk7CisgICAgICAgIExheW91dFVuaXQgbmV3TWFyZ2luID0gY29udGFpbmVyTG9naWNhbFdp
ZHRoIC0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBjYi0+bWFyZ2luU3RhcnRGb3JDaGlsZCgq
dGhpcyk7CiAgICAgICAgIGJvb2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSBjYi0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKTsKICAgICAgICAgaWYgKGhhc0ludmVydGVkRGlyZWN0aW9uKQogICAgICAgICAgICAgY29t
cHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fc3RhcnQgPSBuZXdNYXJnaW47CkBAIC0yNDYxLDcgKzI0
NjEsNyBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRlckJvCiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IDA7CiAgICAgCiAgICAgaWYgKCFpc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSAmJiBhdm9pZHNGbG9hdHMoKSAmJiBjYi0+Y29udGFpbnNGbG9hdHMoKSkg
ewotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb25EZWx0YSA9IGNiLT5jb21wdXRlU3Rh
cnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyh0aGlzLCBtYXJnaW5TdGFydElu
UmVnaW9uLCByZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb25EZWx0YSA9
IGNiLT5jb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cygqdGhp
cywgbWFyZ2luU3RhcnRJblJlZ2lvbiwgcmVnaW9uKTsKICAgICAgICAgaWYgKGNiLT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICBsb2dpY2FsTGVmdERlbHRh
ICs9IHN0YXJ0UG9zaXRpb25EZWx0YTsKICAgICAgICAgZWxzZQpAQCAtMjY3Niw3ICsyNjc2LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTAogICAgICAgICBza2lw
cGVkQXV0b0hlaWdodENvbnRhaW5pbmdCbG9jayA9IHRydWU7CiAgICAgICAgIGNvbnRhaW5pbmdC
bG9ja0NoaWxkID0gY2I7CiAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwotICAg
ICAgICBjYi0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxSZW5kZXJCb3gq
Pih0aGlzKSk7CisgICAgICAgIGNiLT5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9j
YXN0PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgfQogCiAgICAgUmVuZGVyU3R5bGUqIGNic3R5
bGUgPSBjYi0+c3R5bGUoKTsKQEAgLTI4MzMsNyArMjgzMyw3IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94Ojpjb21wdXRlUmVwbGFjZWRMb2cKICAgICAgICAgICAgIGF1dG8gY2IgPSBpc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAg
ICAgICB3aGlsZSAoY2ItPmlzQW5vbnltb3VzKCkgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewog
ICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAg
ICAgIHRvUmVuZGVyQmxvY2soY2IpLT5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9j
YXN0PFJlbmRlckJveCo+KHRoaXMpKTsKKyAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNi
KS0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxSZW5kZXJCb3gmPigqdGhp
cykpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWxjdWxh
dGlvbiBpcyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQuCkBAIC0yODY4LDcgKzI4Njgs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9nCiAgICAgICAgICAg
ICAgICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXgoYXZhaWxhYmxlSGVpZ2h0LCBpbnRy
aW5zaWNMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlRm9yTGVuZ3RoKGxvZ2ljYWxIZWlnaHQsIGF2YWlsYWJsZUhlaWdodCAtIGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2IpLT5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChj
b25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5k
ZXJCbG9jayhjYiktPmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVy
Qm94Jj4oKnRoaXMpKTsKICAgICAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Js
b2NrKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjk1Miw4ICsyOTUy
LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBbmRTZXRCbG9ja0RpcmVjdAogICAgIExheW91
dFVuaXQgbWFyZ2luQmVmb3JlOwogICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXI7CiAgICAgY29t
cHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhjb250YWluaW5nQmxvY2ssIG1hcmdpbkJlZm9yZSwg
bWFyZ2luQWZ0ZXIpOwotICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luQmVmb3JlRm9yQ2hp
bGQodGhpcywgbWFyZ2luQmVmb3JlKTsKLSAgICBjb250YWluaW5nQmxvY2stPnNldE1hcmdpbkFm
dGVyRm9yQ2hpbGQodGhpcywgbWFyZ2luQWZ0ZXIpOworICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0
TWFyZ2luQmVmb3JlRm9yQ2hpbGQoKnRoaXMsIG1hcmdpbkJlZm9yZSk7CisgICAgY29udGFpbmlu
Z0Jsb2NrLT5zZXRNYXJnaW5BZnRlckZvckNoaWxkKCp0aGlzLCBtYXJnaW5BZnRlcik7CiB9CiAK
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3Np
dGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIFJlbmRl
clJlZ2lvbiogcmVnaW9uLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCShyZXZp
c2lvbiAxNTc3ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBDb3VudGVyTm9kZTsKIH07CiAKK2lubGluZSBSZW5kZXJDb3VudGVyJiB0b1JlbmRlckNv
dW50ZXIoUmVuZGVyT2JqZWN0JiBvYmplY3QpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ob2JqZWN0LmlzQ291bnRlcigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyQ291bnRlciY+KG9iamVjdCk7Cit9CisKIGlubGluZSBSZW5kZXJDb3VudGVyKiB0b1Jl
bmRlckNvdW50ZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIW9iamVjdCB8fCBvYmplY3QtPmlzQ291bnRlcigpKTsKQEAgLTY5
LDYgKzc1LDcgQEAgaW5saW5lIFJlbmRlckNvdW50ZXIqIHRvUmVuZGVyQ291bnRlcihSZQogfQog
CiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2
b2lkIHRvUmVuZGVyQ291bnRlcihjb25zdCBSZW5kZXJDb3VudGVyJik7CiB2b2lkIHRvUmVuZGVy
Q291bnRlcihjb25zdCBSZW5kZXJDb3VudGVyKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxNTc3ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgzLDcgKzQ4Myw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Ojps
YXlvdXQKICAgICAgICAgbV9zdHJldGNoaW5nQ2hpbGRyZW4gPSAoc3R5bGUoKS0+Ym94QWxpZ24o
KSA9PSBCU1RSRVRDSCk7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9y
LmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAg
aWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgIGNo
aWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgY2hpbGQtPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVk
T2JqZWN0KCpjaGlsZCk7CiAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIg
PSBjaGlsZC0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBjaGlsZExheWVyLT5zZXRTdGF0aWNJ
bmxpbmVQb3NpdGlvbih4UG9zKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgcmVnaW9ucy4KICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRMYXllci0+c3RhdGljQmxvY2tQb3NpdGlvbigpICE9IHlQ
b3MpIHsKQEAgLTczMCw3ICs3MzAsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eDo6bGF5b3V0CiAgICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKIAogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkgewotICAgICAgICAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0
UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CisgICAgICAgICAgICAgICAgY2hpbGQtPmNvbnRhaW5p
bmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KCpjaGlsZCk7CiAgICAgICAgICAgICAg
ICAgUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBjaGlsZC0+bGF5ZXIoKTsKICAgICAgICAgICAg
ICAgICBjaGlsZExheWVyLT5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihib3JkZXJTdGFydCgpICsg
cGFkZGluZ1N0YXJ0KCkpOyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciByZWdpb25zLgogICAgICAg
ICAgICAgICAgIGlmIChjaGlsZExheWVyLT5zdGF0aWNCbG9ja1Bvc2l0aW9uKCkgIT0gaGVpZ2h0
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNw
cAkocmV2aXNpb24gMTU3Nzg5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
ZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNjUgKzYzLDY4IEBAIHZvaWQgUmVuZGVy
RmllbGRzZXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2cKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVs
ZHNldDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKQog
ewotICAgIFJlbmRlckJveCogbGVnZW5kID0gZmluZExlZ2VuZCgpOwotICAgIGlmIChsZWdlbmQp
IHsKLSAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pCi0gICAgICAgICAgICBsZWdlbmQtPnNl
dE5lZWRzTGF5b3V0KCk7Ci0gICAgICAgIGxlZ2VuZC0+bGF5b3V0SWZOZWVkZWQoKTsKLQotICAg
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0OwotICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxlZ2VuZC0+c3R5bGUo
KS0+dGV4dEFsaWduKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ0VOVEVSOgotICAgICAgICAgICAg
ICAgIGxvZ2ljYWxMZWZ0ID0gKGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFdpZHRoRm9yQ2hpbGQo
bGVnZW5kKSkgLyAyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBS
SUdIVDoKLSAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxXaWR0aCgpIC0gYm9y
ZGVyRW5kKCkgLSBwYWRkaW5nRW5kKCkgLSBsb2dpY2FsV2lkdGhGb3JDaGlsZChsZWdlbmQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBsb2dpY2FsTGVmdCA9IGJvcmRlclN0YXJ0KCkgKyBwYWRkaW5nU3RhcnQoKSArIG1hcmdp
blN0YXJ0Rm9yQ2hpbGQobGVnZW5kKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAobGVnZW5kLT5zdHls
ZSgpLT50ZXh0QWxpZ24oKSkgewotICAgICAgICAgICAgY2FzZSBMRUZUOgotICAgICAgICAgICAg
ICAgIGxvZ2ljYWxMZWZ0ID0gYm9yZGVyU3RhcnQoKSArIHBhZGRpbmdTdGFydCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDRU5URVI6IHsKLSAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZXh0cmEgcGl4ZWwgZ29lcyB0byB0aGUgZW5kIHNp
ZGUgaW4gUlRMIChzaW5jZSBpdCB3ZW50IHRvIHRoZSBlbmQgc2lkZQotICAgICAgICAgICAgICAg
IC8vIGluIExUUikuCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZW50ZXJlZFdpZHRoID0g
bG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsV2lkdGhGb3JDaGlsZChsZWdlbmQpOwotICAgICAgICAg
ICAgICAgIGxvZ2ljYWxMZWZ0ID0gY2VudGVyZWRXaWR0aCAtIGNlbnRlcmVkV2lkdGggLyAyOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxXaWR0aCgpIC0gYm9yZGVy
U3RhcnQoKSAtIHBhZGRpbmdTdGFydCgpIC0gbWFyZ2luU3RhcnRGb3JDaGlsZChsZWdlbmQpIC0g
bG9naWNhbFdpZHRoRm9yQ2hpbGQobGVnZW5kKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KKyAgICBSZW5kZXJCb3gqIGJveCA9IGZpbmRMZWdlbmQoKTsKKyAgICBpZiAo
IWJveCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZW5kZXJCb3gmIGxlZ2VuZCA9
ICpib3g7CisgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pCisgICAgICAgIGxlZ2VuZC5zZXROZWVk
c0xheW91dCgpOworICAgIGxlZ2VuZC5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdDsKKyAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KSB7CisgICAgICAgIHN3aXRjaCAobGVnZW5kLnN0eWxlKCktPnRleHRBbGlnbigpKSB7CisgICAg
ICAgIGNhc2UgQ0VOVEVSOgorICAgICAgICAgICAgbG9naWNhbExlZnQgPSAobG9naWNhbFdpZHRo
KCkgLSBsb2dpY2FsV2lkdGhGb3JDaGlsZChsZWdlbmQpKSAvIDI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSSUdIVDoKKyAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ID0gbG9naWNh
bFdpZHRoKCkgLSBib3JkZXJFbmQoKSAtIHBhZGRpbmdFbmQoKSAtIGxvZ2ljYWxXaWR0aEZvckNo
aWxkKGxlZ2VuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGxvZ2ljYWxMZWZ0ID0gYm9yZGVyU3RhcnQoKSArIHBhZGRpbmdTdGFydCgpICsgbWFy
Z2luU3RhcnRGb3JDaGlsZChsZWdlbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGxlZ2VuZC5zdHlsZSgpLT50ZXh0QWxpZ24o
KSkgeworICAgICAgICBjYXNlIExFRlQ6CisgICAgICAgICAgICBsb2dpY2FsTGVmdCA9IGJvcmRl
clN0YXJ0KCkgKyBwYWRkaW5nU3RhcnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENFTlRFUjogeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGV4dHJhIHBp
eGVsIGdvZXMgdG8gdGhlIGVuZCBzaWRlIGluIFJUTCAoc2luY2UgaXQgd2VudCB0byB0aGUgZW5k
IHNpZGUKKyAgICAgICAgICAgIC8vIGluIExUUikuCisgICAgICAgICAgICBMYXlvdXRVbml0IGNl
bnRlcmVkV2lkdGggPSBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxXaWR0aEZvckNoaWxkKGxlZ2Vu
ZCk7CisgICAgICAgICAgICBsb2dpY2FsTGVmdCA9IGNlbnRlcmVkV2lkdGggLSBjZW50ZXJlZFdp
ZHRoIC8gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyU3RhcnQo
KSAtIHBhZGRpbmdTdGFydCgpIC0gbWFyZ2luU3RhcnRGb3JDaGlsZChsZWdlbmQpIC0gbG9naWNh
bFdpZHRoRm9yQ2hpbGQobGVnZW5kKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgfQogCi0gICAgICAgIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQobGVnZW5kLCBsb2dpY2FsTGVm
dCk7CisgICAgc2V0TG9naWNhbExlZnRGb3JDaGlsZChsZWdlbmQsIGxvZ2ljYWxMZWZ0KTsKIAot
ICAgICAgICBMYXlvdXRVbml0IGZpZWxkc2V0Qm9yZGVyQmVmb3JlID0gYm9yZGVyQmVmb3JlKCk7
Ci0gICAgICAgIExheW91dFVuaXQgbGVnZW5kTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRG
b3JDaGlsZChsZWdlbmQpOworICAgIExheW91dFVuaXQgZmllbGRzZXRCb3JkZXJCZWZvcmUgPSBi
b3JkZXJCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IGxlZ2VuZExvZ2ljYWxIZWlnaHQgPSBsb2dp
Y2FsSGVpZ2h0Rm9yQ2hpbGQobGVnZW5kKTsKIAotICAgICAgICBMYXlvdXRVbml0IGxlZ2VuZExv
Z2ljYWxUb3A7Ci0gICAgICAgIExheW91dFVuaXQgY29sbGFwc2VkTGVnZW5kRXh0ZW50OwotICAg
ICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgbGVnZW5kJ3MgbWFyZ2lu
IGJlZm9yZSB0b28uCi0gICAgICAgIGlmIChmaWVsZHNldEJvcmRlckJlZm9yZSA+IGxlZ2VuZExv
Z2ljYWxIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFRoZSA8bGVnZW5kPiBpcyBzbWFsbGVyIHRo
YW4gdGhlIGFzc29jaWF0ZWQgZmllbGRzZXQgYmVmb3JlIGJvcmRlcgotICAgICAgICAgICAgLy8g
c28gdGhlIGxhdHRlciBkZXRlcm1pbmVzIHBvc2l0aW9uaW5nIG9mIHRoZSA8bGVnZW5kPi4gVGhl
IHNpemluZyBkZXBlbmRzCi0gICAgICAgICAgICAvLyBvbiB0aGUgbGVnZW5kJ3MgbWFyZ2lucyBh
cyB3ZSB3YW50IHRvIHN0aWxsIGZvbGxvdyB0aGUgYXV0aG9yJ3MgY3Vlcy4KLSAgICAgICAgICAg
IC8vIEZpcmVmb3ggY29tcGxldGVseSBpZ25vcmVzIHRoZSBtYXJnaW5zIGluIHRoaXMgY2FzZSB3
aGljaCBzZWVtcyB3cm9uZy4KLSAgICAgICAgICAgIGxlZ2VuZExvZ2ljYWxUb3AgPSAoZmllbGRz
ZXRCb3JkZXJCZWZvcmUgLSBsZWdlbmRMb2dpY2FsSGVpZ2h0KSAvIDI7Ci0gICAgICAgICAgICBj
b2xsYXBzZWRMZWdlbmRFeHRlbnQgPSBtYXg8TGF5b3V0VW5pdD4oZmllbGRzZXRCb3JkZXJCZWZv
cmUsIGxlZ2VuZExvZ2ljYWxUb3AgKyBsZWdlbmRMb2dpY2FsSGVpZ2h0ICsgbWFyZ2luQWZ0ZXJG
b3JDaGlsZChsZWdlbmQpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb2xsYXBzZWRM
ZWdlbmRFeHRlbnQgPSBsZWdlbmRMb2dpY2FsSGVpZ2h0ICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChs
ZWdlbmQpOworICAgIExheW91dFVuaXQgbGVnZW5kTG9naWNhbFRvcDsKKyAgICBMYXlvdXRVbml0
IGNvbGxhcHNlZExlZ2VuZEV4dGVudDsKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBhY2NvdW50
IGZvciB0aGUgbGVnZW5kJ3MgbWFyZ2luIGJlZm9yZSB0b28uCisgICAgaWYgKGZpZWxkc2V0Qm9y
ZGVyQmVmb3JlID4gbGVnZW5kTG9naWNhbEhlaWdodCkgeworICAgICAgICAvLyBUaGUgPGxlZ2Vu
ZD4gaXMgc21hbGxlciB0aGFuIHRoZSBhc3NvY2lhdGVkIGZpZWxkc2V0IGJlZm9yZSBib3JkZXIK
KyAgICAgICAgLy8gc28gdGhlIGxhdHRlciBkZXRlcm1pbmVzIHBvc2l0aW9uaW5nIG9mIHRoZSA8
bGVnZW5kPi4gVGhlIHNpemluZyBkZXBlbmRzCisgICAgICAgIC8vIG9uIHRoZSBsZWdlbmQncyBt
YXJnaW5zIGFzIHdlIHdhbnQgdG8gc3RpbGwgZm9sbG93IHRoZSBhdXRob3IncyBjdWVzLgorICAg
ICAgICAvLyBGaXJlZm94IGNvbXBsZXRlbHkgaWdub3JlcyB0aGUgbWFyZ2lucyBpbiB0aGlzIGNh
c2Ugd2hpY2ggc2VlbXMgd3JvbmcuCisgICAgICAgIGxlZ2VuZExvZ2ljYWxUb3AgPSAoZmllbGRz
ZXRCb3JkZXJCZWZvcmUgLSBsZWdlbmRMb2dpY2FsSGVpZ2h0KSAvIDI7CisgICAgICAgIGNvbGxh
cHNlZExlZ2VuZEV4dGVudCA9IG1heDxMYXlvdXRVbml0PihmaWVsZHNldEJvcmRlckJlZm9yZSwg
bGVnZW5kTG9naWNhbFRvcCArIGxlZ2VuZExvZ2ljYWxIZWlnaHQgKyBtYXJnaW5BZnRlckZvckNo
aWxkKGxlZ2VuZCkpOworICAgIH0gZWxzZQorICAgICAgICBjb2xsYXBzZWRMZWdlbmRFeHRlbnQg
PSBsZWdlbmRMb2dpY2FsSGVpZ2h0ICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChsZWdlbmQpOwogCi0g
ICAgICAgIHNldExvZ2ljYWxUb3BGb3JDaGlsZChsZWdlbmQsIGxlZ2VuZExvZ2ljYWxUb3ApOwot
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KHBhZGRpbmdCZWZvcmUoKSArIGNvbGxhcHNlZExlZ2Vu
ZEV4dGVudCk7Ci0gICAgfQotICAgIHJldHVybiBsZWdlbmQ7CisgICAgc2V0TG9naWNhbFRvcEZv
ckNoaWxkKGxlZ2VuZCwgbGVnZW5kTG9naWNhbFRvcCk7CisgICAgc2V0TG9naWNhbEhlaWdodChw
YWRkaW5nQmVmb3JlKCkgKyBjb2xsYXBzZWRMZWdlbmRFeHRlbnQpOworCisgICAgcmV0dXJuICZs
ZWdlbmQ7CiB9CiAKIFJlbmRlckJveCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQoRmluZExl
Z2VuZE9wdGlvbiBvcHRpb24pIGNvbnN0CkBAIC0xMzMsNyArMTM2LDcgQEAgUmVuZGVyQm94KiBS
ZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZChGaQogICAgICAgICBpZiAobGVnZW5kLT5ub2RlKCkg
JiYgKGxlZ2VuZC0+bm9kZSgpLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpKQogICAgICAgICAgICAg
cmV0dXJuIHRvUmVuZGVyQm94KGxlZ2VuZCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRp
b25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMyArMTEyLDEzIEBAIHN0cnVj
dCBSZW5kZXJGbGV4aWJsZUJveDo6TGluZUNvbnRleHQgewogfTsKIAogc3RydWN0IFJlbmRlckZs
ZXhpYmxlQm94OjpWaW9sYXRpb24gewotICAgIFZpb2xhdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBM
YXlvdXRVbml0IGNoaWxkU2l6ZSkKKyAgICBWaW9sYXRpb24oUmVuZGVyQm94JiBjaGlsZCwgTGF5
b3V0VW5pdCBjaGlsZFNpemUpCiAgICAgICAgIDogY2hpbGQoY2hpbGQpCiAgICAgICAgICwgY2hp
bGRTaXplKGNoaWxkU2l6ZSkKICAgICB7CiAgICAgfQogCi0gICAgUmVuZGVyQm94KiBjaGlsZDsK
KyAgICBSZW5kZXJCb3gmIGNoaWxkOwogICAgIExheW91dFVuaXQgY2hpbGRTaXplOwogfTsKIApA
QCAtMTQ4LDEzICsxNDgsMTMgQEAgY29uc3QgY2hhciogUmVuZGVyRmxleGlibGVCb3g6OnJlbmRl
ck5hbQogICAgIHJldHVybiAiUmVuZGVyRmxleGlibGVCb3giOwogfQogCi1zdGF0aWMgTGF5b3V0
VW5pdCBtYXJnaW5Mb2dpY2FsV2lkdGhGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCitzdGF0aWMgTGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsV2lkdGhG
b3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAg
ICAgLy8gQSBtYXJnaW4gaGFzIHRocmVlIHR5cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1
dG8gKHZhcmlhYmxlKS4KICAgICAvLyBBdXRvIGFuZCBwZXJjZW50YWdlIG1hcmdpbnMgYmVjb21l
IDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KICAgICAvLyBGaXhlZCBtYXJnaW5zIGNh
biBiZSBhZGRlZCBpbiBhcyBpcy4KLSAgICBMZW5ndGggbWFyZ2luTGVmdCA9IGNoaWxkLT5zdHls
ZSgpLT5tYXJnaW5TdGFydFVzaW5nKHBhcmVudFN0eWxlKTsKLSAgICBMZW5ndGggbWFyZ2luUmln
aHQgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luRW5kVXNpbmcocGFyZW50U3R5bGUpOworICAgIExl
bmd0aCBtYXJnaW5MZWZ0ID0gY2hpbGQuc3R5bGUoKS0+bWFyZ2luU3RhcnRVc2luZyhwYXJlbnRT
dHlsZSk7CisgICAgTGVuZ3RoIG1hcmdpblJpZ2h0ID0gY2hpbGQuc3R5bGUoKS0+bWFyZ2luRW5k
VXNpbmcocGFyZW50U3R5bGUpOwogICAgIExheW91dFVuaXQgbWFyZ2luID0gMDsKICAgICBpZiAo
bWFyZ2luTGVmdC5pc0ZpeGVkKCkpCiAgICAgICAgIG1hcmdpbiArPSBtYXJnaW5MZWZ0LnZhbHVl
KCk7CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZUlu
dHJpbnNpYwogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW4gPSBtYXJnaW5M
b2dpY2FsV2lkdGhGb3JDaGlsZChjaGlsZCwgc3R5bGUoKSk7CisgICAgICAgIExheW91dFVuaXQg
bWFyZ2luID0gbWFyZ2luTG9naWNhbFdpZHRoRm9yQ2hpbGQoKmNoaWxkLCBzdHlsZSgpKTsKICAg
ICAgICAgYm9vbCBoYXNPcnRob2dvbmFsV3JpdGluZ01vZGUgPSBjaGlsZC0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgICAgICBMYXlv
dXRVbml0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGhhc09ydGhvZ29uYWxXcml0aW5nTW9k
ZSA/IGNoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgOiBjaGlsZC0+bWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gaGFz
T3J0aG9nb25hbFdyaXRpbmdNb2RlID8gY2hpbGQtPmxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxkLT5t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKQEAgLTIzNCwxNiArMjM0LDE2IEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmZXJyZWQKICAgICBzZXRQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi1zdGF0aWMgaW50IHN5bnRoZXNpemVkQmFzZWxpbmVG
cm9tQ29udGVudEJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgTGluZURpcmVjdGlvbk1vZGUgZGly
ZWN0aW9uKQorc3RhdGljIGludCBzeW50aGVzaXplZEJhc2VsaW5lRnJvbUNvbnRlbnRCb3goY29u
c3QgUmVuZGVyQm94JiBib3gsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbikKIHsKLSAgICBy
ZXR1cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gYm94LT5ib3JkZXJUb3AoKSArIGJv
eC0+cGFkZGluZ1RvcCgpICsgYm94LT5jb250ZW50SGVpZ2h0KCkgOiBib3gtPmJvcmRlclJpZ2h0
KCkgKyBib3gtPnBhZGRpbmdSaWdodCgpICsgYm94LT5jb250ZW50V2lkdGgoKTsKKyAgICByZXR1
cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gYm94LmJvcmRlclRvcCgpICsgYm94LnBh
ZGRpbmdUb3AoKSArIGJveC5jb250ZW50SGVpZ2h0KCkgOiBib3guYm9yZGVyUmlnaHQoKSArIGJv
eC5wYWRkaW5nUmlnaHQoKSArIGJveC5jb250ZW50V2lkdGgoKTsKIH0KIAogaW50IFJlbmRlckZs
ZXhpYmxlQm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCwgTGluZURpcmVj
dGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIGludCBi
YXNlbGluZSA9IGZpcnN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgaWYgKGJhc2VsaW5lID09IC0x
KQotICAgICAgICBiYXNlbGluZSA9IHN5bnRoZXNpemVkQmFzZWxpbmVGcm9tQ29udGVudEJveCh0
aGlzLCBkaXJlY3Rpb24pOworICAgICAgICBiYXNlbGluZSA9IHN5bnRoZXNpemVkQmFzZWxpbmVG
cm9tQ29udGVudEJveCgqdGhpcywgZGlyZWN0aW9uKTsKIAogICAgIGludCBtYXJnaW5Bc2NlbnQg
PSBkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Ub3AoKSA6IG1hcmdpblJpZ2h0
KCk7CiAgICAgcmV0dXJuIGJhc2VsaW5lICsgbWFyZ2luQXNjZW50OwpAQCAtMjU4LDcgKzI1OCw3
IEBAIGludCBSZW5kZXJGbGV4aWJsZUJveDo6Zmlyc3RMaW5lQm94QmFzZWwKICAgICBmb3IgKFJl
bmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0g
bV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhbGlnbm1l
bnRGb3JDaGlsZChjaGlsZCkgPT0gQWxpZ25CYXNlbGluZSAmJiAhaGFzQXV0b01hcmdpbnNJbkNy
b3NzQXhpcyhjaGlsZCkpIHsKKyAgICAgICAgaWYgKGFsaWdubWVudEZvckNoaWxkKCpjaGlsZCkg
PT0gQWxpZ25CYXNlbGluZSAmJiAhaGFzQXV0b01hcmdpbnNJbkNyb3NzQXhpcygqY2hpbGQpKSB7
CiAgICAgICAgICAgICBiYXNlbGluZUNoaWxkID0gY2hpbGQ7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMjczLDE3ICsyNzMsMTcgQEAgaW50IFJlbmRlckZsZXhpYmxlQm94Ojpm
aXJzdExpbmVCb3hCYXNlbAogICAgIGlmICghYmFzZWxpbmVDaGlsZCkKICAgICAgICAgcmV0dXJu
IC0xOwogCi0gICAgaWYgKCFpc0NvbHVtbkZsb3coKSAmJiBoYXNPcnRob2dvbmFsRmxvdyhiYXNl
bGluZUNoaWxkKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzQXhpc0V4dGVudEZvckNoaWxkKGJhc2Vs
aW5lQ2hpbGQpICsgYmFzZWxpbmVDaGlsZC0+bG9naWNhbFRvcCgpOwotICAgIGlmIChpc0NvbHVt
bkZsb3coKSAmJiAhaGFzT3J0aG9nb25hbEZsb3coYmFzZWxpbmVDaGlsZCkpCi0gICAgICAgIHJl
dHVybiBtYWluQXhpc0V4dGVudEZvckNoaWxkKGJhc2VsaW5lQ2hpbGQpICsgYmFzZWxpbmVDaGls
ZC0+bG9naWNhbFRvcCgpOworICAgIGlmICghaXNDb2x1bW5GbG93KCkgJiYgaGFzT3J0aG9nb25h
bEZsb3coKmJhc2VsaW5lQ2hpbGQpKQorICAgICAgICByZXR1cm4gY3Jvc3NBeGlzRXh0ZW50Rm9y
Q2hpbGQoKmJhc2VsaW5lQ2hpbGQpICsgYmFzZWxpbmVDaGlsZC0+bG9naWNhbFRvcCgpOworICAg
IGlmIChpc0NvbHVtbkZsb3coKSAmJiAhaGFzT3J0aG9nb25hbEZsb3coKmJhc2VsaW5lQ2hpbGQp
KQorICAgICAgICByZXR1cm4gbWFpbkF4aXNFeHRlbnRGb3JDaGlsZCgqYmFzZWxpbmVDaGlsZCkg
KyBiYXNlbGluZUNoaWxkLT5sb2dpY2FsVG9wKCk7CiAKICAgICBpbnQgYmFzZWxpbmUgPSBiYXNl
bGluZUNoaWxkLT5maXJzdExpbmVCb3hCYXNlbGluZSgpOwogICAgIGlmIChiYXNlbGluZSA9PSAt
MSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgfGRpcmVjdGlvbnwgaW50byBm
aXJzdExpbmVCb3hCYXNlbGluZSBhbmQgc3RvcCBiYWlsaW5nIG91dCBpZiB3ZSdyZSBhIHdyaXRp
bmcgbW9kZSByb290LgogICAgICAgICAvLyBUaGlzIHdvdWxkIGFsc28gZml4IHNvbWUgY2FzZXMg
d2hlcmUgdGhlIGZsZXhib3ggaXMgb3J0aG9nb25hbCB0byBpdHMgY29udGFpbmVyLgogICAgICAg
ICBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24gPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmU7Ci0gICAgICAgIHJldHVybiBzeW50aGVz
aXplZEJhc2VsaW5lRnJvbUNvbnRlbnRCb3goYmFzZWxpbmVDaGlsZCwgZGlyZWN0aW9uKSArIGJh
c2VsaW5lQ2hpbGQtPmxvZ2ljYWxUb3AoKTsKKyAgICAgICAgcmV0dXJuIHN5bnRoZXNpemVkQmFz
ZWxpbmVGcm9tQ29udGVudEJveCgqYmFzZWxpbmVDaGlsZCwgZGlyZWN0aW9uKSArIGJhc2VsaW5l
Q2hpbGQtPmxvZ2ljYWxUb3AoKTsKICAgICB9CiAKICAgICByZXR1cm4gYmFzZWxpbmUgKyBiYXNl
bGluZUNoaWxkLT5sb2dpY2FsVG9wKCk7CkBAIC0yOTYsNyArMjk2LDcgQEAgaW50IFJlbmRlckZs
ZXhpYmxlQm94OjppbmxpbmVCbG9ja0Jhc2VsaQogICAgICAgICByZXR1cm4gYmFzZWxpbmU7CiAK
ICAgICBpbnQgbWFyZ2luQXNjZW50ID0gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbWFy
Z2luVG9wKCkgOiBtYXJnaW5SaWdodCgpOwotICAgIHJldHVybiBzeW50aGVzaXplZEJhc2VsaW5l
RnJvbUNvbnRlbnRCb3godGhpcywgZGlyZWN0aW9uKSArIG1hcmdpbkFzY2VudDsKKyAgICByZXR1
cm4gc3ludGhlc2l6ZWRCYXNlbGluZUZyb21Db250ZW50Qm94KCp0aGlzLCBkaXJlY3Rpb24pICsg
bWFyZ2luQXNjZW50OwogfQogCiBzdGF0aWMgRUFsaWduSXRlbXMgcmVzb2x2ZUFsaWdubWVudChj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBjaGlsZFN0
eWxlKQpAQCAtNDE3LDcgKzQxNyw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnJlcGFpbnRD
aGlsZHJlbkQKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBw
YWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCiB7CiAgICAgZm9yIChSZW5kZXJC
b3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3Jk
ZXJJdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFwYWludENoaWxkKGNoaWxkLCBwYWlu
dEluZm8sIHBhaW50T2Zmc2V0LCBwYWludEluZm9Gb3JDaGlsZCwgdXNlUHJpbnRSZWN0KSkKKyAg
ICAgICAgaWYgKCFwYWludENoaWxkKCpjaGlsZCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCwgcGFp
bnRJbmZvRm9yQ2hpbGQsIHVzZVByaW50UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQogfQpAQCAtNDQ2LDE2ICs0NDYsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6
Y2xpZW50TG9naQogICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxUb3BGb3JDaGlsZChj
aGlsZCkgKyBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsgbWFyZ2luQWZ0ZXJGb3JDaGls
ZChjaGlsZCk7CisgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsQm90dG9tID0gbG9naWNh
bFRvcEZvckNoaWxkKCpjaGlsZCkgKyBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoKmNoaWxkKSArIG1h
cmdpbkFmdGVyRm9yQ2hpbGQoKmNoaWxkKTsKICAgICAgICAgbWF4Q2hpbGRMb2dpY2FsQm90dG9t
ID0gc3RkOjptYXgobWF4Q2hpbGRMb2dpY2FsQm90dG9tLCBjaGlsZExvZ2ljYWxCb3R0b20pOwog
ICAgIH0KICAgICByZXR1cm4gc3RkOjptYXgoY2xpZW50TG9naWNhbEJvdHRvbSgpLCBtYXhDaGls
ZExvZ2ljYWxCb3R0b20pOwogfQogCi1ib29sIFJlbmRlckZsZXhpYmxlQm94OjpoYXNPcnRob2dv
bmFsRmxvdyhSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAorYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6
aGFzT3J0aG9nb25hbEZsb3coUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogSWYgdGhlIGNoaWxkIGlzIGEgZmxleGJveCwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIGlzSG9y
aXpvbnRhbEZsb3cuCi0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbEZsb3coKSAhPSBjaGlsZC0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsRmxvdygpICE9
IGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiB9CiAKIGJvb2wgUmVuZGVyRmxleGli
bGVCb3g6OmlzQ29sdW1uRmxvdygpIGNvbnN0CkBAIC00ODIsMTEgKzQ4MiwxMSBAQCBib29sIFJl
bmRlckZsZXhpYmxlQm94Ojppc011bHRpbGluZSgpIGNvCiAgICAgcmV0dXJuIHN0eWxlKCktPmZs
ZXhXcmFwKCkgIT0gRmxleE5vV3JhcDsKIH0KIAotTGVuZ3RoIFJlbmRlckZsZXhpYmxlQm94Ojpm
bGV4QmFzaXNGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAorTGVuZ3RoIFJlbmRlckZs
ZXhpYmxlQm94OjpmbGV4QmFzaXNGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewot
ICAgIExlbmd0aCBmbGV4TGVuZ3RoID0gY2hpbGQtPnN0eWxlKCktPmZsZXhCYXNpcygpOworICAg
IExlbmd0aCBmbGV4TGVuZ3RoID0gY2hpbGQuc3R5bGUoKS0+ZmxleEJhc2lzKCk7CiAgICAgaWYg
KGZsZXhMZW5ndGguaXNBdXRvKCkpCi0gICAgICAgIGZsZXhMZW5ndGggPSBpc0hvcml6b250YWxG
bG93KCkgPyBjaGlsZC0+c3R5bGUoKS0+d2lkdGgoKSA6IGNoaWxkLT5zdHlsZSgpLT5oZWlnaHQo
KTsKKyAgICAgICAgZmxleExlbmd0aCA9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLnN0eWxl
KCktPndpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLT5oZWlnaHQoKTsKICAgICByZXR1cm4gZmxleExl
bmd0aDsKIH0KIApAQCAtNDk4LDE0ICs0OTgsMTQgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
c2V0Q3Jvc3NBeGlzRXh0ZQogICAgICAgICBzZXRXaWR0aChleHRlbnQpOwogfQogCi1MYXlvdXRV
bml0IFJlbmRlckZsZXhpYmxlQm94Ojpjcm9zc0F4aXNFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gq
IGNoaWxkKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Y3Jvc3NBeGlzRXh0
ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNIb3Jp
em9udGFsRmxvdygpID8gY2hpbGQtPmhlaWdodCgpIDogY2hpbGQtPndpZHRoKCk7CisgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLmhlaWdodCgpIDogY2hpbGQud2lkdGgoKTsK
IH0KIAotTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6bWFpbkF4aXNFeHRlbnRGb3JDaGls
ZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6
bWFpbkF4aXNFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIHJl
dHVybiBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQo
KTsKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsRmxvdygpID8gY2hpbGQud2lkdGgoKSA6IGNoaWxk
LmhlaWdodCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpjcm9zc0F4aXNF
eHRlbnQoKSBjb25zdApAQCAtNTM5LDcgKzUzOSw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGli
bGVCb3g6Om1haW5BeGlzQ28KICAgICByZXR1cm4gY29udGVudExvZ2ljYWxXaWR0aCgpOwogfQog
Ci1MYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JD
aGlsZChSZW5kZXJCb3gqIGNoaWxkLCBTaXplVHlwZSBzaXplVHlwZSwgY29uc3QgTGVuZ3RoJiBz
aXplKQorTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZU1haW5BeGlzRXh0ZW50
Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgU2l6ZVR5cGUgc2l6ZVR5cGUsIGNvbnN0IExlbmd0
aCYgc2l6ZSkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3Igb3J0aG9nb25hbCBm
bG93cy4gSXQgc2hvdWxkIHVzZSB0aGUgZmxleGJveCdzIHdyaXRpbmctbW9kZSwgbm90IHRoZSBj
aGlsZCdzIGluIG9yZGVyCiAgICAgLy8gdG8gZmlndXJlIG91dCB0aGUgbG9naWNhbCBoZWlnaHQv
d2lkdGguCkBAIC01NDcsMTAgKzU0NywxMCBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94
Ojpjb21wdXRlTWFpCiAgICAgLy8gSW5zdGVhZCwgd2UgbmVlZCB0byBsYXlvdXQgdGhlIGNoaWxk
IGFuIGdldCB0aGUgYXBwcm9wcmlhdGUgaGVpZ2h0IHZhbHVlLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MTAKICAgICBpZiAoaXNDb2x1bW5GbG93
KCkpCi0gICAgICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KHNp
emUpOworICAgICAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KHNp
emUpOwogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0aGlzIHNob3VsZCB3b3JrIGZvciBy
ZWdpb25zIGFuZCBwYXNzIGluIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuCiAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb24gPSAwOwotICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUxvZ2ljYWxXaWR0aElu
UmVnaW9uVXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgdGhpcywg
cmVnaW9uKSAtIGNoaWxkLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CisgICAgcmV0
dXJuIGNoaWxkLmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKHNpemVUeXBlLCBzaXpl
LCBjb250ZW50TG9naWNhbFdpZHRoKCksIHRoaXMsIHJlZ2lvbikgLSBjaGlsZC5ib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbFdpZHRoKCk7CiB9CiAKIFdyaXRpbmdNb2RlIFJlbmRlckZsZXhpYmxlQm94
Ojp0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3QKQEAgLTY2Myw1NSArNjYzLDU1IEBAIExh
eW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZVAKICAgICByZXR1cm4gcGFkZGlu
Z1RvcCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVNYXJn
aW5TdGFydEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
ckZsZXhpYmxlQm94OjpmbG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQpIGNvbnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKLSAgICAgICAgcmV0dXJu
IGlzTGVmdFRvUmlnaHRGbG93KCkgPyBjaGlsZC0+bWFyZ2luTGVmdCgpIDogY2hpbGQtPm1hcmdp
blJpZ2h0KCk7Ci0gICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBjaGlsZC0+bWFyZ2lu
VG9wKCkgOiBjaGlsZC0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIHJldHVybiBpc0xlZnRUb1Jp
Z2h0RmxvdygpID8gY2hpbGQubWFyZ2luTGVmdCgpIDogY2hpbGQubWFyZ2luUmlnaHQoKTsKKyAg
ICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/IGNoaWxkLm1hcmdpblRvcCgpIDogY2hpbGQu
bWFyZ2luQm90dG9tKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dB
d2FyZU1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVNYXJnaW5FbmRGb3JDaGlsZChSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAogewogICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpCi0gICAgICAgIHJl
dHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQtPm1hcmdpblJpZ2h0KCkgOiBjaGlsZC0+
bWFyZ2luTGVmdCgpOwotICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQtPm1h
cmdpbkJvdHRvbSgpIDogY2hpbGQtPm1hcmdpblRvcCgpOworICAgICAgICByZXR1cm4gaXNMZWZ0
VG9SaWdodEZsb3coKSA/IGNoaWxkLm1hcmdpblJpZ2h0KCkgOiBjaGlsZC5tYXJnaW5MZWZ0KCk7
CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBjaGlsZC5tYXJnaW5Cb3R0b20oKSA6
IGNoaWxkLm1hcmdpblRvcCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpm
bG93QXdhcmVNYXJnaW5CZWZvcmVGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQo
UmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGlu
Z01vZGUoKSkgewogICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIGNoaWxkLT5tYXJnaW5Ub3AoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblRvcCgp
OwogICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIGNoaWxk
LT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOwog
ICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5t
YXJnaW5MZWZ0KCk7CisgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5MZWZ0KCk7CiAgICAgY2Fz
ZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gY2hpbGQtPm1hcmdpblJp
Z2h0KCk7CisgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5SaWdodCgpOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbWFyZ2luVG9wKCk7CiB9CiAKLUxheW91
dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZU1hcmdpbkFmdGVyRm9yQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dB
d2FyZU1hcmdpbkFmdGVyRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSkgewogICAgIGNhc2UgVG9wVG9Cb3R0b21X
cml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5tYXJnaW5Cb3R0b20oKTsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOwogICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5tYXJnaW5Ub3AoKTsKKyAgICAgICAgcmV0
dXJuIGNoaWxkLm1hcmdpblRvcCgpOwogICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToK
LSAgICAgICAgcmV0dXJuIGNoaWxkLT5tYXJnaW5SaWdodCgpOworICAgICAgICByZXR1cm4gY2hp
bGQubWFyZ2luUmlnaHQoKTsKICAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6Ci0gICAg
ICAgIHJldHVybiBjaGlsZC0+bWFyZ2luTGVmdCgpOworICAgICAgICByZXR1cm4gY2hpbGQubWFy
Z2luTGVmdCgpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
bWFyZ2luQm90dG9tKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNyb3Nz
QXhpc01hcmdpbkV4dGVudEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckZsZXhpYmxlQm94Ojpjcm9zc0F4aXNNYXJnaW5FeHRlbnRGb3JDaGlsZChSZW5k
ZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIHJldHVybiBpc0hvcml6b250YWxGbG93KCkgPyBj
aGlsZC0+bWFyZ2luSGVpZ2h0KCkgOiBjaGlsZC0+bWFyZ2luV2lkdGgoKTsKKyAgICByZXR1cm4g
aXNIb3Jpem9udGFsRmxvdygpID8gY2hpbGQubWFyZ2luSGVpZ2h0KCkgOiBjaGlsZC5tYXJnaW5X
aWR0aCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpjcm9zc0F4aXNTY3Jv
bGxiYXJFeHRlbnQoKSBjb25zdApAQCAtNzE5LDQzICs3MTksNDMgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJGbGV4aWJsZUJveDo6Y3Jvc3NBeGlzUwogICAgIHJldHVybiBpc0hvcml6b250YWxGbG93KCkg
PyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
CiB9CiAKLUxheW91dFBvaW50IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVMb2NhdGlvbkZv
ckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitMYXlvdXRQb2ludCBSZW5kZXJGbGV4aWJs
ZUJveDo6Zmxvd0F3YXJlTG9jYXRpb25Gb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAog
ewotICAgIHJldHVybiBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC0+bG9jYXRpb24oKSA6IGNo
aWxkLT5sb2NhdGlvbigpLnRyYW5zcG9zZWRQb2ludCgpOworICAgIHJldHVybiBpc0hvcml6b250
YWxGbG93KCkgPyBjaGlsZC5sb2NhdGlvbigpIDogY2hpbGQubG9jYXRpb24oKS50cmFuc3Bvc2Vk
UG9pbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6c2V0Rmxvd0F3YXJlTG9jYXRp
b25Gb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24p
Cit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpzZXRGbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKFJl
bmRlckJveCYgY2hpbGQsIGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikKIHsKICAgICBpZiAo
aXNIb3Jpem9udGFsRmxvdygpKQotICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24obG9jYXRpb24p
OworICAgICAgICBjaGlsZC5zZXRMb2NhdGlvbihsb2NhdGlvbik7CiAgICAgZWxzZQotICAgICAg
ICBjaGlsZC0+c2V0TG9jYXRpb24obG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCkpOworICAgICAg
ICBjaGlsZC5zZXRMb2NhdGlvbihsb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSk7CiB9CiAKLUxh
eW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6Om1haW5BeGlzQm9yZGVyQW5kUGFkZGluZ0V4dGVu
dEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckZsZXhp
YmxlQm94OjptYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAogewotICAgIHJldHVybiBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC0+
Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkgOiBjaGlsZC0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgp
OworICAgIHJldHVybiBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC5ib3JkZXJBbmRQYWRkaW5n
V2lkdGgoKSA6IGNoaWxkLmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKTsKIH0KIAotTGF5b3V0VW5p
dCBSZW5kZXJGbGV4aWJsZUJveDo6bWFpbkF4aXNTY3JvbGxiYXJFeHRlbnRGb3JDaGlsZChSZW5k
ZXJCb3gqIGNoaWxkKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6bWFpbkF4
aXNTY3JvbGxiYXJFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAg
IHJldHVybiBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpIDogY2hpbGQtPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKKyAgICByZXR1cm4gaXNI
b3Jpem9udGFsRmxvdygpID8gY2hpbGQudmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogY2hpbGQu
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsZXhp
YmxlQm94OjpwcmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gq
IGNoaWxkLCBib29sIGhhc0luZmluaXRlTGluZUxlbmd0aCkKK0xheW91dFVuaXQgUmVuZGVyRmxl
eGlibGVCb3g6OnByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZvckNoaWxkKFJlbmRlckJv
eCYgY2hpbGQsIGJvb2wgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKQogewotICAgIGJvb2wgaGFzT3Zl
cnJpZGVTaXplID0gY2hpbGQtPmhhc092ZXJyaWRlV2lkdGgoKSB8fCBjaGlsZC0+aGFzT3ZlcnJp
ZGVIZWlnaHQoKTsKKyAgICBib29sIGhhc092ZXJyaWRlU2l6ZSA9IGNoaWxkLmhhc092ZXJyaWRl
V2lkdGgoKSB8fCBjaGlsZC5oYXNPdmVycmlkZUhlaWdodCgpOwogICAgIGlmIChoYXNPdmVycmlk
ZVNpemUpCi0gICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRlU2l6ZSgpOworICAgICAgICBjaGls
ZC5jbGVhck92ZXJyaWRlU2l6ZSgpOwogCiAgICAgTGVuZ3RoIGZsZXhCYXNpcyA9IGZsZXhCYXNp
c0ZvckNoaWxkKGNoaWxkKTsKICAgICBpZiAoZmxleEJhc2lzLmlzQXV0bygpIHx8IChmbGV4QmFz
aXMuaXNGaXhlZCgpICYmICFmbGV4QmFzaXMudmFsdWUoKSAmJiBoYXNJbmZpbml0ZUxpbmVMZW5n
dGgpKSB7CiAgICAgICAgIGlmIChoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkpIHsKICAgICAgICAg
ICAgIGlmIChoYXNPdmVycmlkZVNpemUpCi0gICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxk
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5l
ZWRlZCgpOworICAgICAgICAgICAgICAgIGNoaWxkLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09u
bHlUaGlzKTsKKyAgICAgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIH0K
LSAgICAgICAgTGF5b3V0VW5pdCBtYWluQXhpc0V4dGVudCA9IGhhc09ydGhvZ29uYWxGbG93KGNo
aWxkKSA/IGNoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgOiBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgbWFpbkF4aXNFeHRlbnQgPSBoYXNPcnRob2dv
bmFsRmxvdyhjaGlsZCkgPyBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkgOiBjaGlsZC5tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgQVNTRVJUKG1haW5BeGlzRXh0ZW50IC0gbWFpbkF4
aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpID49IDApOwogICAgICAgICBy
ZXR1cm4gbWFpbkF4aXNFeHRlbnQgLSBtYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JD
aGlsZChjaGlsZCk7CiAgICAgfQpAQCAtODI5LDc3ICs4MjksNzcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJGbGV4aWJsZUJveDo6YXV0b01hcmdpbgogICAgIHJldHVybiBzaXplT2ZBdXRvTWFyZ2luOwog
fQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94Ojp1cGRhdGVBdXRvTWFyZ2luc0luTWFpbkF4aXMo
UmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBhdXRvTWFyZ2luT2Zmc2V0KQordm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6dXBkYXRlQXV0b01hcmdpbnNJbk1haW5BeGlzKFJlbmRlckJveCYgY2hp
bGQsIExheW91dFVuaXQgYXV0b01hcmdpbk9mZnNldCkKIHsKICAgICBBU1NFUlQoYXV0b01hcmdp
bk9mZnNldCA+PSAwKTsKIAogICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpIHsKLSAgICAgICAg
aWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCkuaXNBdXRvKCkpCi0gICAgICAgICAgICBj
aGlsZC0+c2V0TWFyZ2luTGVmdChhdXRvTWFyZ2luT2Zmc2V0KTsKLSAgICAgICAgaWYgKGNoaWxk
LT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLmlzQXV0bygpKQotICAgICAgICAgICAgY2hpbGQtPnNl
dE1hcmdpblJpZ2h0KGF1dG9NYXJnaW5PZmZzZXQpOworICAgICAgICBpZiAoY2hpbGQuc3R5bGUo
KS0+bWFyZ2luTGVmdCgpLmlzQXV0bygpKQorICAgICAgICAgICAgY2hpbGQuc2V0TWFyZ2luTGVm
dChhdXRvTWFyZ2luT2Zmc2V0KTsKKyAgICAgICAgaWYgKGNoaWxkLnN0eWxlKCktPm1hcmdpblJp
Z2h0KCkuaXNBdXRvKCkpCisgICAgICAgICAgICBjaGlsZC5zZXRNYXJnaW5SaWdodChhdXRvTWFy
Z2luT2Zmc2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPm1h
cmdpblRvcCgpLmlzQXV0bygpKQotICAgICAgICAgICAgY2hpbGQtPnNldE1hcmdpblRvcChhdXRv
TWFyZ2luT2Zmc2V0KTsKLSAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5Cb3R0b20o
KS5pc0F1dG8oKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXRNYXJnaW5Cb3R0b20oYXV0b01hcmdp
bk9mZnNldCk7CisgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLT5tYXJnaW5Ub3AoKS5pc0F1dG8o
KSkKKyAgICAgICAgICAgIGNoaWxkLnNldE1hcmdpblRvcChhdXRvTWFyZ2luT2Zmc2V0KTsKKyAg
ICAgICAgaWYgKGNoaWxkLnN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLmlzQXV0bygpKQorICAgICAg
ICAgICAgY2hpbGQuc2V0TWFyZ2luQm90dG9tKGF1dG9NYXJnaW5PZmZzZXQpOwogICAgIH0KIH0K
IAotYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6aGFzQXV0b01hcmdpbnNJbkNyb3NzQXhpcyhSZW5k
ZXJCb3gqIGNoaWxkKSBjb25zdAorYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6aGFzQXV0b01hcmdp
bnNJbkNyb3NzQXhpcyhSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewogICAgIGlmIChpc0hvcml6
b250YWxGbG93KCkpCi0gICAgICAgIHJldHVybiBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luVG9wKCku
aXNBdXRvKCkgfHwgY2hpbGQtPnN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLmlzQXV0bygpOwotICAg
IHJldHVybiBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLmlzQXV0bygpIHx8IGNoaWxkLT5z
dHlsZSgpLT5tYXJnaW5SaWdodCgpLmlzQXV0bygpOworICAgICAgICByZXR1cm4gY2hpbGQuc3R5
bGUoKS0+bWFyZ2luVG9wKCkuaXNBdXRvKCkgfHwgY2hpbGQuc3R5bGUoKS0+bWFyZ2luQm90dG9t
KCkuaXNBdXRvKCk7CisgICAgcmV0dXJuIGNoaWxkLnN0eWxlKCktPm1hcmdpbkxlZnQoKS5pc0F1
dG8oKSB8fCBjaGlsZC5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLmlzQXV0bygpOwogfQogCi1MYXlv
dXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjphdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxk
KExheW91dFVuaXQgbGluZUNyb3NzQXhpc0V4dGVudCwgUmVuZGVyQm94KiBjaGlsZCkKK0xheW91
dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGQo
TGF5b3V0VW5pdCBsaW5lQ3Jvc3NBeGlzRXh0ZW50LCBSZW5kZXJCb3gmIGNoaWxkKQogewotICAg
IEFTU0VSVCghY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoIWNo
aWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKICAgICBMYXlvdXRVbml0IGNoaWxkQ3Jvc3NF
eHRlbnQgPSBjcm9zc0F4aXNNYXJnaW5FeHRlbnRGb3JDaGlsZChjaGlsZCkgKyBjcm9zc0F4aXNF
eHRlbnRGb3JDaGlsZChjaGlsZCk7CiAgICAgcmV0dXJuIGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBj
aGlsZENyb3NzRXh0ZW50OwogfQogCi1ib29sIFJlbmRlckZsZXhpYmxlQm94Ojp1cGRhdGVBdXRv
TWFyZ2luc0luQ3Jvc3NBeGlzKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgYXZhaWxhYmxl
QWxpZ25tZW50U3BhY2UpCitib29sIFJlbmRlckZsZXhpYmxlQm94Ojp1cGRhdGVBdXRvTWFyZ2lu
c0luQ3Jvc3NBeGlzKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgYXZhaWxhYmxlQWxpZ25t
ZW50U3BhY2UpCiB7Ci0gICAgQVNTRVJUKCFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
OworICAgIEFTU0VSVCghY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwogICAgIEFTU0VS
VChhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSA+PSAwKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFs
ID0gaXNIb3Jpem9udGFsRmxvdygpOwotICAgIExlbmd0aCBzdGFydCA9IGlzSG9yaXpvbnRhbCA/
IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5Ub3AoKSA6IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0
KCk7Ci0gICAgTGVuZ3RoIGVuZCA9IGlzSG9yaXpvbnRhbCA/IGNoaWxkLT5zdHlsZSgpLT5tYXJn
aW5Cb3R0b20oKSA6IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpOworICAgIExlbmd0aCBz
dGFydCA9IGlzSG9yaXpvbnRhbCA/IGNoaWxkLnN0eWxlKCktPm1hcmdpblRvcCgpIDogY2hpbGQu
c3R5bGUoKS0+bWFyZ2luTGVmdCgpOworICAgIExlbmd0aCBlbmQgPSBpc0hvcml6b250YWwgPyBj
aGlsZC5zdHlsZSgpLT5tYXJnaW5Cb3R0b20oKSA6IGNoaWxkLnN0eWxlKCktPm1hcmdpblJpZ2h0
KCk7CiAgICAgaWYgKHN0YXJ0LmlzQXV0bygpICYmIGVuZC5pc0F1dG8oKSkgewogICAgICAgICBh
ZGp1c3RBbGlnbm1lbnRGb3JDaGlsZChjaGlsZCwgYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UgLyAy
KTsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgY2hpbGQtPnNldE1h
cmdpblRvcChhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSAvIDIpOwotICAgICAgICAgICAgY2hpbGQt
PnNldE1hcmdpbkJvdHRvbShhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSAvIDIpOworICAgICAgICAg
ICAgY2hpbGQuc2V0TWFyZ2luVG9wKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlIC8gMik7CisgICAg
ICAgICAgICBjaGlsZC5zZXRNYXJnaW5Cb3R0b20oYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UgLyAy
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoaWxkLT5zZXRNYXJnaW5MZWZ0KGF2
YWlsYWJsZUFsaWdubWVudFNwYWNlIC8gMik7Ci0gICAgICAgICAgICBjaGlsZC0+c2V0TWFyZ2lu
UmlnaHQoYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UgLyAyKTsKKyAgICAgICAgICAgIGNoaWxkLnNl
dE1hcmdpbkxlZnQoYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UgLyAyKTsKKyAgICAgICAgICAgIGNo
aWxkLnNldE1hcmdpblJpZ2h0KGF2YWlsYWJsZUFsaWdubWVudFNwYWNlIC8gMik7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChzdGFydC5pc0F1dG8oKSkg
ewogICAgICAgICBhZGp1c3RBbGlnbm1lbnRGb3JDaGlsZChjaGlsZCwgYXZhaWxhYmxlQWxpZ25t
ZW50U3BhY2UpOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgY2hpbGQt
PnNldE1hcmdpblRvcChhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSk7CisgICAgICAgICAgICBjaGls
ZC5zZXRNYXJnaW5Ub3AoYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjaGlsZC0+c2V0TWFyZ2luTGVmdChhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSk7
CisgICAgICAgICAgICBjaGlsZC5zZXRNYXJnaW5MZWZ0KGF2YWlsYWJsZUFsaWdubWVudFNwYWNl
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChlbmQuaXNBdXRvKCkpIHsK
ICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgIGNoaWxkLT5zZXRNYXJnaW5C
b3R0b20oYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UpOworICAgICAgICAgICAgY2hpbGQuc2V0TWFy
Z2luQm90dG9tKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2hpbGQtPnNldE1hcmdpblJpZ2h0KGF2YWlsYWJsZUFsaWdubWVudFNwYWNlKTsKKyAg
ICAgICAgICAgIGNoaWxkLnNldE1hcmdpblJpZ2h0KGF2YWlsYWJsZUFsaWdubWVudFNwYWNlKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTGF5
b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6bWFyZ2luQm94QXNjZW50Rm9yQ2hpbGQoUmVuZGVy
Qm94KiBjaGlsZCkKK0xheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6Om1hcmdpbkJveEFzY2Vu
dEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpCiB7Ci0gICAgTGF5b3V0VW5pdCBhc2NlbnQgPSBj
aGlsZC0+Zmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKKyAgICBMYXlvdXRVbml0IGFzY2VudCA9IGNo
aWxkLmZpcnN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgaWYgKGFzY2VudCA9PSAtMSkKICAgICAg
ICAgYXNjZW50ID0gY3Jvc3NBeGlzRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpOwogICAgIHJldHVybiBh
c2NlbnQgKyBmbG93QXdhcmVNYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCk7CkBAIC05MzMsMTYg
KzkzMywxNiBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTWFpbkF4aXNQCiAgICAg
fQogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjphZGp1c3RDaGlsZFNpemVGb3JN
aW5BbmRNYXgoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZFNpemUpCitMYXlvdXRV
bml0IFJlbmRlckZsZXhpYmxlQm94OjphZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoUmVuZGVy
Qm94JiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZFNpemUpCiB7Ci0gICAgTGVuZ3RoIG1heCA9IGlz
SG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpIDogY2hpbGQtPnN0
eWxlKCktPm1heEhlaWdodCgpOworICAgIExlbmd0aCBtYXggPSBpc0hvcml6b250YWxGbG93KCkg
PyBjaGlsZC5zdHlsZSgpLT5tYXhXaWR0aCgpIDogY2hpbGQuc3R5bGUoKS0+bWF4SGVpZ2h0KCk7
CiAgICAgaWYgKG1heC5pc1NwZWNpZmllZE9ySW50cmluc2ljKCkpIHsKICAgICAgICAgTGF5b3V0
VW5pdCBtYXhFeHRlbnQgPSBjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWF4
U2l6ZSwgbWF4KTsKICAgICAgICAgaWYgKG1heEV4dGVudCAhPSAtMSAmJiBjaGlsZFNpemUgPiBt
YXhFeHRlbnQpCiAgICAgICAgICAgICBjaGlsZFNpemUgPSBtYXhFeHRlbnQ7CiAgICAgfQogCi0g
ICAgTGVuZ3RoIG1pbiA9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLT5zdHlsZSgpLT5taW5X
aWR0aCgpIDogY2hpbGQtPnN0eWxlKCktPm1pbkhlaWdodCgpOworICAgIExlbmd0aCBtaW4gPSBp
c0hvcml6b250YWxGbG93KCkgPyBjaGlsZC5zdHlsZSgpLT5taW5XaWR0aCgpIDogY2hpbGQuc3R5
bGUoKS0+bWluSGVpZ2h0KCk7CiAgICAgTGF5b3V0VW5pdCBtaW5FeHRlbnQgPSAwOwogICAgIGlm
IChtaW4uaXNTcGVjaWZpZWRPckludHJpbnNpYygpKQogICAgICAgICBtaW5FeHRlbnQgPSBjb21w
dXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWluU2l6ZSwgbWluKTsKQEAgLTk3MCw4
ICs5NzAsOCBAQCBib29sIFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTmV4dEZsZXhMCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIExheW91dFVuaXQgY2hpbGRN
YWluQXhpc0V4dGVudCA9IHByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZvckNoaWxkKGNo
aWxkLCBoYXNJbmZpbml0ZUxpbmVMZW5ndGgpOwotICAgICAgICBMYXlvdXRVbml0IGNoaWxkTWFp
bkF4aXNNYXJnaW5Cb3hFeHRlbnQgPSBtYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JD
aGlsZChjaGlsZCkgKyBjaGlsZE1haW5BeGlzRXh0ZW50OworICAgICAgICBMYXlvdXRVbml0IGNo
aWxkTWFpbkF4aXNFeHRlbnQgPSBwcmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JDaGls
ZCgqY2hpbGQsIGhhc0luZmluaXRlTGluZUxlbmd0aCk7CisgICAgICAgIExheW91dFVuaXQgY2hp
bGRNYWluQXhpc01hcmdpbkJveEV4dGVudCA9IG1haW5BeGlzQm9yZGVyQW5kUGFkZGluZ0V4dGVu
dEZvckNoaWxkKCpjaGlsZCkgKyBjaGlsZE1haW5BeGlzRXh0ZW50OwogICAgICAgICBjaGlsZE1h
aW5BeGlzTWFyZ2luQm94RXh0ZW50ICs9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLT5tYXJn
aW5XaWR0aCgpIDogY2hpbGQtPm1hcmdpbkhlaWdodCgpOwogCiAgICAgICAgIGlmIChpc011bHRp
bGluZSgpICYmIHByZWZlcnJlZE1haW5BeGlzRXh0ZW50ICsgY2hpbGRNYWluQXhpc01hcmdpbkJv
eEV4dGVudCA+IGxpbmVCcmVha0xlbmd0aCAmJiBsaW5lSGFzSW5GbG93SXRlbSkKQEAgLTk4Miw3
ICs5ODIsNyBAQCBib29sIFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTmV4dEZsZXhMCiAgICAg
ICAgIHRvdGFsRmxleEdyb3cgKz0gY2hpbGQtPnN0eWxlKCktPmZsZXhHcm93KCk7CiAgICAgICAg
IHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rICs9IGNoaWxkLT5zdHlsZSgpLT5mbGV4U2hyaW5rKCkg
KiBjaGlsZE1haW5BeGlzRXh0ZW50OwogCi0gICAgICAgIExheW91dFVuaXQgY2hpbGRNaW5NYXhB
cHBsaWVkTWFpbkF4aXNFeHRlbnQgPSBhZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoY2hpbGQs
IGNoaWxkTWFpbkF4aXNFeHRlbnQpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkTWluTWF4QXBw
bGllZE1haW5BeGlzRXh0ZW50ID0gYWRqdXN0Q2hpbGRTaXplRm9yTWluQW5kTWF4KCpjaGlsZCwg
Y2hpbGRNYWluQXhpc0V4dGVudCk7CiAgICAgICAgIG1pbk1heEFwcGxpZWRNYWluQXhpc0V4dGVu
dCArPSBjaGlsZE1pbk1heEFwcGxpZWRNYWluQXhpc0V4dGVudCAtIGNoaWxkTWFpbkF4aXNFeHRl
bnQgKyBjaGlsZE1haW5BeGlzTWFyZ2luQm94RXh0ZW50OwogICAgIH0KICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTk5MSwxMyArOTkxLDEzIEBAIGJvb2wgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVO
ZXh0RmxleEwKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmZyZWV6ZVZpb2xhdGlvbnMoY29uc3Qg
VmVjdG9yPFZpb2xhdGlvbj4mIHZpb2xhdGlvbnMsIExheW91dFVuaXQmIGF2YWlsYWJsZUZyZWVT
cGFjZSwgZG91YmxlJiB0b3RhbEZsZXhHcm93LCBkb3VibGUmIHRvdGFsV2VpZ2h0ZWRGbGV4U2hy
aW5rLCBJbmZsZXhpYmxlRmxleEl0ZW1TaXplJiBpbmZsZXhpYmxlSXRlbXMsIGJvb2wgaGFzSW5m
aW5pdGVMaW5lTGVuZ3RoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlvbGF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBSZW5kZXJCb3gqIGNoaWxkID0gdmlvbGF0aW9uc1tp
XS5jaGlsZDsKKyAgICAgICAgUmVuZGVyQm94JiBjaGlsZCA9IHZpb2xhdGlvbnNbaV0uY2hpbGQ7
CiAgICAgICAgIExheW91dFVuaXQgY2hpbGRTaXplID0gdmlvbGF0aW9uc1tpXS5jaGlsZFNpemU7
CiAgICAgICAgIExheW91dFVuaXQgcHJlZmVycmVkQ2hpbGRTaXplID0gcHJlZmVycmVkTWFpbkF4
aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoY2hpbGQsIGhhc0luZmluaXRlTGluZUxlbmd0aCk7CiAg
ICAgICAgIGF2YWlsYWJsZUZyZWVTcGFjZSAtPSBjaGlsZFNpemUgLSBwcmVmZXJyZWRDaGlsZFNp
emU7Ci0gICAgICAgIHRvdGFsRmxleEdyb3cgLT0gY2hpbGQtPnN0eWxlKCktPmZsZXhHcm93KCk7
Ci0gICAgICAgIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rIC09IGNoaWxkLT5zdHlsZSgpLT5mbGV4
U2hyaW5rKCkgKiBwcmVmZXJyZWRDaGlsZFNpemU7Ci0gICAgICAgIGluZmxleGlibGVJdGVtcy5z
ZXQoY2hpbGQsIGNoaWxkU2l6ZSk7CisgICAgICAgIHRvdGFsRmxleEdyb3cgLT0gY2hpbGQuc3R5
bGUoKS0+ZmxleEdyb3coKTsKKyAgICAgICAgdG90YWxXZWlnaHRlZEZsZXhTaHJpbmsgLT0gY2hp
bGQuc3R5bGUoKS0+ZmxleFNocmluaygpICogcHJlZmVycmVkQ2hpbGRTaXplOworICAgICAgICBp
bmZsZXhpYmxlSXRlbXMuc2V0KCZjaGlsZCwgY2hpbGRTaXplKTsKICAgICB9CiB9CiAKQEAgLTEw
MTAsMjIgKzEwMTAsMjIgQEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6cmVzb2x2ZUZsZXhpYmxl
TAogICAgIFZlY3RvcjxWaW9sYXRpb24+IG1pblZpb2xhdGlvbnM7CiAgICAgVmVjdG9yPFZpb2xh
dGlvbj4gbWF4VmlvbGF0aW9uczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGQgPSBjaGlsZHJlbltpXTsK
LSAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICBS
ZW5kZXJCb3gmIGNoaWxkID0gKmNoaWxkcmVuW2ldOworICAgICAgICBpZiAoY2hpbGQuaXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgIGNoaWxkU2l6ZXMuYXBwZW5kKDApOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaW5mbGV4aWJs
ZUl0ZW1zLmNvbnRhaW5zKGNoaWxkKSkKLSAgICAgICAgICAgIGNoaWxkU2l6ZXMuYXBwZW5kKGlu
ZmxleGlibGVJdGVtcy5nZXQoY2hpbGQpKTsKKyAgICAgICAgaWYgKGluZmxleGlibGVJdGVtcy5j
b250YWlucygmY2hpbGQpKQorICAgICAgICAgICAgY2hpbGRTaXplcy5hcHBlbmQoaW5mbGV4aWJs
ZUl0ZW1zLmdldCgmY2hpbGQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBMYXlvdXRV
bml0IHByZWZlcnJlZENoaWxkU2l6ZSA9IHByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZv
ckNoaWxkKGNoaWxkLCBoYXNJbmZpbml0ZUxpbmVMZW5ndGgpOwogICAgICAgICAgICAgTGF5b3V0
VW5pdCBjaGlsZFNpemUgPSBwcmVmZXJyZWRDaGlsZFNpemU7CiAgICAgICAgICAgICBkb3VibGUg
ZXh0cmFTcGFjZSA9IDA7CiAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlRnJlZVNwYWNlID4gMCAm
JiB0b3RhbEZsZXhHcm93ID4gMCAmJiBmbGV4U2lnbiA9PSBQb3NpdGl2ZUZsZXhpYmlsaXR5ICYm
IHN0ZDo6aXNmaW5pdGUodG90YWxGbGV4R3JvdykpCi0gICAgICAgICAgICAgICAgZXh0cmFTcGFj
ZSA9IGF2YWlsYWJsZUZyZWVTcGFjZSAqIGNoaWxkLT5zdHlsZSgpLT5mbGV4R3JvdygpIC8gdG90
YWxGbGV4R3JvdzsKKyAgICAgICAgICAgICAgICBleHRyYVNwYWNlID0gYXZhaWxhYmxlRnJlZVNw
YWNlICogY2hpbGQuc3R5bGUoKS0+ZmxleEdyb3coKSAvIHRvdGFsRmxleEdyb3c7CiAgICAgICAg
ICAgICBlbHNlIGlmIChhdmFpbGFibGVGcmVlU3BhY2UgPCAwICYmIHRvdGFsV2VpZ2h0ZWRGbGV4
U2hyaW5rID4gMCAmJiBmbGV4U2lnbiA9PSBOZWdhdGl2ZUZsZXhpYmlsaXR5ICYmIHN0ZDo6aXNm
aW5pdGUodG90YWxXZWlnaHRlZEZsZXhTaHJpbmspKQotICAgICAgICAgICAgICAgIGV4dHJhU3Bh
Y2UgPSBhdmFpbGFibGVGcmVlU3BhY2UgKiBjaGlsZC0+c3R5bGUoKS0+ZmxleFNocmluaygpICog
cHJlZmVycmVkQ2hpbGRTaXplIC8gdG90YWxXZWlnaHRlZEZsZXhTaHJpbms7CisgICAgICAgICAg
ICAgICAgZXh0cmFTcGFjZSA9IGF2YWlsYWJsZUZyZWVTcGFjZSAqIGNoaWxkLnN0eWxlKCktPmZs
ZXhTaHJpbmsoKSAqIHByZWZlcnJlZENoaWxkU2l6ZSAvIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5r
OwogICAgICAgICAgICAgaWYgKHN0ZDo6aXNmaW5pdGUoZXh0cmFTcGFjZSkpCiAgICAgICAgICAg
ICAgICAgY2hpbGRTaXplICs9IHJvdW5kZWRMYXlvdXRVbml0KGV4dHJhU3BhY2UpOwogCkBAIC0x
MDc2LDE5ICsxMDc2LDE5IEBAIHN0YXRpYyBMYXlvdXRVbml0IGp1c3RpZnlDb250ZW50U3BhY2VC
ZXQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6c2V0TG9naWNh
bE92ZXJyaWRlU2l6ZShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGNoaWxkUHJlZmVycmVk
U2l6ZSkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnNldExvZ2ljYWxPdmVycmlkZVNpemUoUmVu
ZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZFByZWZlcnJlZFNpemUpCiB7CiAgICAgaWYg
KGhhc09ydGhvZ29uYWxGbG93KGNoaWxkKSkKLSAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlTG9n
aWNhbENvbnRlbnRIZWlnaHQoY2hpbGRQcmVmZXJyZWRTaXplIC0gY2hpbGQtPmJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBjaGlsZC5zZXRPdmVycmlkZUxvZ2ljYWxD
b250ZW50SGVpZ2h0KGNoaWxkUHJlZmVycmVkU2l6ZSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCkpOwogICAgIGVsc2UKLSAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlTG9n
aWNhbENvbnRlbnRXaWR0aChjaGlsZFByZWZlcnJlZFNpemUgLSBjaGlsZC0+Ym9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVMb2dpY2FsQ29u
dGVudFdpZHRoKGNoaWxkUHJlZmVycmVkU2l6ZSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsV2lkdGgoKSk7CiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnByZXBhcmVDaGlsZEZv
clBvc2l0aW9uZWRMYXlvdXQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBtYWluQXhpc09m
ZnNldCwgTGF5b3V0VW5pdCBjcm9zc0F4aXNPZmZzZXQsIFBvc2l0aW9uZWRMYXlvdXRNb2RlIGxh
eW91dE1vZGUpCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpwcmVwYXJlQ2hpbGRGb3JQb3NpdGlv
bmVkTGF5b3V0KFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbWFpbkF4aXNPZmZzZXQsIExh
eW91dFVuaXQgY3Jvc3NBeGlzT2Zmc2V0LCBQb3NpdGlvbmVkTGF5b3V0TW9kZSBsYXlvdXRNb2Rl
KQogewotICAgIEFTU0VSVChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotICAgIGNo
aWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7Ci0g
ICAgUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBjaGlsZC0+bGF5ZXIoKTsKKyAgICBBU1NFUlQo
Y2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOworICAgIGNoaWxkLmNvbnRhaW5pbmdCbG9j
aygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKKyAgICBSZW5kZXJMYXllciogY2hp
bGRMYXllciA9IGNoaWxkLmxheWVyKCk7CiAgICAgTGF5b3V0VW5pdCBpbmxpbmVQb3NpdGlvbiA9
IGlzQ29sdW1uRmxvdygpID8gY3Jvc3NBeGlzT2Zmc2V0IDogbWFpbkF4aXNPZmZzZXQ7CiAgICAg
aWYgKGxheW91dE1vZGUgPT0gRmxpcEZvclJvd1JldmVyc2UgJiYgc3R5bGUoKS0+ZmxleERpcmVj
dGlvbigpID09IEZsb3dSb3dSZXZlcnNlKQogICAgICAgICBpbmxpbmVQb3NpdGlvbiA9IG1haW5B
eGlzRXh0ZW50KCkgLSBtYWluQXhpc09mZnNldDsKQEAgLTEwOTcsMTQgKzEwOTcsMTQgQEAgdm9p
ZCBSZW5kZXJGbGV4aWJsZUJveDo6cHJlcGFyZUNoaWxkRm9yUAogICAgIExheW91dFVuaXQgc3Rh
dGljQmxvY2tQb3NpdGlvbiA9IGlzQ29sdW1uRmxvdygpID8gbWFpbkF4aXNPZmZzZXQgOiBjcm9z
c0F4aXNPZmZzZXQ7CiAgICAgaWYgKGNoaWxkTGF5ZXItPnN0YXRpY0Jsb2NrUG9zaXRpb24oKSAh
PSBzdGF0aWNCbG9ja1Bvc2l0aW9uKSB7CiAgICAgICAgIGNoaWxkTGF5ZXItPnNldFN0YXRpY0Js
b2NrUG9zaXRpb24oc3RhdGljQmxvY2tQb3NpdGlvbik7Ci0gICAgICAgIGlmIChjaGlsZC0+c3R5
bGUoKS0+aGFzU3RhdGljQmxvY2tQb3NpdGlvbihzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7CisgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLT5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9u
KHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKQorICAgICAgICAgICAgY2hpbGQu
c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgIH0KIH0KIAotRUFsaWduSXRl
bXMgUmVuZGVyRmxleGlibGVCb3g6OmFsaWdubWVudEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQp
IGNvbnN0CitFQWxpZ25JdGVtcyBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25tZW50Rm9yQ2hpbGQo
UmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBFQWxpZ25JdGVtcyBhbGlnbiA9IHJlc29s
dmVBbGlnbm1lbnQoc3R5bGUoKSwgY2hpbGQtPnN0eWxlKCkpOworICAgIEVBbGlnbkl0ZW1zIGFs
aWduID0gcmVzb2x2ZUFsaWdubWVudChzdHlsZSgpLCBjaGlsZC5zdHlsZSgpKTsKIAogICAgIGlm
IChhbGlnbiA9PSBBbGlnbkJhc2VsaW5lICYmIGhhc09ydGhvZ29uYWxGbG93KGNoaWxkKSkKICAg
ICAgICAgYWxpZ24gPSBBbGlnbkZsZXhTdGFydDsKQEAgLTExMzAsMTkgKzExMzAsMTkgQEAgc2l6
ZV90IFJlbmRlckZsZXhpYmxlQm94OjpudW1iZXJPZkluRmxvdwogICAgIHJldHVybiBjb3VudDsK
IH0KIAotYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6bmVlZFRvU3RyZXRjaENoaWxkKFJlbmRlckJv
eCogY2hpbGQpCitib29sIFJlbmRlckZsZXhpYmxlQm94OjpuZWVkVG9TdHJldGNoQ2hpbGQoUmVu
ZGVyQm94JiBjaGlsZCkKIHsKICAgICBpZiAoYWxpZ25tZW50Rm9yQ2hpbGQoY2hpbGQpICE9IEFs
aWduU3RyZXRjaCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGVuZ3RoIGNyb3NzQXhp
c0xlbmd0aCA9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLT5zdHlsZSgpLT5oZWlnaHQoKSA6
IGNoaWxkLT5zdHlsZSgpLT53aWR0aCgpOworICAgIExlbmd0aCBjcm9zc0F4aXNMZW5ndGggPSBp
c0hvcml6b250YWxGbG93KCkgPyBjaGlsZC5zdHlsZSgpLT5oZWlnaHQoKSA6IGNoaWxkLnN0eWxl
KCktPndpZHRoKCk7CiAgICAgcmV0dXJuIGNyb3NzQXhpc0xlbmd0aC5pc0F1dG8oKTsKIH0KIAot
dm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cmVzZXRBdXRvTWFyZ2luc0FuZExvZ2ljYWxUb3BJbkNy
b3NzQXhpcyhSZW5kZXJCb3gqIGNoaWxkKQordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cmVzZXRB
dXRvTWFyZ2luc0FuZExvZ2ljYWxUb3BJbkNyb3NzQXhpcyhSZW5kZXJCb3gmIGNoaWxkKQogewog
ICAgIGlmIChoYXNBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKGNoaWxkKSkKLSAgICAgICAgY2hpbGQt
PnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgY2hpbGQudXBkYXRlTG9naWNhbEhlaWdo
dCgpOwogfQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRBbmRQbGFjZUNoaWxkcmVu
KExheW91dFVuaXQmIGNyb3NzQXhpc09mZnNldCwgY29uc3QgT3JkZXJlZEZsZXhJdGVtTGlzdCYg
Y2hpbGRyZW4sIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgY2hpbGRTaXplcywgTGF5b3V0VW5p
dCBhdmFpbGFibGVGcmVlU3BhY2UsIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgVmVjdG9yPExpbmVD
b250ZXh0PiYgbGluZUNvbnRleHRzKQpAQCAtMTE2Miw4ICsxMTYyLDggQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6bGF5b3V0QW5kUGxhY2VDaAogICAgIHNpemVfdCBzZWVuSW5GbG93UG9zaXRp
b25lZENoaWxkcmVuID0gMDsKICAgICBib29sIHNob3VsZEZsaXBNYWluQXhpcyA9ICFpc0NvbHVt
bkZsb3coKSAmJiAhaXNMZWZ0VG9SaWdodEZsb3coKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGQgPSBj
aGlsZHJlbltpXTsKLSAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkg
eworICAgICAgICBSZW5kZXJCb3gmIGNoaWxkID0gKmNoaWxkcmVuW2ldOworICAgICAgICBpZiAo
Y2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgIHByZXBhcmVDaGls
ZEZvclBvc2l0aW9uZWRMYXlvdXQoY2hpbGQsIG1haW5BeGlzT2Zmc2V0LCBjcm9zc0F4aXNPZmZz
ZXQsIEZsaXBGb3JSb3dSZXZlcnNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CkBAIC0xMTcyLDEzICsxMTcyLDEzIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEFu
ZFBsYWNlQ2gKICAgICAgICAgc2V0TG9naWNhbE92ZXJyaWRlU2l6ZShjaGlsZCwgY2hpbGRQcmVm
ZXJyZWRTaXplKTsKICAgICAgICAgLy8gRklYTUU6IENhbiBhdm9pZCBsYXlpbmcgb3V0IGhlcmUg
aW4gc29tZSBjYXNlcy4gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzg3OTA1LgogICAgICAgICBp
ZiAobmVlZFRvU3RyZXRjaENoaWxkKGNoaWxkKSB8fCBjaGlsZFByZWZlcnJlZFNpemUgIT0gbWFp
bkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCkpCi0gICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVk
c0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFRv
IGF2b2lkIGRvdWJsZSBhcHBseWluZyBtYXJnaW4gY2hhbmdlcyBpbiB1cGRhdGVBdXRvTWFyZ2lu
c0luQ3Jvc3NBeGlzLCB3ZSByZXNldCB0aGUgbWFyZ2lucyBoZXJlLgogICAgICAgICAgICAgcmVz
ZXRBdXRvTWFyZ2luc0FuZExvZ2ljYWxUb3BJbkNyb3NzQXhpcyhjaGlsZCk7CiAgICAgICAgIH0K
ICAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0c0JlZm9yZUxheW91dChyZWxheW91dENo
aWxkcmVuLCBjaGlsZCk7Ci0gICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAg
ICBjaGlsZC5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgICAgIHVwZGF0ZUF1dG9NYXJnaW5zSW5N
YWluQXhpcyhjaGlsZCwgYXV0b01hcmdpbk9mZnNldCk7CiAKQEAgLTEyNDAsOSArMTI0MCw5IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dENvbHVtblJldmUKIAogICAgIHNpemVfdCBz
ZWVuSW5GbG93UG9zaXRpb25lZENoaWxkcmVuID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGQgPSBj
aGlsZHJlbltpXTsKLSAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkg
ewotICAgICAgICAgICAgY2hpbGQtPmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24obWFp
bkF4aXNPZmZzZXQpOworICAgICAgICBSZW5kZXJCb3gmIGNoaWxkID0gKmNoaWxkcmVuW2ldOwor
ICAgICAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAg
IGNoaWxkLmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24obWFpbkF4aXNPZmZzZXQpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgbWFpbkF4aXNPZmZzZXQg
LT0gbWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCkgKyBmbG93QXdhcmVNYXJnaW5FbmRGb3JD
aGlsZChjaGlsZCk7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjphbGlnbkZsZXhMaW5lcyhWCiAgICAgZm9yICh1bnNpZ25lZCBsaW5lTnVtYmVyID0gMDsgbGlu
ZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJlcikgewogICAgICAgICBs
aW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzT2Zmc2V0ICs9IGxpbmVPZmZzZXQ7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29u
dGV4dHNbbGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQg
PSBtX29yZGVySXRlcmF0b3IubmV4dCgpKQotICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9y
Q2hpbGQoY2hpbGQsIGxpbmVPZmZzZXQpOworICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9y
Q2hpbGQoKmNoaWxkLCBsaW5lT2Zmc2V0KTsKIAogICAgICAgICBpZiAoc3R5bGUoKS0+YWxpZ25D
b250ZW50KCkgPT0gQWxpZ25Db250ZW50U3RyZXRjaCAmJiBhdmFpbGFibGVDcm9zc0F4aXNTcGFj
ZSA+IDApCiAgICAgICAgICAgICBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0
ZW50ICs9IGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNlIC8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxp
bmVDb250ZXh0cy5zaXplKCkpOwpAQCAtMTMwNiwxMSArMTMwNiwxMSBAQCB2b2lkIFJlbmRlckZs
ZXhpYmxlQm94OjphbGlnbkZsZXhMaW5lcyhWCiAgICAgfQogfQogCi12b2lkIFJlbmRlckZsZXhp
YmxlQm94OjphZGp1c3RBbGlnbm1lbnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRV
bml0IGRlbHRhKQordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWRqdXN0QWxpZ25tZW50Rm9yQ2hp
bGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBkZWx0YSkKIHsKLSAgICBpZiAoY2hpbGQt
PmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgc3RhdGljSW5s
aW5lUG9zaXRpb24gPSBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljSW5saW5lUG9zaXRpb24oKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBzdGF0aWNCbG9ja1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0
YXRpY0Jsb2NrUG9zaXRpb24oKTsKKyAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpIHsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNJbmxpbmVQb3NpdGlvbiA9IGNoaWxkLmxh
eWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCk7CisgICAgICAgIExheW91dFVuaXQgc3RhdGlj
QmxvY2tQb3NpdGlvbiA9IGNoaWxkLmxheWVyKCktPnN0YXRpY0Jsb2NrUG9zaXRpb24oKTsKICAg
ICAgICAgTGF5b3V0VW5pdCBtYWluQXhpcyA9IGlzQ29sdW1uRmxvdygpID8gc3RhdGljQmxvY2tQ
b3NpdGlvbiA6IHN0YXRpY0lubGluZVBvc2l0aW9uOwogICAgICAgICBMYXlvdXRVbml0IGNyb3Nz
QXhpcyA9IGlzQ29sdW1uRmxvdygpID8gc3RhdGljSW5saW5lUG9zaXRpb24gOiBzdGF0aWNCbG9j
a1Bvc2l0aW9uOwogICAgICAgICBjcm9zc0F4aXMgKz0gZGVsdGE7CkBAIC0xMzM2LDQxICsxMzM2
LDQxIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduQ2hpbGRyZW4oY28KICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmZsZXhXcmFwKCkgPT0g
RmxleFdyYXBSZXZlcnNlKQotICAgICAgICAgICAgICAgICAgICBhZGp1c3RBbGlnbm1lbnRGb3JD
aGlsZChjaGlsZCwgbGluZUNyb3NzQXhpc0V4dGVudCk7CisgICAgICAgICAgICAgICAgICAgIGFk
anVzdEFsaWdubWVudEZvckNoaWxkKCpjaGlsZCwgbGluZUNyb3NzQXhpc0V4dGVudCk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh1
cGRhdGVBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKGNoaWxkLCBzdGQ6Om1heChMYXlvdXRVbml0KDAp
LCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsIGNo
aWxkKSkpKQorICAgICAgICAgICAgaWYgKHVwZGF0ZUF1dG9NYXJnaW5zSW5Dcm9zc0F4aXMoKmNo
aWxkLCBzdGQ6Om1heChMYXlvdXRVbml0KDApLCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNo
aWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsICpjaGlsZCkpKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgc3dpdGNoIChhbGlnbm1lbnRGb3JDaGlsZChjaGlsZCkpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoYWxpZ25tZW50Rm9yQ2hpbGQoKmNoaWxkKSkgewogICAgICAg
ICAgICAgY2FzZSBBbGlnbkF1dG86CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFsaWduU3RyZXRj
aDogewotICAgICAgICAgICAgICAgIGFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGQoY2hpbGQs
IGxpbmVDcm9zc0F4aXNFeHRlbnQpOworICAgICAgICAgICAgICAgIGFwcGx5U3RyZXRjaEFsaWdu
bWVudFRvQ2hpbGQoKmNoaWxkLCBsaW5lQ3Jvc3NBeGlzRXh0ZW50KTsKICAgICAgICAgICAgICAg
ICAvLyBTaW5jZSB3cmFwLXJldmVyc2UgZmxpcHMgY3Jvc3Mgc3RhcnQgYW5kIGNyb3NzIGVuZCwg
c3RyZWNoIGNoaWxkcmVuIHNob3VsZCBiZSBhbGlnbmVkIHdpdGggdGhlIGNyb3NzIGVuZC4KICAg
ICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZmxleFdyYXAoKSA9PSBGbGV4V3JhcFJldmVyc2Up
Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKGNoaWxkLCBhdmFp
bGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsIGNoaWxkKSk7
CisgICAgICAgICAgICAgICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKCpjaGlsZCwgYXZh
aWxhYmxlQWxpZ25tZW50U3BhY2VGb3JDaGlsZChsaW5lQ3Jvc3NBeGlzRXh0ZW50LCAqY2hpbGQp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgQWxpZ25GbGV4U3RhcnQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIEFsaWduRmxleEVuZDoKLSAgICAgICAgICAgICAgICBhZGp1c3RBbGlnbm1lbnRGb3JDaGls
ZChjaGlsZCwgYXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JDaGlsZChsaW5lQ3Jvc3NBeGlzRXh0
ZW50LCBjaGlsZCkpOworICAgICAgICAgICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKCpj
aGlsZCwgYXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JDaGlsZChsaW5lQ3Jvc3NBeGlzRXh0ZW50
LCAqY2hpbGQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWxp
Z25DZW50ZXI6Ci0gICAgICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hpbGQoY2hpbGQs
IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGQobGluZUNyb3NzQXhpc0V4dGVudCwgY2hp
bGQpIC8gMik7CisgICAgICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hpbGQoKmNoaWxk
LCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsICpj
aGlsZCkgLyAyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWxp
Z25CYXNlbGluZTogewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQgaGVyZSBp
biBjb2x1bW5zLCB3ZSB3YW50IHRoZSB1c2UgdGhlIGRlc2NlbnQsIGV4Y2VwdCB3ZSBjdXJyZW50
bHkgY2FuJ3QgZ2V0IHRoZSBhc2NlbnQvZGVzY2VudCBvZiBvcnRob2dvbmFsIGNoaWxkcmVuLgog
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05ODA3NgotICAgICAgICAgICAgICAgIExheW91dFVuaXQgYXNjZW50ID0gbWFyZ2luQm94QXNj
ZW50Rm9yQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgYXNjZW50ID0g
bWFyZ2luQm94QXNjZW50Rm9yQ2hpbGQoKmNoaWxkKTsKICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IHN0YXJ0T2Zmc2V0ID0gbWF4QXNjZW50IC0gYXNjZW50OwotICAgICAgICAgICAgICAgIGFk
anVzdEFsaWdubWVudEZvckNoaWxkKGNoaWxkLCBzdGFydE9mZnNldCk7CisgICAgICAgICAgICAg
ICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hpbGQoKmNoaWxkLCBzdGFydE9mZnNldCk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZmxleFdyYXAoKSA9PSBGbGV4V3JhcFJldmVyc2UpCi0g
ICAgICAgICAgICAgICAgICAgIG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBzdGQ6Om1pbihtaW5N
YXJnaW5BZnRlckJhc2VsaW5lLCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkKGxpbmVD
cm9zc0F4aXNFeHRlbnQsIGNoaWxkKSAtIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9IHN0ZDo6bWluKG1pbk1hcmdpbkFmdGVyQmFzZWxp
bmUsIGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGQobGluZUNyb3NzQXhpc0V4dGVudCwg
KmNoaWxkKSAtIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEzODgsMzggKzEzODgsMzggQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbihjbwogICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdp
bkFmdGVyQmFzZWxpbmUgPSBtaW5NYXJnaW5BZnRlckJhc2VsaW5lc1tsaW5lTnVtYmVyXTsKICAg
ICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250
ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBjaGlsZCA9
IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZCk7Ci0g
ICAgICAgICAgICBpZiAoYWxpZ25tZW50Rm9yQ2hpbGQoY2hpbGQpID09IEFsaWduQmFzZWxpbmUg
JiYgIWhhc0F1dG9NYXJnaW5zSW5Dcm9zc0F4aXMoY2hpbGQpICYmIG1pbk1hcmdpbkFmdGVyQmFz
ZWxpbmUpCi0gICAgICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hpbGQoY2hpbGQsIG1p
bk1hcmdpbkFmdGVyQmFzZWxpbmUpOworICAgICAgICAgICAgaWYgKGFsaWdubWVudEZvckNoaWxk
KCpjaGlsZCkgPT0gQWxpZ25CYXNlbGluZSAmJiAhaGFzQXV0b01hcmdpbnNJbkNyb3NzQXhpcygq
Y2hpbGQpICYmIG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUpCisgICAgICAgICAgICAgICAgYWRqdXN0
QWxpZ25tZW50Rm9yQ2hpbGQoKmNoaWxkLCBtaW5NYXJnaW5BZnRlckJhc2VsaW5lKTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxp
Z25tZW50VG9DaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxpbmVDcm9zc0F4aXNF
eHRlbnQpCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0No
aWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbGluZUNyb3NzQXhpc0V4dGVudCkKIHsK
LSAgICBpZiAoIWlzQ29sdW1uRmxvdygpICYmIGNoaWxkLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0
KCkuaXNBdXRvKCkpIHsKKyAgICBpZiAoIWlzQ29sdW1uRmxvdygpICYmIGNoaWxkLnN0eWxlKCkt
PmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNo
aWxkIGhhcyBvcnRob2dvbmFsIGZsb3csIHRoZW4gaXQgYWxyZWFkeSBoYXMgYW4gb3ZlcnJpZGUg
aGVpZ2h0IHNldCwgc28gdXNlIGl0LgogICAgICAgICBpZiAoIWhhc09ydGhvZ29uYWxGbG93KGNo
aWxkKSkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJldGNoZWRMb2dpY2FsSGVpZ2h0ID0g
Y2hpbGQtPmxvZ2ljYWxIZWlnaHQoKSArIGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGQo
bGluZUNyb3NzQXhpc0V4dGVudCwgY2hpbGQpOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBkZXNp
cmVkTG9naWNhbEhlaWdodCA9IGNoaWxkLT5jb25zdHJhaW5Mb2dpY2FsSGVpZ2h0QnlNaW5NYXgo
c3RyZXRjaGVkTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmV0Y2hl
ZExvZ2ljYWxIZWlnaHQgPSBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkgKyBhdmFpbGFibGVBbGlnbm1l
bnRTcGFjZUZvckNoaWxkKGxpbmVDcm9zc0F4aXNFeHRlbnQsIGNoaWxkKTsKKyAgICAgICAgICAg
IExheW91dFVuaXQgZGVzaXJlZExvZ2ljYWxIZWlnaHQgPSBjaGlsZC5jb25zdHJhaW5Mb2dpY2Fs
SGVpZ2h0QnlNaW5NYXgoc3RyZXRjaGVkTG9naWNhbEhlaWdodCk7CiAKICAgICAgICAgICAgIC8v
IEZJWE1FOiBDYW4gYXZvaWQgbGF5aW5nIG91dCBoZXJlIGluIHNvbWUgY2FzZXMuIFNlZSBodHRw
czovL3dlYmtpdC5vcmcvYi84NzkwNS4KLSAgICAgICAgICAgIGlmIChkZXNpcmVkTG9naWNhbEhl
aWdodCAhPSBjaGlsZC0+bG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGQt
PnNldE92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHQoZGVzaXJlZExvZ2ljYWxIZWlnaHQgLSBj
aGlsZC0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAg
Y2hpbGQtPnNldExvZ2ljYWxIZWlnaHQoMCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPnNldENo
aWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+bGF5
b3V0KCk7CisgICAgICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQgIT0gY2hpbGQubG9n
aWNhbEhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVMb2dpY2Fs
Q29udGVudEhlaWdodChkZXNpcmVkTG9naWNhbEhlaWdodCAtIGNoaWxkLmJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWln
aHQoMCk7CisgICAgICAgICAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOworICAgICAgICAgICAgICAgIGNoaWxkLmxheW91dCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpc0NvbHVtbkZsb3coKSAmJiBjaGlsZC0+c3R5bGUo
KS0+bG9naWNhbFdpZHRoKCkuaXNBdXRvKCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzQ29sdW1uRmxv
dygpICYmIGNoaWxkLnN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzQXV0bygpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBJZiB0aGUgY2hpbGQgZG9lc24ndCBoYXZlIG9ydGhvZ29uYWwgZmxvdywgdGhl
biBpdCBhbHJlYWR5IGhhcyBhbiBvdmVycmlkZSB3aWR0aCBzZXQsIHNvIHVzZSBpdC4KICAgICAg
ICAgaWYgKGhhc09ydGhvZ29uYWxGbG93KGNoaWxkKSkgewogICAgICAgICAgICAgTGF5b3V0VW5p
dCBjaGlsZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgbGluZUNyb3NzQXhpc0V4dGVu
dCAtIGNyb3NzQXhpc01hcmdpbkV4dGVudEZvckNoaWxkKGNoaWxkKSk7Ci0gICAgICAgICAgICBj
aGlsZFdpZHRoID0gY2hpbGQtPmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgo
Y2hpbGRXaWR0aCwgY2hpbGRXaWR0aCwgdGhpcyk7CisgICAgICAgICAgICBjaGlsZFdpZHRoID0g
Y2hpbGQuY29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChjaGlsZFdpZHRoLCBj
aGlsZFdpZHRoLCB0aGlzKTsKIAotICAgICAgICAgICAgaWYgKGNoaWxkV2lkdGggIT0gY2hpbGQt
PmxvZ2ljYWxXaWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlTG9n
aWNhbENvbnRlbnRXaWR0aChjaGlsZFdpZHRoIC0gY2hpbGQtPmJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQo
TWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+bGF5b3V0KCk7CisgICAgICAg
ICAgICBpZiAoY2hpbGRXaWR0aCAhPSBjaGlsZC5sb2dpY2FsV2lkdGgoKSkgeworICAgICAgICAg
ICAgICAgIGNoaWxkLnNldE92ZXJyaWRlTG9naWNhbENvbnRlbnRXaWR0aChjaGlsZFdpZHRoIC0g
Y2hpbGQuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgICAgICBj
aGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAg
Y2hpbGQubGF5b3V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDM0
LDkgKzE0MzQsOSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpmbGlwRm9yUmlnaHRUb0xlCiAg
ICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxk
OyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBM
YXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb3dBd2FyZUxvY2F0aW9uRm9yQ2hpbGQoY2hpbGQpOwot
ICAgICAgICBsb2NhdGlvbi5zZXRZKGNyb3NzRXh0ZW50IC0gY3Jvc3NBeGlzRXh0ZW50Rm9yQ2hp
bGQoY2hpbGQpIC0gbG9jYXRpb24ueSgpKTsKLSAgICAgICAgc2V0Rmxvd0F3YXJlTG9jYXRpb25G
b3JDaGlsZChjaGlsZCwgbG9jYXRpb24pOworICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9
IGZsb3dBd2FyZUxvY2F0aW9uRm9yQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgbG9jYXRpb24uc2V0
WShjcm9zc0V4dGVudCAtIGNyb3NzQXhpc0V4dGVudEZvckNoaWxkKCpjaGlsZCkgLSBsb2NhdGlv
bi55KCkpOworICAgICAgICBzZXRGbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKCpjaGlsZCwgbG9j
YXRpb24pOwogICAgIH0KIH0KIApAQCAtMTQ1MCw3ICsxNDUwLDcgQEAgdm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6ZmxpcEZvcldyYXBSZXZlcgogICAgICAgICAgICAgTGF5b3V0VW5pdCBsaW5lQ3Jv
c3NBeGlzRXh0ZW50ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLmNyb3NzQXhpc0V4dGVudDsK
ICAgICAgICAgICAgIExheW91dFVuaXQgb3JpZ2luYWxPZmZzZXQgPSBsaW5lQ29udGV4dHNbbGlu
ZU51bWJlcl0uY3Jvc3NBeGlzT2Zmc2V0IC0gY3Jvc3NBeGlzU3RhcnRFZGdlOwogICAgICAgICAg
ICAgTGF5b3V0VW5pdCBuZXdPZmZzZXQgPSBjb250ZW50RXh0ZW50IC0gb3JpZ2luYWxPZmZzZXQg
LSBsaW5lQ3Jvc3NBeGlzRXh0ZW50OwotICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hp
bGQoY2hpbGQsIG5ld09mZnNldCAtIG9yaWdpbmFsT2Zmc2V0KTsKKyAgICAgICAgICAgIGFkanVz
dEFsaWdubWVudEZvckNoaWxkKCpjaGlsZCwgbmV3T2Zmc2V0IC0gb3JpZ2luYWxPZmZzZXQpOwog
ICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmgJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTkgKzEw
MiwxOSBAQCBwcml2YXRlOgogICAgIC8vIFVzZSBhbiBpbmxpbmUgY2FwYWNpdHkgb2YgOCwgc2lu
Y2UgZmxleGJveCBjb250YWluZXJzIHVzdWFsbHkgaGF2ZSBsZXNzIHRoYW4gOCBjaGlsZHJlbi4K
ICAgICB0eXBlZGVmIFZlY3RvcjxMYXlvdXRSZWN0LCA4PiBDaGlsZEZyYW1lUmVjdHM7CiAKLSAg
ICBib29sIGhhc09ydGhvZ29uYWxGbG93KFJlbmRlckJveCogY2hpbGQpIGNvbnN0OworICAgIGJv
b2wgaGFzT3J0aG9nb25hbEZsb3coUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAgICAgYm9vbCBp
c0NvbHVtbkZsb3coKSBjb25zdDsKICAgICBib29sIGlzTGVmdFRvUmlnaHRGbG93KCkgY29uc3Q7
CiAgICAgYm9vbCBpc011bHRpbGluZSgpIGNvbnN0OwotICAgIExlbmd0aCBmbGV4QmFzaXNGb3JD
aGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKKyAgICBMZW5ndGggZmxleEJhc2lzRm9yQ2hp
bGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDcm9zc0F4aXNFeHRlbnQo
TGF5b3V0VW5pdCk7Ci0gICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNFeHRlbnRGb3JDaGlsZChSZW5k
ZXJCb3gqIGNoaWxkKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG1haW5BeGlzRXh0ZW50Rm9yQ2hp
bGQoUmVuZGVyQm94KiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNFeHRl
bnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1haW5B
eGlzRXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAgICAgTGF5b3V0VW5p
dCBjcm9zc0F4aXNFeHRlbnQoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG1haW5BeGlzRXh0ZW50
KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCkgY29uc3Q7
CiAgICAgTGF5b3V0VW5pdCBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbEhlaWdodCk7Ci0gICAgTGF5b3V0VW5pdCBjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JD
aGlsZChSZW5kZXJCb3gqIGNoaWxkLCBTaXplVHlwZSwgY29uc3QgTGVuZ3RoJiBzaXplKTsKKyAg
ICBMYXlvdXRVbml0IGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQsIFNpemVUeXBlLCBjb25zdCBMZW5ndGgmIHNpemUpOwogICAgIFdyaXRpbmdNb2RlIHRyYW5z
Zm9ybWVkV3JpdGluZ01vZGUoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGZsb3dBd2FyZUJvcmRl
clN0YXJ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJFbmQoKSBjb25z
dDsKQEAgLTEyNCw1MiArMTI0LDUyIEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBmbG93QXdh
cmVQYWRkaW5nRW5kKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVQYWRkaW5nQmVm
b3JlKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVQYWRkaW5nQWZ0ZXIoKSBjb25z
dDsKLSAgICBMYXlvdXRVbml0IGZsb3dBd2FyZU1hcmdpblN0YXJ0Rm9yQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBmbG93QXdhcmVNYXJnaW5FbmRGb3JDaGls
ZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGZsb3dBd2FyZU1hcmdp
bkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0OwotICAgIExheW91dFVuaXQg
Zmxvd0F3YXJlTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKLSAg
ICBMYXlvdXRVbml0IGNyb3NzQXhpc01hcmdpbkV4dGVudEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQpIGNvbnN0OworICAgIExheW91dFVuaXQgZmxvd0F3YXJlTWFyZ2luU3RhcnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZU1hcmdpbkVu
ZEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIExheW91dFVuaXQgZmxvd0F3
YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CisgICAgTGF5
b3V0VW5pdCBmbG93QXdhcmVNYXJnaW5BZnRlckZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNv
bnN0OworICAgIExheW91dFVuaXQgY3Jvc3NBeGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNTY3JvbGxiYXJFeHRl
bnQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCBmbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKFJl
bmRlckJveCogY2hpbGQpIGNvbnN0OworICAgIExheW91dFBvaW50IGZsb3dBd2FyZUxvY2F0aW9u
Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAgICAgLy8gRklYTUU6IFN1cHBvcnRp
bmcgbGF5b3V0IGRlbHRhcy4KLSAgICB2b2lkIHNldEZsb3dBd2FyZUxvY2F0aW9uRm9yQ2hpbGQo
UmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIGFkanVzdEFs
aWdubWVudEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQpOwotICAgIEVBbGln
bkl0ZW1zIGFsaWdubWVudEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0OwotICAgIExh
eW91dFVuaXQgbWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtYWluQXhpc1Njcm9sbGJhckV4dGVudEZv
ckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0OwotICAgIExheW91dFVuaXQgcHJlZmVycmVk
TWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgYm9vbCBoYXNJ
bmZpbml0ZUxpbmVMZW5ndGgpOworICAgIHZvaWQgc2V0Rmxvd0F3YXJlTG9jYXRpb25Gb3JDaGls
ZChSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgYWRqdXN0
QWxpZ25tZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCk7CisgICAgRUFs
aWduSXRlbXMgYWxpZ25tZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CisgICAg
TGF5b3V0VW5pdCBtYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChSZW5kZXJC
b3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1haW5BeGlzU2Nyb2xsYmFyRXh0ZW50
Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBwcmVmZXJy
ZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBib29sIGhh
c0luZmluaXRlTGluZUxlbmd0aCk7CiAKICAgICB2b2lkIGxheW91dEZsZXhJdGVtcyhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIFZlY3RvcjxMaW5lQ29udGV4dD4mKTsKICAgICBMYXlvdXRVbml0IGF1
dG9NYXJnaW5PZmZzZXRJbk1haW5BeGlzKGNvbnN0IE9yZGVyZWRGbGV4SXRlbUxpc3QmLCBMYXlv
dXRVbml0JiBhdmFpbGFibGVGcmVlU3BhY2UpOwotICAgIHZvaWQgdXBkYXRlQXV0b01hcmdpbnNJ
bk1haW5BeGlzKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgYXV0b01hcmdpbk9mZnNldCk7
Ci0gICAgYm9vbCBoYXNBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKFJlbmRlckJveCogY2hpbGQpIGNv
bnN0OwotICAgIGJvb2wgdXBkYXRlQXV0b01hcmdpbnNJbkNyb3NzQXhpcyhSZW5kZXJCb3gqIGNo
aWxkLCBMYXlvdXRVbml0IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlKTsKKyAgICB2b2lkIHVwZGF0
ZUF1dG9NYXJnaW5zSW5NYWluQXhpcyhSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGF1dG9N
YXJnaW5PZmZzZXQpOworICAgIGJvb2wgaGFzQXV0b01hcmdpbnNJbkNyb3NzQXhpcyhSZW5kZXJC
b3gmIGNoaWxkKSBjb25zdDsKKyAgICBib29sIHVwZGF0ZUF1dG9NYXJnaW5zSW5Dcm9zc0F4aXMo
UmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSk7CiAg
ICAgdm9pZCByZXBvc2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVtcyhWZWN0b3I8
TGluZUNvbnRleHQ+Jik7CiAgICAgTGF5b3V0VW5pdCBjbGllbnRMb2dpY2FsQm90dG9tQWZ0ZXJS
ZXBvc2l0aW9uaW5nKCk7CiAgICAgdm9pZCBhcHBlbmRDaGlsZEZyYW1lUmVjdHMoQ2hpbGRGcmFt
ZVJlY3RzJik7CiAgICAgdm9pZCByZXBhaW50Q2hpbGRyZW5EdXJpbmdMYXlvdXRJZk1vdmVkKGNv
bnN0IENoaWxkRnJhbWVSZWN0cyYpOwogCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVBbGlnbm1l
bnRTcGFjZUZvckNoaWxkKExheW91dFVuaXQgbGluZUNyb3NzQXhpc0V4dGVudCwgUmVuZGVyQm94
Kik7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5Cb3hBc2NlbnRGb3JDaGlsZChSZW5kZXJCb3gqKTsK
KyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGQoTGF5b3V0VW5p
dCBsaW5lQ3Jvc3NBeGlzRXh0ZW50LCBSZW5kZXJCb3gmKTsKKyAgICBMYXlvdXRVbml0IG1hcmdp
bkJveEFzY2VudEZvckNoaWxkKFJlbmRlckJveCYpOwogCiAgICAgTGF5b3V0VW5pdCBjb21wdXRl
Q2hpbGRNYXJnaW5WYWx1ZShjb25zdCBMZW5ndGgmIG1hcmdpbik7CiAgICAgdm9pZCBjb21wdXRl
TWFpbkF4aXNQcmVmZXJyZWRTaXplcyhPcmRlckhhc2hTZXQmKTsKLSAgICBMYXlvdXRVbml0IGFk
anVzdENoaWxkU2l6ZUZvck1pbkFuZE1heChSZW5kZXJCb3gqLCBMYXlvdXRVbml0IGNoaWxkU2l6
ZSk7CisgICAgTGF5b3V0VW5pdCBhZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgoUmVuZGVyQm94
JiwgTGF5b3V0VW5pdCBjaGlsZFNpemUpOwogICAgIGJvb2wgY29tcHV0ZU5leHRGbGV4TGluZShP
cmRlcmVkRmxleEl0ZW1MaXN0JiBvcmRlcmVkQ2hpbGRyZW4sIExheW91dFVuaXQmIHByZWZlcnJl
ZE1haW5BeGlzRXh0ZW50LCBkb3VibGUmIHRvdGFsRmxleEdyb3csIGRvdWJsZSYgdG90YWxXZWln
aHRlZEZsZXhTaHJpbmssIExheW91dFVuaXQmIG1pbk1heEFwcGxpZWRNYWluQXhpc0V4dGVudCwg
Ym9vbCYgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKTsKIAogICAgIGJvb2wgcmVzb2x2ZUZsZXhpYmxl
TGVuZ3RocyhGbGV4U2lnbiwgY29uc3QgT3JkZXJlZEZsZXhJdGVtTGlzdCYsIExheW91dFVuaXQm
IGF2YWlsYWJsZUZyZWVTcGFjZSwgZG91YmxlJiB0b3RhbEZsZXhHcm93LCBkb3VibGUmIHRvdGFs
V2VpZ2h0ZWRGbGV4U2hyaW5rLCBJbmZsZXhpYmxlRmxleEl0ZW1TaXplJiwgVmVjdG9yPExheW91
dFVuaXQ+JiBjaGlsZFNpemVzLCBib29sIGhhc0luZmluaXRlTGluZUxlbmd0aCk7CiAgICAgdm9p
ZCBmcmVlemVWaW9sYXRpb25zKGNvbnN0IFZlY3RvcjxWaW9sYXRpb24+JiwgTGF5b3V0VW5pdCYg
YXZhaWxhYmxlRnJlZVNwYWNlLCBkb3VibGUmIHRvdGFsRmxleEdyb3csIGRvdWJsZSYgdG90YWxX
ZWlnaHRlZEZsZXhTaHJpbmssIEluZmxleGlibGVGbGV4SXRlbVNpemUmLCBib29sIGhhc0luZmlu
aXRlTGluZUxlbmd0aCk7CiAKLSAgICB2b2lkIHJlc2V0QXV0b01hcmdpbnNBbmRMb2dpY2FsVG9w
SW5Dcm9zc0F4aXMoUmVuZGVyQm94Kik7Ci0gICAgYm9vbCBuZWVkVG9TdHJldGNoQ2hpbGQoUmVu
ZGVyQm94Kik7Ci0gICAgdm9pZCBzZXRMb2dpY2FsT3ZlcnJpZGVTaXplKFJlbmRlckJveCogY2hp
bGQsIExheW91dFVuaXQgY2hpbGRQcmVmZXJyZWRTaXplKTsKLSAgICB2b2lkIHByZXBhcmVDaGls
ZEZvclBvc2l0aW9uZWRMYXlvdXQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBtYWluQXhp
c09mZnNldCwgTGF5b3V0VW5pdCBjcm9zc0F4aXNPZmZzZXQsIFBvc2l0aW9uZWRMYXlvdXRNb2Rl
KTsKKyAgICB2b2lkIHJlc2V0QXV0b01hcmdpbnNBbmRMb2dpY2FsVG9wSW5Dcm9zc0F4aXMoUmVu
ZGVyQm94Jik7CisgICAgYm9vbCBuZWVkVG9TdHJldGNoQ2hpbGQoUmVuZGVyQm94Jik7CisgICAg
dm9pZCBzZXRMb2dpY2FsT3ZlcnJpZGVTaXplKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQg
Y2hpbGRQcmVmZXJyZWRTaXplKTsKKyAgICB2b2lkIHByZXBhcmVDaGlsZEZvclBvc2l0aW9uZWRM
YXlvdXQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBtYWluQXhpc09mZnNldCwgTGF5b3V0
VW5pdCBjcm9zc0F4aXNPZmZzZXQsIFBvc2l0aW9uZWRMYXlvdXRNb2RlKTsKICAgICBzaXplX3Qg
bnVtYmVyT2ZJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4oY29uc3QgT3JkZXJlZEZsZXhJdGVtTGlz
dCYpIGNvbnN0OwogICAgIHZvaWQgbGF5b3V0QW5kUGxhY2VDaGlsZHJlbihMYXlvdXRVbml0JiBj
cm9zc0F4aXNPZmZzZXQsIGNvbnN0IE9yZGVyZWRGbGV4SXRlbUxpc3QmLCBjb25zdCBWZWN0b3I8
TGF5b3V0VW5pdD4mIGNoaWxkU2l6ZXMsIExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIFZlY3RvcjxMaW5lQ29udGV4dD4mKTsKICAgICB2b2lkIGxh
eW91dENvbHVtblJldmVyc2UoY29uc3QgT3JkZXJlZEZsZXhJdGVtTGlzdCYsIExheW91dFVuaXQg
Y3Jvc3NBeGlzT2Zmc2V0LCBMYXlvdXRVbml0IGF2YWlsYWJsZUZyZWVTcGFjZSk7CiAgICAgdm9p
ZCBhbGlnbkZsZXhMaW5lcyhWZWN0b3I8TGluZUNvbnRleHQ+Jik7CiAgICAgdm9pZCBhbGlnbkNo
aWxkcmVuKGNvbnN0IFZlY3RvcjxMaW5lQ29udGV4dD4mKTsKLSAgICB2b2lkIGFwcGx5U3RyZXRj
aEFsaWdubWVudFRvQ2hpbGQoUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsaW5lQ3Jvc3NBeGlzRXh0
ZW50KTsKKyAgICB2b2lkIGFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGQoUmVuZGVyQm94Jiwg
TGF5b3V0VW5pdCBsaW5lQ3Jvc3NBeGlzRXh0ZW50KTsKICAgICB2b2lkIGZsaXBGb3JSaWdodFRv
TGVmdENvbHVtbigpOwogICAgIHZvaWQgZmxpcEZvcldyYXBSZXZlcnNlKGNvbnN0IFZlY3RvcjxM
aW5lQ29udGV4dD4mLCBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRnZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5j
cHAJKHJldmlzaW9uIDE1Nzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDkgKzE3Miw5IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6bGEKICAgICBpZiAocmVsYXlvdXRD
aGlsZHJlbikKICAgICAgICAgbV9mbG93VGhyZWFkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7CiAgICAgCi0gICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKG1fZmxvd1RocmVhZCwg
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKTsKKyAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoKm1f
Zmxvd1RocmVhZCwgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKTsKICAgICBtX2Zsb3dUaHJlYWQt
PmxheW91dElmTmVlZGVkKCk7Ci0gICAgZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNo
aWxkKG1fZmxvd1RocmVhZCk7CisgICAgZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNo
aWxkKCptX2Zsb3dUaHJlYWQpOwogICAgIAogICAgIHJldHVybiBtX2Zsb3dUaHJlYWQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lv
biAxNTc3ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2Myw3ICs0NjMsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxpbmVC
b3g6OmxpbmVTbmFwQWRqdXN0CiAgICAgcmV0dXJuIGxpbmVTbmFwQWRqdXN0bWVudChuZXdQYWdl
TG9naWNhbFRvcCAtIChibG9ja09mZnNldCArIGxpbmVUb3BXaXRoTGVhZGluZygpKSk7CiB9CiAK
LUdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6OmxpbmVTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNv
bnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCitHYXBSZWN0cyBSb290SW5saW5l
Qm94OjpsaW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91
dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZz
ZXRGcm9tUm9vdEJsb2NrLAogICAgIExheW91dFVuaXQgc2VsVG9wLCBMYXlvdXRVbml0IHNlbEhl
aWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBh
aW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUg
bGluZVN0YXRlID0gc2VsZWN0aW9uU3RhdGUoKTsKQEAgLTQ5OSw3ICs0OTksNyBAQCBHYXBSZWN0
cyBSb290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9uR2FwCiAgICAgICAgICAgICBpZiAoYm94LT5z
ZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgewogICAgICAg
ICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbFJlY3QobGFzdExvZ2ljYWxMZWZ0LCBzZWxUb3As
IGJveC0+bG9naWNhbExlZnQoKSAtIGxhc3RMb2dpY2FsTGVmdCwgc2VsSGVpZ2h0KTsKICAgICAg
ICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlKHJlbmRlcmVyKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBMYXlvdXRTaXplKG9mZnNldEZyb21Sb290
QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkpOwotICAgICAgICAg
ICAgICAgIExheW91dFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNp
Y2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVjdCk7CisgICAgICAg
ICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLmxvZ2ljYWxSZWN0VG9QaHlz
aWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgbG9naWNhbFJlY3QpOwogICAgICAg
ICAgICAgICAgIGlmIChpc1ByZXZpb3VzQm94U2VsZWN0ZWQgJiYgZ2FwUmVjdC53aWR0aCgpID4g
MCAmJiBnYXBSZWN0LmhlaWdodCgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocGFp
bnRJbmZvICYmIGJveC0+cGFyZW50KCktPnJlbmRlcmVyKCkuc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEluZm8tPmNvbnRleHQt
PmZpbGxSZWN0KGdhcFJlY3QsIGJveC0+cGFyZW50KCktPnJlbmRlcmVyKCkuc2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCksIGJveC0+cGFyZW50KCktPnJlbmRlcmVyKCkuc3R5bGUoKS0+Y29sb3JT
cGFjZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAko
cmV2aXNpb24gMTU3Nzg5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHB1YmxpYzoKICAgICBJbmxp
bmVCb3gqIGZpcnN0U2VsZWN0ZWRCb3goKTsKICAgICBJbmxpbmVCb3gqIGxhc3RTZWxlY3RlZEJv
eCgpOwogCi0gICAgR2FwUmVjdHMgbGluZVNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3Qg
TGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICBHYXBSZWN0cyBsaW5lU2VsZWN0
aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2Nr
LAogICAgICAgICBMYXlvdXRVbml0IHNlbFRvcCwgTGF5b3V0VW5pdCBzZWxIZWlnaHQsIGNvbnN0
IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQYWludEluZm8qKTsKIAogICAg
IEludFJlY3QgY29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNp
Z25lZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0
OwpAQCAtMTQyLDEzICsxNDIsMTMgQEAgcHVibGljOgogICAgIElubGluZUJveCogY2xvc2VzdExl
YWZDaGlsZEZvclBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBvbmx5RWRpdGFibGVMZWF2ZXMp
OwogICAgIElubGluZUJveCogY2xvc2VzdExlYWZDaGlsZEZvckxvZ2ljYWxMZWZ0UG9zaXRpb24o
aW50LCBib29sIG9ubHlFZGl0YWJsZUxlYXZlcyA9IGZhbHNlKTsKIAotICAgIHZvaWQgYXBwZW5k
RmxvYXQoUmVuZGVyQm94KiBmbG9hdGluZ0JveCkKKyAgICB2b2lkIGFwcGVuZEZsb2F0KFJlbmRl
ckJveCYgZmxvYXRpbmdCb3gpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRGlydHkoKSk7CiAg
ICAgICAgIGlmIChtX2Zsb2F0cykKLSAgICAgICAgICAgIG1fZmxvYXRzLT5hcHBlbmQoZmxvYXRp
bmdCb3gpOworICAgICAgICAgICAgbV9mbG9hdHMtPmFwcGVuZCgmZmxvYXRpbmdCb3gpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2Zsb2F0cz0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZW5k
ZXJCb3gqPigxLCBmbG9hdGluZ0JveCkpOworICAgICAgICAgICAgbV9mbG9hdHMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPFJlbmRlckJveCo+KDEsICZmbG9hdGluZ0JveCkpOwogICAgIH0KIAogICAg
IFZlY3RvcjxSZW5kZXJCb3gqPiogZmxvYXRzUHRyKCkgeyBBU1NFUlQoIWlzRGlydHkoKSk7IHJl
dHVybiBtX2Zsb2F0cy5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCShyZXZpc2lvbiAxNTc3ODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNF
bmFibGVkRm9yKGNvbnMKIAogdm9pZCBTaGFwZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JD
b250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxvdyogY29udGFpbmluZ0Jsb2Nr
LCBjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQogewotICAgIExheW91dFVuaXQgc2hhcGVUb3AgPSBj
b250YWluaW5nQmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgKyBzdGQ6
Om1heChMYXlvdXRVbml0KCksIGNvbnRhaW5pbmdCbG9jay0+bWFyZ2luQmVmb3JlRm9yQ2hpbGQo
bV9yZW5kZXJlcikpOworICAgIExheW91dFVuaXQgc2hhcGVUb3AgPSBjb250YWluaW5nQmxvY2st
PmxvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgKyBzdGQ6Om1heChMYXlvdXRVbml0
KCksIGNvbnRhaW5pbmdCbG9jay0+bWFyZ2luQmVmb3JlRm9yQ2hpbGQoKm1fcmVuZGVyZXIpKTsK
ICAgICBMYXlvdXRVbml0IGxpbmVUb3BJblNoYXBlQ29vcmRpbmF0ZXMgPSBsaW5lVG9wIC0gc2hh
cGVUb3AgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7CiAKICAgICBpZiAoc2hhcGVTaXplRGlydHkoKSB8
fCBtX2xpbmVUb3AgIT0gbGluZVRvcEluU2hhcGVDb29yZGluYXRlcyB8fCBtX2xpbmVIZWlnaHQg
IT0gbGluZUhlaWdodCkgewpAQCAtNjksMTAgKzY5LDEwIEBAIHZvaWQgU2hhcGVPdXRzaWRlSW5m
bzo6dXBkYXRlRGVsdGFzRm9yQ28KICAgICAgICAgaWYgKGxpbmVPdmVybGFwc1NoYXBlQm91bmRz
KCkpIHsKICAgICAgICAgICAgIFNlZ21lbnRMaXN0IHNlZ21lbnRzID0gY29tcHV0ZVNlZ21lbnRz
Rm9yTGluZShsaW5lVG9wSW5TaGFwZUNvb3JkaW5hdGVzLCBsaW5lSGVpZ2h0KTsKICAgICAgICAg
ICAgIGlmIChzZWdtZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJh
d0xlZnRNYXJnaW5Cb3hEZWx0YSA9IHNlZ21lbnRzLmZpcnN0KCkubG9naWNhbExlZnQgKyBjb250
YWluaW5nQmxvY2stPm1hcmdpblN0YXJ0Rm9yQ2hpbGQobV9yZW5kZXJlcik7CisgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCByYXdMZWZ0TWFyZ2luQm94RGVsdGEgPSBzZWdtZW50cy5maXJzdCgp
LmxvZ2ljYWxMZWZ0ICsgY29udGFpbmluZ0Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxkKCptX3Jl
bmRlcmVyKTsKICAgICAgICAgICAgICAgICBtX2xlZnRNYXJnaW5Cb3hEZWx0YSA9IGNsYW1wVG88
TGF5b3V0VW5pdD4ocmF3TGVmdE1hcmdpbkJveERlbHRhLCBMYXlvdXRVbml0KCksIGZsb2F0TWFy
Z2luQm94V2lkdGgpOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByYXdSaWdodE1hcmdp
bkJveERlbHRhID0gc2VnbWVudHMubGFzdCgpLmxvZ2ljYWxSaWdodCAtIGNvbnRhaW5pbmdCbG9j
ay0+bG9naWNhbFdpZHRoRm9yQ2hpbGQobV9yZW5kZXJlcikgLSBjb250YWluaW5nQmxvY2stPm1h
cmdpbkVuZEZvckNoaWxkKG1fcmVuZGVyZXIpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQg
cmF3UmlnaHRNYXJnaW5Cb3hEZWx0YSA9IHNlZ21lbnRzLmxhc3QoKS5sb2dpY2FsUmlnaHQgLSBj
b250YWluaW5nQmxvY2stPmxvZ2ljYWxXaWR0aEZvckNoaWxkKCptX3JlbmRlcmVyKSAtIGNvbnRh
aW5pbmdCbG9jay0+bWFyZ2luRW5kRm9yQ2hpbGQoKm1fcmVuZGVyZXIpOwogICAgICAgICAgICAg
ICAgIG1fcmlnaHRNYXJnaW5Cb3hEZWx0YSA9IGNsYW1wVG88TGF5b3V0VW5pdD4ocmF3UmlnaHRN
YXJnaW5Cb3hEZWx0YSwgLWZsb2F0TWFyZ2luQm94V2lkdGgsIExheW91dFVuaXQoKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAxNTc3ODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsMTAgKzE3OCwxMCBAQCBMYXlvdXRVbml0IFJlbmRlclNWR1Jvb3Q6OmNv
bXB1dGVSZXBsYWNlCiAgICAgICAgICAgICBBU1NFUlQoY2IpOwogICAgICAgICAgICAgd2hpbGUg
KGNiLT5pc0Fub255bW91cygpICYmICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAg
ICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgICAgICBjYi0+YWRk
UGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxSZW5kZXJTVkdSb290Kj4odGhpcykp
OworICAgICAgICAgICAgICAgIGNiLT5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9j
YXN0PFJlbmRlclNWR1Jvb3QmPigqdGhpcykpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dChjb25zdF9jYXN0PFJlbmRlclNWR1Jvb3QqPih0aGlzKSk7CisgICAgICAgICAgICBSZW5kZXJC
bG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxSZW5kZXJTVkdS
b290Jj4oKnRoaXMpKTsKIAogICAgICAgICByZXR1cm4gcmVzb2x2ZUxlbmd0aEF0dHJpYnV0ZUZv
clNWRyhoZWlnaHQsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBhZGRpbmcpLCAmdmll
dygpKTsKICAgICB9CkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpwYWlu
dFJlcGxhY2VkKFBhaW50SQogCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OndpbGxCZURlc3Ryb3llZCgp
CiB7Ci0gICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KGNvbnN0
X2Nhc3Q8UmVuZGVyU1ZHUm9vdCo+KHRoaXMpKTsKKyAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVy
Y2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxSZW5kZXJTVkdSb290Jj4oKnRoaXMpKTsK
IAogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQodGhpcyk7CiAgICAgUmVu
ZGVyUmVwbGFjZWQ6OndpbGxCZURlc3Ryb3llZCgpOwo=
</data>
<flag name="review"
          id="237463"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>