<?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>3710</bug_id>
          
          <creation_ts>2005-06-25 12:14:13 -0700</creation_ts>
          <short_desc>display a split caret when on boundary between LTR and RTL text</short_desc>
          <delta_ts>2023-05-03 13:40:12 -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>HTML Editing</component>
          <version>412</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>3729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>emacemac7</cc>
    
    <cc>enrica</cc>
    
    <cc>fantasai.bugs</cc>
    
    <cc>ian</cc>
    
    <cc>mitz</cc>
    
    <cc>playmobil</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>13144</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-25 12:14:13 -0700</bug_when>
    <thetext>Like other editing systems on Mac OS X, WebKit should display a split caret when on the boundary 
between a LTR and RTL run.

The high caret is the &quot;primary caret&quot; and corresponds to the place the caret would be for the base writing 
direction. The low caret is the &quot;secondary caret&quot; and corresponds to the place the caret would be for the 
other writing direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13145</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-25 12:14:34 -0700</bug_when>
    <thetext>I&apos;ve got a patch in the works that implements this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13146</commentid>
    <comment_count>2</comment_count>
      <attachid>2644</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-25 12:44:21 -0700</bug_when>
    <thetext>Created attachment 2644
First cut at a fix; some wrong concepts, needs a lot of work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13267</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-26 17:15:14 -0700</bug_when>
    <thetext>Bug 3729 talks about a related issue, making the right and left arrow keys do the right thing in RTL text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50093</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-07-16 15:50:57 -0700</bug_when>
    <thetext>I started working on this bug and on bug 3729 (starting with the latter), ressurrecting bits from Darin&apos;s patch. I am changing inlineBox() so that for &quot;primary&quot; it will always return the box whose direction is the same as the base direction, for both edges. That seems to work well. I also think that as the &quot;base direction&quot; you should take the direction of the block, which is not necessarily the same as the RenderText&apos;s direction, but I still haven&apos;t changed that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17632</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-03-24 04:42:05 -0700</bug_when>
    <thetext>Regressions are P1.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11059</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-05-04 22:17:45 -0700</bug_when>
    <thetext>&lt;rdar://problem/5183684&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363696</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-07 17:03:47 -0800</bug_when>
    <thetext>The bug the 22386 is Windows counterpart of this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2644</attachid>
            <date>2005-06-25 12:44:21 -0700</date>
            <delta_ts>2010-06-11 10:45:31 -0700</delta_ts>
            <desc>First cut at a fix; some wrong concepts, needs a lot of work</desc>
            <filename>SplitCaretPatch.txt</filename>
            <type>text/plain</type>
            <size>56522</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxl
Y3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC11
IC1wIC1yMS4yIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0g
a2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3
OjIxOjQ3IC0wMDAwCTEuMgorKysga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1h
bmQuY3BwCTI1IEp1biAyMDA1IDE5OjI4OjI1IC0wMDAwCkBAIC01ODMsNyArNTgzLDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptb3ZlTm9kZXNBZgogICAgIGlmICghc3RhcnRCbG9j
ay0+cmVuZGVyZXIoKSB8fCAhc3RhcnRCbG9jay0+cmVuZGVyZXIoKS0+Zmlyc3RDaGlsZCgpKSB7
CiAgICAgICAgIHJlbW92ZU5vZGUoc3RhcnRCbG9jayk7CiAgICAgICAgIGRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dCgpOwotICAgICAgICBpZiAocmVmTm9kZS0+cmVuZGVyZXIoKSAmJiByZWZOb2Rl
LT5yZW5kZXJlcigpLT5pbmxpbmVCb3goKSAmJiByZWZOb2RlLT5yZW5kZXJlcigpLT5pbmxpbmVC
b3goKS0+bmV4dE9uTGluZUV4aXN0cygpKSB7CisgICAgICAgIGlmIChyZWZOb2RlLT5yZW5kZXJl
cigpICYmIHJlZk5vZGUtPnJlbmRlcmVyKCktPmlubGluZUJveCgwLCBVUFNUUkVBTSwgZmFsc2Up
ICYmIHJlZk5vZGUtPnJlbmRlcmVyKCktPmlubGluZUJveCgwLCBVUFNUUkVBTSwgZmFsc2UpLT5u
ZXh0T25MaW5lRXhpc3RzKCkpIHsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihjcmVhdGVC
cmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIHJlZk5vZGUpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDoga2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS44OQpkaWZmIC1wIC11IC11IC1wIC1yMS44OSBraHRtbC9lZGl0aW5nL3NlbGVjdGlv
bi5jcHAKLS0tIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo0
OCAtMDAwMAkxLjg5CisrKyBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAJMjUgSnVuIDIwMDUg
MTk6Mjg6MjUgLTAwMDAKQEAgLTYyLDYgKzYyLDc5IEBAIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwog
CiBuYW1lc3BhY2Uga2h0bWwgewogCitzdGF0aWMgQ2FyZXRSZWN0cyBmdWxsSGVpZ2h0Q2FyZXRS
ZWN0cyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKK3sKKyAgICBRUmVjdCBoaWdoLCBsb3c7
CisKKyAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBwb3MuYWZmaW5pdHkoKTsKKworICAgIGlmIChp
c1N0YXJ0T2ZMaW5lKHBvcykgfHwgaXNFbmRPZkxpbmUocG9zKSkgeworICAgICAgICAvLyBJZiB3
ZSdyZSBvbiBhIGxpbmUgYm91bmRhcnksIGNob29zZSBub2RlIGJhc2VkIG9uIGFmZmluaXR5Lgor
ICAgICAgICBQb3NpdGlvbiBwID0gYWZmaW5pdHkgPT0gVVBTVFJFQU0gPyBwb3MuZGVlcEVxdWl2
YWxlbnQoKSA6IHBvcy5kb3duc3RyZWFtRGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKHAu
aXNOb3ROdWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChwLm5vZGUoKS0+cmVuZGVyZXIoKSk7
CisgICAgICAgICAgICBoaWdoID0gcC5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChwLm9m
ZnNldCgpLCBhZmZpbml0eSwgZmFsc2UpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gR2V0IGJvdGggcmVjdHMgaW4gY2FzZSB3ZSdyZSBvbiBhIGJpZGlyZWN0aW9uYWwgYm91
bmRhcnkuCisgICAgICAgIFBvc2l0aW9uIHAgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAg
ICAgaWYgKHAuaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVy
ZXIgPSBwLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJlcik7
CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcC5vZmZzZXQoKTsKKyAgICAgICAgICAgIElubGlu
ZUJveCAqYm94ID0gcmVuZGVyZXItPmlubGluZUJveChvZmZzZXQsIGFmZmluaXR5LCBmYWxzZSk7
CisgICAgICAgICAgICBpZiAoYm94KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRpcmVj
dGlvbiBvZiB0aGUgYm94IGlzIHRoZSBzYW1lIGFzIHRoZSBiYXNlIHdyaXRpbmcgZGlyZWN0aW9u
LAorICAgICAgICAgICAgICAgIC8vIHRoZW4gdGhlIHByaW1hcnkgY2FyZXQgKGhpZ2gpIGlzIGdv
aW5nIHRvIGJlIGluIHRoZSBmaXJzdCBub2RlIGluIGRvY3VtZW50IG9yZGVyLgorICAgICAgICAg
ICAgICAgIC8vIElmIG5vdCwgdGhlbiB0aGUgcHJpbWFyeSBjYXJldCBjb3VsZCBiZSBpbiB0aGUg
c2Vjb25kIG5vZGUuCisgICAgICAgICAgICAgICAgUG9zaXRpb24gcGQgPSBwb3MuZG93bnN0cmVh
bURlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkg
PT0gcmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAg
IGhpZ2ggPSByZW5kZXJlci0+Y2FyZXRSZWN0KG9mZnNldCwgYWZmaW5pdHksIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgbG93ID0gcGQubm9kZSgpLT5yZW5kZXJlcigpLT5jYXJldFJlY3Qo
cGQub2Zmc2V0KCksIGFmZmluaXR5LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBoaWdoID0gcGQubm9kZSgpLT5yZW5kZXJlcigpLT5jYXJldFJl
Y3QocGQub2Zmc2V0KCksIGFmZmluaXR5LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGxv
dyA9IHJlbmRlcmVyLT5jYXJldFJlY3Qob2Zmc2V0LCBhZmZpbml0eSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQ2FyZXRS
ZWN0cyByZWN0czsKKworICAgIC8vIEdpdmVuIHR3byBmdWxsLWhlaWdodCBjYXJldCByZWN0cywg
Y29uc3RydWN0IGFuIGFwcHJvcHJpYXRlIHNwbGl0IGNhcmV0LgorICAgIGlmIChoaWdoID09IGxv
dyB8fCBsb3cuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlY3RzLmhpZ2ggPSBoaWdoOworICAgICAg
ICByZWN0cy5sb3cgPSBRUmVjdCgpOworICAgIH0gZWxzZSBpZiAoaGlnaC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgcmVjdHMuaGlnaCA9IGxvdzsKKyAgICAgICAgcmVjdHMubG93ID0gUVJlY3QoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICByZWN0cy5oaWdoID0gaGlnaDsKKyAgICAgICAgcmVjdHMu
bG93ID0gbG93OworICAgIH0KKworICAgIHJldHVybiByZWN0czsKK30KKworUVJlY3QgcHJpbWFy
eUNhcmV0UmVjdChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKK3sKKyAgICByZXR1cm4gZnVs
bEhlaWdodENhcmV0UmVjdHMocG9zKS5oaWdoOworfQorCitDYXJldFJlY3RzIGNhcmV0UmVjdHMo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MpCit7CisgICAgQ2FyZXRSZWN0cyByZWN0cyA9IGZ1
bGxIZWlnaHRDYXJldFJlY3RzKHBvcyk7CisKKyAgICBpZiAocmVjdHMuaGlnaC5pc1ZhbGlkKCkg
JiYgcmVjdHMubG93LmlzVmFsaWQoKSkgeworICAgICAgICAvLyBSb3VuZCB1cCBmb3IgdGhlIGhp
Z2ggY2FyZXQsIHJvdW5kIGRvd24gZm9yIHRoZSBsb3cgY2FyZXQuCisgICAgICAgIHJlY3RzLmhp
Z2guc2V0SGVpZ2h0KChyZWN0cy5oaWdoLmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICAgICAgcmVj
dHMubG93LnNldFkocmVjdHMubG93LnkoKSArIChyZWN0cy5sb3cuaGVpZ2h0KCkgKyAxKSAvIDIp
OworICAgICAgICByZWN0cy5sb3cuc2V0SGVpZ2h0KHJlY3RzLmxvdy5oZWlnaHQoKSAvIDIpOwor
ICAgIH0KKworICAgIHJldHVybiByZWN0czsKK30KKwogU2VsZWN0aW9uOjpTZWxlY3Rpb24oKQog
ewogICAgIGluaXQoRE9XTlNUUkVBTSk7CkBAIC0xMTYsNyArMTg5LDcgQEAgU2VsZWN0aW9uOjpT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZvKQogICAgIC8vIHJlbWFpbmluZyB3aGVuIHRoZSBj
YXJldCBpcyBwYWludGVkIGFuZCB0aGVuIG1vdmVzLAogICAgIC8vIGFuZCB0aGUgb2xkIHJlY3Rh
bmdsZSBuZWVkcyB0byBiZSByZXBhaW50ZWQuCiAgICAgaWYgKCFtX25lZWRzTGF5b3V0KSB7Ci0g
ICAgICAgIG1fY2FyZXRSZWN0ID0gby5tX2NhcmV0UmVjdDsKKyAgICAgICAgbV9jYXJldFJlY3Rz
ID0gby5tX2NhcmV0UmVjdHM7CiAgICAgICAgIG1fZXhwZWN0ZWRWaXNpYmxlUmVjdCA9IG8ubV9l
eHBlY3RlZFZpc2libGVSZWN0OwogICAgIH0KIH0KQEAgLTE1MSwxMyArMjI0LDMzIEBAIFNlbGVj
dGlvbiAmU2VsZWN0aW9uOjpvcGVyYXRvcj0oY29uc3QgU2UKICAgICAvLyByZW1haW5pbmcgd2hl
biB0aGUgY2FyZXQgaXMgcGFpbnRlZCBhbmQgdGhlbiBtb3ZlcywKICAgICAvLyBhbmQgdGhlIG9s
ZCByZWN0YW5nbGUgbmVlZHMgdG8gYmUgcmVwYWludGVkLgogICAgIGlmICghbV9uZWVkc0xheW91
dCkgewotICAgICAgICBtX2NhcmV0UmVjdCA9IG8ubV9jYXJldFJlY3Q7CisgICAgICAgIG1fY2Fy
ZXRSZWN0cyA9IG8ubV9jYXJldFJlY3RzOwogICAgICAgICBtX2V4cGVjdGVkVmlzaWJsZVJlY3Qg
PSBvLm1fZXhwZWN0ZWRWaXNpYmxlUmVjdDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuICp0aGlz
OwogfQogCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uOjp2aXNpYmxlQmFzZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpOworfQorCitW
aXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uOjp2aXNpYmxlRXh0ZW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KTsKK30KKworVmlzaWJs
ZVBvc2l0aW9uIFNlbGVjdGlvbjo6dmlzaWJsZVN0YXJ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpOworfQorCitWaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uOjp2aXNpYmxlRW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KTsKK30KKwogdm9pZCBTZWxlY3Rpb246Om1vdmVUbyhj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKIHsKICAgICAvLyBGSVhNRTogdXNlIGV4dGVudEFm
ZmluaXR5CkBAIC0yMzksNyArMzMyLDcgQEAgdm9pZCBTZWxlY3Rpb246OnNldE1vZGlmeUJpYXMo
RUFsdGVyIGFsdAogICAgIH0KIH0KIAotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbjo6bW9kaWZ5
RXh0ZW5kaW5nUmlnaHRGb3J3YXJkKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitWaXNp
YmxlUG9zaXRpb24gU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdGb3J3YXJkKEVUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX2V4dGVudCwg
bV9hZmZpbml0eSk7CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewpAQCAtMjU2LDEwICszNDks
MTAgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaQogICAgICAgICAg
ICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbihFWFRFTlQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExJTkVfQk9V
TkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZW5k
LCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUodmlzaWJsZUVuZCgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFHUkFQSF9CT1VOREFSWToK
LSAgICAgICAgICAgIHBvcyA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX2VuZCwg
bV9hZmZpbml0eSkpOworICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgodmlzaWJsZUVu
ZCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPQ1VNRU5UX0JPVU5EQVJZ
OgogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOwpAQCAtMjY5LDQ0ICszNjIs
NDMgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaQogICAgIHJldHVy
biBwb3M7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0
Rm9yd2FyZChFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIFNl
bGVjdGlvbjo6bW9kaWZ5TW92aW5nRm9yd2FyZChFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3M7CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkg
ewogICAgICAgICBjYXNlIENIQVJBQ1RFUjoKICAgICAgICAgICAgIGlmIChpc1JhbmdlKCkpIAot
ICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSk7
CisgICAgICAgICAgICAgICAgcG9zID0gdmlzaWJsZUVuZCgpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0
eSkubmV4dCgpOworICAgICAgICAgICAgICAgIHBvcyA9IHZpc2libGVFeHRlbnQoKS5uZXh0KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXT1JEOgotICAgICAgICAgICAgcG9z
ID0gbmV4dFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkp
KTsKKyAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24odmlzaWJsZUV4dGVudCgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFHUkFQSDoKLSAgICAgICAgICAg
IHBvcyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZm
aW5pdHkpLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRU5ELCBpc1JhbmdlKCkpKTsK
KyAgICAgICAgICAgIHBvcyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlvbih2aXNpYmxlRW5kKCksIHhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFTkQsIGlzUmFuZ2UoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTElORTogeworICAgICAgICBjYXNlIExJTkU6CiAgICAg
ICAgICAgICAvLyBkb3duLWFycm93aW5nIGZyb20gYSByYW5nZSBzZWxlY3Rpb24gdGhhdCBlbmRz
IGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgbmVlZHMKICAgICAgICAgICAgIC8vIHRvIGxlYXZlIHRo
ZSBzZWxlY3Rpb24gYXQgdGhhdCBsaW5lIHN0YXJ0IChubyBuZWVkIHRvIGNhbGwgbmV4dExpbmVQ
b3NpdGlvbiEpCi0gICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZm
aW5pdHkpOworICAgICAgICAgICAgcG9zID0gdmlzaWJsZUVuZCgpOwogICAgICAgICAgICAgaWYg
KCFpc1JhbmdlKCkgfHwgIWlzU3RhcnRPZkxpbmUocG9zKSkKICAgICAgICAgICAgICAgICBwb3Mg
PSBuZXh0TGluZVBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVO
RCwgaXNSYW5nZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBj
YXNlIExJTkVfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUoVmlzaWJsZVBv
c2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUo
dmlzaWJsZUVuZCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFHUkFQ
SF9CT1VOREFSWToKLSAgICAgICAgICAgIHBvcyA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3Np
dGlvbihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3Jh
cGgodmlzaWJsZUVuZCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPQ1VN
RU5UX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9z
aXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IGVuZE9mRG9jdW1l
bnQodmlzaWJsZUVuZCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4g
cG9zOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0
QmFja3dhcmQoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK1Zpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX2V4dGVudCwgbV9hZmZpbml0eSk7
CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewpAQCAtMzIzLDEwICs0MTUsMTAgQEAgVmlzaWJs
ZVBvc2l0aW9uIFNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaQogICAgICAgICAgICAgcG9zID0gcHJl
dmlvdXNMaW5lUG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhU
RU5UKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMSU5FX0JPVU5EQVJZOgot
ICAgICAgICAgICAgcG9zID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1f
YWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZMaW5lKHZpc2libGVTdGFydCgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFHUkFQSF9CT1VOREFSWToK
LSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc3Rh
cnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgodmlz
aWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9DVU1FTlRf
Qk9VTkRBUlk6CiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsKQEAgLTMz
NSwzMyArNDI3LDMzIEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGkK
ICAgICByZXR1cm4gcG9zOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uOjptb2RpZnlN
b3ZpbmdMZWZ0QmFja3dhcmQoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK1Zpc2libGVQ
b3NpdGlvbiBTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0JhY2t3YXJkKEVUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKICAgICBzd2l0Y2ggKGdy
YW51bGFyaXR5KSB7CiAgICAgICAgIGNhc2UgQ0hBUkFDVEVSOgogICAgICAgICAgICAgaWYgKGlz
UmFuZ2UoKSkgCi0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQs
IG1fYWZmaW5pdHkpOworICAgICAgICAgICAgICAgIHBvcyA9IHZpc2libGVTdGFydCgpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX2V4
dGVudCwgbV9hZmZpbml0eSkucHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBwb3MgPSB2aXNp
YmxlRXh0ZW50KCkucHJldmlvdXMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFdPUkQ6Ci0gICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihWaXNpYmxlUG9z
aXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3Vz
V29yZFBvc2l0aW9uKHZpc2libGVFeHRlbnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBQQVJBR1JBUEg6Ci0gICAgICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBv
c2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSwgeFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKFNUQVJULCBpc1JhbmdlKCkpKTsKKyAgICAgICAgICAgIHBvcyA9
IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24odmlzaWJsZVN0YXJ0KCksIHhQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbihTVEFSVCwgaXNSYW5nZSgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMSU5FOgotICAgICAgICAgICAgcG9zID0gcHJldmlvdXNMaW5lUG9zaXRp
b24oVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpLCB4UG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24oU1RBUlQsIGlzUmFuZ2UoKSkpOworICAgICAgICAgICAgcG9zID0gcHJl
dmlvdXNMaW5lUG9zaXRpb24odmlzaWJsZVN0YXJ0KCksIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihTVEFSVCwgaXNSYW5nZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBMSU5FX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9zID0gc3RhcnRPZkxpbmUoVmlzaWJs
ZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0
T2ZMaW5lKHZpc2libGVTdGFydCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFBBUkFHUkFQSF9CT1VOREFSWToKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
VmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9
IHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRE9DVU1FTlRfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBzdGFydE9m
RG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAg
ICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVudCh2aXNpYmxlU3RhcnQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgcmV0dXJuIHBvczsKQEAgLTM3MywyMCArNDY1LDIwIEBAIGJvb2wg
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyIGFsdGVyLCBFRGkKIAogICAgIFZpc2libGVQb3NpdGlv
biBwb3M7CiAgICAgc3dpdGNoIChkaXIpIHsKLSAgICAgICAgLy8gRURJVCBGSVhNRTogVGhlc2Ug
bmVlZCB0byBoYW5kbGUgYmlkaQorICAgICAgICAvLyBFRElUIEZJWE1FOiBOZWVkIHRvIGltcGxl
bWVudCB0aGUgcmlnaHQgYW5kIGxlZnQgZGlyZWN0aW9ucyBmb3IgYmlkaXJlY3Rpb25hbCB0ZXh0
LgogICAgICAgICBjYXNlIFJJR0hUOgogICAgICAgICBjYXNlIEZPUldBUkQ6CiAgICAgICAgICAg
ICBpZiAoYWx0ZXIgPT0gRVhURU5EKQotICAgICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVu
ZGluZ1JpZ2h0Rm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgcG9zID0gbW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcG9zID0gbW9kaWZ5TW92aW5nUmlnaHRGb3J3YXJkKGdyYW51bGFyaXR5KTsK
KyAgICAgICAgICAgICAgICBwb3MgPSBtb2RpZnlNb3ZpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExFRlQ6CiAgICAgICAgIGNhc2UgQkFD
S1dBUkQ6CiAgICAgICAgICAgICBpZiAoYWx0ZXIgPT0gRVhURU5EKQotICAgICAgICAgICAgICAg
IHBvcyA9IG1vZGlmeUV4dGVuZGluZ0xlZnRCYWNrd2FyZChncmFudWxhcml0eSk7CisgICAgICAg
ICAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVsYXJpdHkpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBvcyA9IG1vZGlmeU1vdmluZ0xlZnRCYWNr
d2FyZChncmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgcG9zID0gbW9kaWZ5TW92aW5nQmFj
a3dhcmQoZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDcs
MTcgKzQ5OSwxMCBAQCBib29sIFNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlciBhbHRlciwgRURpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBi
ZXR0ZXI/CisvLyBGSVhNRTogTWF5YmUgYmFzZWxpbmUgd291bGQgYmUgYmV0dGVyIHRoYW4gaGFs
ZndheSB1cCB0aGUgbGluZS4KIHN0YXRpYyBib29sIGNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRp
b24gJmMsIGludCAmeSkKIHsKLSAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIE5vZGVJbXBsICpuID0gcC5ub2RlKCk7Ci0gICAgaWYgKCFuKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0ICpyID0gcC5ub2RlKCktPnJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUVJlY3QgcmVjdCA9IHItPmNhcmV0
UmVjdChwLm9mZnNldCgpKTsKKyAgICBRUmVjdCByZWN0ID0gcHJpbWFyeUNhcmV0UmVjdChjKTsK
ICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB5ID0g
cmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMjsKQEAgLTQ0MSwxMSArNTI2LDExIEBAIGJvb2wg
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyIGFsdGVyLCBpbnQKICAgICBpbnQgeFBvcyA9IDA7CiAg
ICAgc3dpdGNoIChhbHRlcikgewogICAgICAgICBjYXNlIE1PVkU6Ci0gICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24odXAgPyBtX3N0YXJ0IDogbV9lbmQsIG1fYWZmaW5pdHkpOworICAg
ICAgICAgICAgcG9zID0gdXAgPyB2aXNpYmxlU3RhcnQoKSA6IHZpc2libGVFbmQoKTsKICAgICAg
ICAgICAgIHhQb3MgPSB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24odXAgPyBTVEFSVCA6
IEVORCwgaXNSYW5nZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVYVEVO
RDoKLSAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0
eSk7CisgICAgICAgICAgICBwb3MgPSB2aXNpYmxlRXh0ZW50KCk7CiAgICAgICAgICAgICB4UG9z
ID0geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CkBAIC01MDEsNDYgKzU4NiwzNyBAQCBib29sIFNlbGVjdGlvbjo6ZXhwYW5k
VXNpbmdHcmFudWxhcml0eShFCiAKIGludCBTZWxlY3Rpb246OnhQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5cGUsIGJvb2wgcmVjYWxjKSBjb25zdAogewotICAg
IGludCB4ID0gMDsKLQogICAgIGlmIChpc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0KLSAg
ICBQb3NpdGlvbiBwb3M7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgU1RBUlQ6
Ci0gICAgICAgICAgICBwb3MgPSBtX3N0YXJ0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU5EOgotICAgICAgICAgICAgcG9zID0gbV9lbmQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCQVNFOgotICAgICAgICAgICAgcG9zID0gbV9iYXNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVhURU5UOgotICAgICAgICAgICAgcG9zID0gbV9leHRl
bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHJldHVybiAwOwogCi0gICAg
S0hUTUxQYXJ0ICpwYXJ0ID0gcG9zLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpOworICAg
IEtIVE1MUGFydCAqcGFydCA9IG1fc3RhcnQubm9kZSgpLT5nZXREb2N1bWVudCgpLT5wYXJ0KCk7
CiAgICAgaWYgKCFwYXJ0KQotICAgICAgICByZXR1cm4geDsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIAorICAgIGludCB4OworCiAgICAgaWYgKHJlY2FsYyB8fCBwYXJ0LT54UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24oKSA9PSBLSFRNTFBhcnQ6Ok5vWFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uKSB7Ci0gICAgICAgIHN3aXRjaCAobV9hZmZpbml0eSkgewotICAgICAgICAg
ICAgY2FzZSBET1dOU1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlv
bihwb3MsIG1fYWZmaW5pdHkpLmRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgpOworICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgU1RBUlQ6CisgICAgICAgICAgICAgICAgcG9zID0gdmlzaWJsZVN0YXJ0KCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVORDoKKyAgICAgICAgICAgICAg
ICBwb3MgPSB2aXNpYmxlRW5kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJBU0U6CisgICAgICAgICAgICAgICAgcG9zID0gdmlzaWJsZUJhc2UoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVVBTVFJFQU06Ci0gICAgICAgICAg
ICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgbV9hZmZpbml0eSkuZGVlcEVxdWl2YWxl
bnQoKTsKKyAgICAgICAgICAgIGNhc2UgRVhURU5UOgorICAgICAgICAgICAgICAgIHBvcyA9IHZp
c2libGVFeHRlbnQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICB4ID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQoKSwgbV9h
ZmZpbml0eSkueCgpOworICAgICAgICB4ID0gcHJpbWFyeUNhcmV0UmVjdChwb3MpLngoKTsKICAg
ICAgICAgcGFydC0+c2V0WFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKHgpOwotICAgIH0K
LSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICB4ID0gcGFydC0+eFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgfQorCiAgICAgcmV0dXJuIHg7CiB9CiAKQEAgLTY2
OCw2MCArNzQ0LDM1IEBAIFNoYXJlZFB0cjxSYW5nZUltcGw+IFNlbGVjdGlvbjo6dG9SYW5nZSgK
IHZvaWQgU2VsZWN0aW9uOjpsYXlvdXQoKQogewogICAgIGlmIChpc05vbmUoKSB8fCAhbV9zdGFy
dC5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9lbmQubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsK
LSAgICAgICAgbV9jYXJldFJlY3QgPSBRUmVjdCgpOworICAgICAgICBtX2NhcmV0UmVjdHMgPSBD
YXJldFJlY3RzKCk7CiAgICAgICAgIG1fZXhwZWN0ZWRWaXNpYmxlUmVjdCA9IFFSZWN0KCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX3N0YXJ0Lm5vZGUoKS0+Z2V0RG9jdW1lbnQo
KS0+dXBkYXRlUmVuZGVyaW5nKCk7Ci0gICAgICAgIAorCiAgICAgaWYgKGlzQ2FyZXQoKSkgewot
ICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBzd2l0Y2ggKG1fYWZmaW5p
dHkpIHsKLSAgICAgICAgICAgIGNhc2UgRE9XTlNUUkVBTToKLSAgICAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkuZG93bnN0cmVhbURlZXBFcXVp
dmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVQU1RS
RUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2Fm
ZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChw
b3Mubm9kZSgpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLm5v
ZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQoKSwgbV9hZmZpbml0eSk7Ci0g
ICAgICAgICAgICBtX2V4cGVjdGVkVmlzaWJsZVJlY3QgPSBtX2NhcmV0UmVjdDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gUVJlY3QoKTsKLSAg
ICAgICAgICAgIG1fZXhwZWN0ZWRWaXNpYmxlUmVjdCA9IFFSZWN0KCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSB7CisgICAgICAgIG1fY2FyZXRSZWN0cyA9IGtodG1sOjpjYXJldFJlY3Rz
KHZpc2libGVTdGFydCgpKTsKKyAgICAgICAgbV9leHBlY3RlZFZpc2libGVSZWN0ID0gbV9jYXJl
dFJlY3RzLmhpZ2g7CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2FsY3VsYXRlIHdoaWNoIHBv
c2l0aW9uIHRvIHVzZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBiYXNlIGlzIHRoZSBzdGFydC4KICAg
ICAgICAgLy8gV2Ugd2FudCB0aGUgcG9zaXRpb24sIHN0YXJ0IG9yIGVuZCwgdGhhdCB3YXMgY2Fs
Y3VsYXRlZCB1c2luZyB0aGUgZXh0ZW50LiAKICAgICAgICAgLy8gVGhpcyBtYWtlcyB0aGUgc2Vs
ZWN0aW9uIGZvbGxvdyB0aGUgZXh0ZW50IHBvc2l0aW9uIHdoaWxlIHNjcm9sbGluZyBhcyBhIAog
ICAgICAgICAvLyByZXN1bHQgb2YgYXJyb3cgbmF2aWdhdGlvbi4gCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIE5vdGU6IG5vIG5lZWQgdG8gZ2V0IGFkZGl0aW9uYWwgaGVscCBmcm9tIFZpc2libGVQ
b3NpdGlvbi4gVGhlIG1fc3RhcnQgYW5kCi0gICAgICAgIC8vIG1fZW5kIHBvc2l0aW9ucyBzaG91
bGQgYWxyZWFkeSBiZSB2aXNpYmxlLCBhbmQgd2UncmUgb25seSBpbnRlcmVzdGVkIGluIAotICAg
ICAgICAvLyBhIHJlY3RhbmdsZSBmb3IgbV9leHBlY3RlZFZpc2libGVSZWN0LCBoZW5jZSBhZmZp
bml0eSBpcyBub3QgYSBmYWN0b3IKLSAgICAgICAgLy8gbGlrZSBpdCBpcyB3aGVuIGRyYXdpbmcg
YSBjYXJldC4KLSAgICAgICAgLy8KLSAgICAgICAgUG9zaXRpb24gcG9zID0gbV9iYXNlSXNTdGFy
dCA/IG1fZW5kIDogbV9zdGFydDsKLSAgICAgICAgQVNTRVJUKHBvcy5ub2RlKCktPnJlbmRlcmVy
KCkpOyAKLSAgICAgICAgbV9leHBlY3RlZFZpc2libGVSZWN0ID0gcG9zLm5vZGUoKS0+cmVuZGVy
ZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQoKSwgbV9hZmZpbml0eSk7Ci0gICAgICAgIG1fY2Fy
ZXRSZWN0ID0gUVJlY3QoKTsKKyAgICAgICAgbV9leHBlY3RlZFZpc2libGVSZWN0ID0gcHJpbWFy
eUNhcmV0UmVjdChtX2Jhc2VJc1N0YXJ0ID8gdmlzaWJsZUVuZCgpIDogdmlzaWJsZVN0YXJ0KCkp
OworICAgICAgICBtX2NhcmV0UmVjdHMgPSBDYXJldFJlY3RzKCk7CiAgICAgfQogCiAgICAgbV9u
ZWVkc0xheW91dCA9IGZhbHNlOwogfQogCi1RUmVjdCBTZWxlY3Rpb246OmNhcmV0UmVjdCgpIGNv
bnN0CitDYXJldFJlY3RzIFNlbGVjdGlvbjo6Y2FyZXRSZWN0cygpIGNvbnN0CiB7CiAgICAgaWYg
KG1fbmVlZHNMYXlvdXQpIHsKICAgICAgICAgY29uc3RfY2FzdDxTZWxlY3Rpb24gKj4odGhpcykt
PmxheW91dCgpOwogICAgIH0KIAotICAgIHJldHVybiBtX2NhcmV0UmVjdDsKKyAgICByZXR1cm4g
bV9jYXJldFJlY3RzOwogfQogCiBRUmVjdCBTZWxlY3Rpb246OmV4cGVjdGVkVmlzaWJsZVJlY3Qo
KSBjb25zdApAQCAtNzMzLDEzICs3ODQsMTYgQEAgUVJlY3QgU2VsZWN0aW9uOjpleHBlY3RlZFZp
c2libGVSZWN0KCkgYwogICAgIHJldHVybiBtX2V4cGVjdGVkVmlzaWJsZVJlY3Q7CiB9CiAKLVFS
ZWN0IFNlbGVjdGlvbjo6Y2FyZXRSZXBhaW50UmVjdCgpIGNvbnN0CitDYXJldFJlY3RzIFNlbGVj
dGlvbjo6Y2FyZXRSZXBhaW50UmVjdHMoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBBZGQgb25l
IHBpeGVsIG9mIHNsb3Agb24gZWFjaCBzaWRlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWF2ZSBi
ZWhpbmQgYXJ0aWZhY3RzLgotICAgIFFSZWN0IHIgPSBjYXJldFJlY3QoKTsKLSAgICBpZiAoci5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBRUmVjdCgpOwotICAgIHJldHVybiBRUmVjdChyLmxl
ZnQoKSAtIDEsIHIudG9wKCkgLSAxLCByLndpZHRoKCkgKyAyLCByLmhlaWdodCgpICsgMik7Cisg
ICAgLy8gRklYTUU6IEFkZHMgb25lIHBpeGVsIG9mIHNsb3Agb24gZWFjaCBzaWRlIHRvIG1ha2Ug
c3VyZSB3ZSBkb24ndCBsZWF2ZSBiZWhpbmQgYXJ0aWZhY3RzLAorICAgIC8vIGJ1dCB0aGF0IHNo
b3VsZG4ndCBiZSBuZWNlc3Nhcnk7IGdldCByaWQgb2YgdGhpcyBzb21lIGRheS4KKyAgICBDYXJl
dFJlY3RzIHIgPSBjYXJldFJlY3RzKCk7CisgICAgaWYgKHIuaGlnaC5pc1ZhbGlkKCkpCisgICAg
ICAgIHIuaGlnaC5pbmZsYXRlKDEpOworICAgIGlmIChyLmxvdy5pc1ZhbGlkKCkpCisgICAgICAg
IHIubG93LmluZmxhdGUoMSk7CisgICAgcmV0dXJuIHI7CiB9CiAKIHZvaWQgU2VsZWN0aW9uOjpu
ZWVkc0NhcmV0UmVwYWludCgpCkBAIC03NTYsNyArODEwLDkgQEAgdm9pZCBTZWxlY3Rpb246Om5l
ZWRzQ2FyZXRSZXBhaW50KCkKIAogICAgIGlmIChtX25lZWRzTGF5b3V0KSB7CiAgICAgICAgIC8v
IHJlcGFpbnQgb2xkIHBvc2l0aW9uIGFuZCBjYWxjdWxhdGUgbmV3IHBvc2l0aW9uCi0gICAgICAg
IHYtPnVwZGF0ZUNvbnRlbnRzKGNhcmV0UmVwYWludFJlY3QoKSwgZmFsc2UpOworICAgICAgICBD
YXJldFJlY3RzIHJlY3RzID0gY2FyZXRSZXBhaW50UmVjdHMoKTsKKyAgICAgICAgdi0+dXBkYXRl
Q29udGVudHMocmVjdHMuaGlnaCwgZmFsc2UpOworICAgICAgICB2LT51cGRhdGVDb250ZW50cyhy
ZWN0cy5sb3csIGZhbHNlKTsKICAgICAgICAgbGF5b3V0KCk7CiAgICAgICAgIAogICAgICAgICAv
LyBFRElUIEZJWE1FOiBUaGlzIGlzIGFuIHVuZm9ydHVuYXRlIGhhY2suCkBAIC03NzIsNyArODI4
LDkgQEAgdm9pZCBTZWxlY3Rpb246Om5lZWRzQ2FyZXRSZXBhaW50KCkKICAgICAgICAgLy8gYXdh
eSBhZnRlciBjbGlja2luZy4KICAgICAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiAgICAgfQot
ICAgIHYtPnVwZGF0ZUNvbnRlbnRzKGNhcmV0UmVwYWludFJlY3QoKSwgZmFsc2UpOworICAgIENh
cmV0UmVjdHMgcmVjdHMgPSBjYXJldFJlcGFpbnRSZWN0cygpOworICAgIHYtPnVwZGF0ZUNvbnRl
bnRzKHJlY3RzLmhpZ2gsIGZhbHNlKTsKKyAgICB2LT51cGRhdGVDb250ZW50cyhyZWN0cy5sb3cs
IGZhbHNlKTsKIH0KIAogdm9pZCBTZWxlY3Rpb246OnBhaW50Q2FyZXQoUVBhaW50ZXIgKnAsIGNv
bnN0IFFSZWN0ICZyZWN0KQpAQCAtNzgzLDggKzg0MSw4IEBAIHZvaWQgU2VsZWN0aW9uOjpwYWlu
dENhcmV0KFFQYWludGVyICpwLCAKICAgICBpZiAobV9uZWVkc0xheW91dCkKICAgICAgICAgbGF5
b3V0KCk7CiAKLSAgICBpZiAobV9jYXJldFJlY3QuaXNWYWxpZCgpKQotICAgICAgICBwLT5maWxs
UmVjdChtX2NhcmV0UmVjdCAmIHJlY3QsIFFCcnVzaCgpKTsKKyAgICBwLT5maWxsUmVjdChtX2Nh
cmV0UmVjdHMuaGlnaCAmIHJlY3QsIFFCcnVzaCgpKTsKKyAgICBwLT5maWxsUmVjdChtX2NhcmV0
UmVjdHMubG93ICYgcmVjdCwgUUJydXNoKCkpOwogfQogCiB2b2lkIFNlbGVjdGlvbjo6dmFsaWRh
dGUoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTc5NiwxNCArODU0LDE0IEBAIHZv
aWQgU2VsZWN0aW9uOjp2YWxpZGF0ZShFVGV4dEdyYW51bGFyaXQKICAgICBpZiAobV9iYXNlLmlz
Tm90TnVsbCgpKSB7CiAgICAgICAgIG1fYmFzZS5ub2RlKCktPmdldERvY3VtZW50KCktPnVwZGF0
ZUxheW91dCgpOwogICAgICAgICB1cGRhdGVkTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgbV9iYXNl
ID0gVmlzaWJsZVBvc2l0aW9uKG1fYmFzZSwgbV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICAgICAgbV9iYXNlID0gdmlzaWJsZUJhc2UoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAg
ICBpZiAoYmFzZUFuZEV4dGVudEVxdWFsKQogICAgICAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2U7
CiAgICAgfQogICAgIGlmIChtX2V4dGVudC5pc05vdE51bGwoKSAmJiAhYmFzZUFuZEV4dGVudEVx
dWFsKSB7CiAgICAgICAgIGlmICghdXBkYXRlZExheW91dCkKICAgICAgICAgICAgIG1fZXh0ZW50
Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIG1fZXh0ZW50
ID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgp
OworICAgICAgICBtX2V4dGVudCA9IHZpc2libGVFeHRlbnQoKS5kZWVwRXF1aXZhbGVudCgpOwog
ICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBhIGRhbmdsaW5nIHN0YXJ0
IG9yIGVuZApAQCAtODU3LDggKzkxNSw4IEBAIHZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZShFVGV4
dEdyYW51bGFyaXQKICAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCwgc2VsZWN0IHRoYXQgbGFz
dCB3b3JkIChMZWZ0V29yZElmT25Cb3VuZGFyeSkuCiAgICAgICAgICAgICAvLyBFZGdlIGNhc2U6
IElmIHRoZSBjYXJldCBpcyBhZnRlciB0aGUgbGFzdCB3b3JkIGluIGEgcGFyYWdyYXBoLCBzZWxl
Y3QgZnJvbSB0aGUgdGhlIGVuZCBvZiB0aGUKICAgICAgICAgICAgIC8vIGxhc3Qgd29yZCB0byB0
aGUgbGluZSBicmVhayAoYWxzbyBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gbV9iYXNlSXNTdGFydCA/IFZpc2libGVQb3NpdGlvbiht
X2Jhc2UsIG1fYWZmaW5pdHkpICAgOiBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5p
dHkpOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCAgID0gbV9iYXNlSXNTdGFydCA/
IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkgOiBWaXNpYmxlUG9zaXRpb24o
bV9iYXNlLCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9
IG1fYmFzZUlzU3RhcnQgPyB2aXNpYmxlQmFzZSgpICAgOiB2aXNpYmxlRXh0ZW50KCk7CisgICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kICAgPSBtX2Jhc2VJc1N0YXJ0ID8gdmlzaWJsZUV4
dGVudCgpIDogdmlzaWJsZUJhc2UoKTsKICAgICAgICAgICAgIEVXb3JkU2lkZSBzaWRlID0gUmln
aHRXb3JkSWZPbkJvdW5kYXJ5OwogICAgICAgICAgICAgaWYgKGlzRW5kT2ZEb2N1bWVudChzdGFy
dCkgfHwgKGlzRW5kT2ZMaW5lKHN0YXJ0KSAmJiAhaXNTdGFydE9mTGluZShzdGFydCkgJiYgIWlz
RW5kT2ZQYXJhZ3JhcGgoc3RhcnQpKSkKICAgICAgICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJ
Zk9uQm91bmRhcnk7CkBAIC04NzMsMTEgKzkzMSwxMSBAQCB2b2lkIFNlbGVjdGlvbjo6dmFsaWRh
dGUoRVRleHRHcmFudWxhcml0CiAgICAgICAgIGNhc2UgTElORToKICAgICAgICAgY2FzZSBMSU5F
X0JPVU5EQVJZOgogICAgICAgICAgICAgaWYgKG1fYmFzZUlzU3RhcnQpIHsKLSAgICAgICAgICAg
ICAgICBtX3N0YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fYmFzZSwgbV9hZmZp
bml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkxp
bmUoVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KSwgSW5jbHVkZUxpbmVCcmVh
aykuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkxp
bmUodmlzaWJsZUJhc2UoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBtX2Vu
ZCA9IGVuZE9mTGluZSh2aXNpYmxlRXh0ZW50KCksIEluY2x1ZGVMaW5lQnJlYWspLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1fc3RhcnQg
PSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpKS5kZWVw
RXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQ
b3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpLCBJbmNsdWRlTGluZUJyZWFrKS5kZWVwRXF1aXZh
bGVudCgpOworICAgICAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mTGluZSh2aXNpYmxlRXh0
ZW50KCkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkxp
bmUodmlzaWJsZUJhc2UoKSwgSW5jbHVkZUxpbmVCcmVhaykuZGVlcEVxdWl2YWxlbnQoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFHUkFQSDoK
QEAgLTg4NiwyMyArOTQ0LDIzIEBAIHZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZShFVGV4dEdyYW51
bGFyaXQKICAgICAgICAgICAgICAgICBpZiAoaXNTdGFydE9mTGluZShwb3MpICYmIGlzRW5kT2ZE
b2N1bWVudChwb3MpKQogICAgICAgICAgICAgICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoKTsK
ICAgICAgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChwb3MpLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxl
UG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLCBJbmNsdWRlTGluZUJyZWFrKS5kZWVwRXF1
aXZhbGVudCgpOworICAgICAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZQYXJhZ3JhcGgodmlzaWJs
ZUV4dGVudCgpLCBJbmNsdWRlTGluZUJyZWFrKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChW
aXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgICAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1f
YmFzZSwgbV9hZmZpbml0eSksIEluY2x1ZGVMaW5lQnJlYWspLmRlZXBFcXVpdmFsZW50KCk7Cisg
ICAgICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZUV4dGVudCgp
KS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZQYXJhZ3Jh
cGgodmlzaWJsZUJhc2UoKSwgSW5jbHVkZUxpbmVCcmVhaykuZGVlcEVxdWl2YWxlbnQoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPQ1VNRU5UX0JP
VU5EQVJZOgotICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9z
aXRpb24obV9iYXNlLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAg
IG1fZW5kID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5
KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mRG9jdW1l
bnQodmlzaWJsZUJhc2UoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIG1fZW5kID0g
ZW5kT2ZEb2N1bWVudCh2aXNpYmxlQmFzZSgpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUEFSQUdSQVBIX0JPVU5EQVJZOgogICAgICAgICAgICAg
aWYgKG1fYmFzZUlzU3RhcnQpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxl
bnQoKTsKLSAgICAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3Np
dGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAg
ICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZUJhc2UoKSkuZGVlcEVxdWl2
YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mUGFyYWdyYXBoKHZpc2libGVF
eHRlbnQoKSkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fZXh0
ZW50LCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgICAgICBtX2Vu
ZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mUGFyYWdy
YXBoKHZpc2libGVFeHRlbnQoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBt
X2VuZCA9IGVuZE9mUGFyYWdyYXBoKHZpc2libGVCYXNlKCkpLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBraHRtbC9lZGl0
aW5nL3NlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzkKZGlmZiAt
cCAtdSAtdSAtcCAtcjEuMzkga2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uaAotLS0ga2h0bWwvZWRp
dGluZy9zZWxlY3Rpb24uaAkyMyBKdW4gMjAwNSAxOTo0Nzo0OCAtMDAwMAkxLjM5CisrKyBraHRt
bC9lZGl0aW5nL3NlbGVjdGlvbi5oCTI1IEp1biAyMDA1IDE5OjI4OjI1IC0wMDAwCkBAIC0yNiw3
ICsyNiw3IEBACiAjaWZuZGVmIEtIVE1MX0VESVRJTkdfU0VMRUNUSU9OX0gKICNkZWZpbmUgS0hU
TUxfRURJVElOR19TRUxFQ1RJT05fSAogCi0jaW5jbHVkZSA8cXJlY3QuaD4KKyNpbmNsdWRlICJl
ZGl0aW5nL2NhcmV0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9wb3NpdGlvbi5oIgogI2luY2x1ZGUg
InRleHRfZ3JhbnVsYXJpdHkuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgpAQCAtMzksNiAr
MzksOSBAQCBuYW1lc3BhY2Uga2h0bWwgewogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgVmlz
aWJsZVBvc2l0aW9uOwogCitRUmVjdCBwcmltYXJ5Q2FyZXRSZWN0KGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKK0NhcmV0UmVjdHMgY2FyZXRSZWN0cyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7
CisKIGNsYXNzIFNlbGVjdGlvbgogewogcHVibGljOgpAQCAtNzQsMTEgKzc3LDE3IEBAIHB1Ymxp
YzoKIAogICAgIEVTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAK
LSAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIHN1cHBvcnQgc2VwYXJhdGUgYmFzZUFmZmluaXR5
IGFuZCBleHRlbnRBZmZpbml0eQotICAgIEVBZmZpbml0eSBzdGFydEFmZmluaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9hZmZpbml0eTsgfQotICAgIEVBZmZpbml0eSBlbmRBZmZpbml0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fYWZmaW5pdHk7IH0KKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIHN1cHBv
cnQgc2VwYXJhdGUgYmFzZUFmZmluaXR5IGFuZCBleHRlbnRBZmZpbml0eS4KICAgICBFQWZmaW5p
dHkgYmFzZUFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4gbV9hZmZpbml0eTsgfQogICAgIEVBZmZp
bml0eSBleHRlbnRBZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWZmaW5pdHk7IH0KKyAgICBF
QWZmaW5pdHkgc3RhcnRBZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWZmaW5pdHk7IH0KKyAg
ICBFQWZmaW5pdHkgZW5kQWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2FmZmluaXR5OyB9CisK
KyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHJlbmFtZWQgYW5kIHJlcGxhY2UgYmFzZSgp
LCBleHRlbnQoKSwgc3RhcnQoKSwgYW5kIGVuZCgpLgorICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlQmFzZSgpIGNvbnN0OworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50KCkgY29u
c3Q7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCgpIGNvbnN0OworICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlRW5kKCkgY29uc3Q7CiAKICAgICBib29sIG1vZGlmeShFQWx0ZXIs
IEVEaXJlY3Rpb24sIEVUZXh0R3JhbnVsYXJpdHkpOwogICAgIGJvb2wgbW9kaWZ5KEVBbHRlciwg
aW50IHZlcnRpY2FsRGlzdGFuY2UpOwpAQCAtOTgsNyArMTA3LDcgQEAgcHVibGljOgogICAgIFBv
c2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgIFBvc2l0aW9uIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CiAKLSAgICBRUmVjdCBjYXJldFJlY3QoKSBjb25z
dDsKKyAgICBDYXJldFJlY3RzIGNhcmV0UmVjdHMoKSBjb25zdDsKICAgICBRUmVjdCBleHBlY3Rl
ZFZpc2libGVSZWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIGZsYWcg
PSB0cnVlKTsKIApAQCAtMTI4LDE1ICsxMzcsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXQo
RUFmZmluaXR5IGFmZmluaXR5KTsKICAgICB2b2lkIHZhbGlkYXRlKEVUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkgPSBDSEFSQUNURVIpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeUV4
dGVuZGluZ1JpZ2h0Rm9yd2FyZChFVGV4dEdyYW51bGFyaXR5KTsKLSAgICBWaXNpYmxlUG9zaXRp
b24gbW9kaWZ5TW92aW5nUmlnaHRGb3J3YXJkKEVUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBtb2RpZnlFeHRlbmRpbmdMZWZ0QmFja3dhcmQoRVRleHRHcmFudWxhcml0eSk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeU1vdmluZ0xlZnRCYWNrd2FyZChFVGV4dEdyYW51
bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChFVGV4
dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5TW92aW5nRm9yd2FyZChF
VGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQoRVRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeU1vdmlu
Z0JhY2t3YXJkKEVUZXh0R3JhbnVsYXJpdHkpOwogCiAgICAgdm9pZCBsYXlvdXQoKTsKICAgICB2
b2lkIG5lZWRzQ2FyZXRSZXBhaW50KCk7CiAgICAgdm9pZCBwYWludENhcmV0KFFQYWludGVyICpw
LCBjb25zdCBRUmVjdCAmcmVjdCk7Ci0gICAgUVJlY3QgY2FyZXRSZXBhaW50UmVjdCgpIGNvbnN0
OworICAgIENhcmV0UmVjdHMgY2FyZXRSZXBhaW50UmVjdHMoKSBjb25zdDsKIAogICAgIGludCB4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSwgYm9vbCByZWNhbGMg
PSBmYWxzZSkgY29uc3Q7CiAKQEAgLTE0OCw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIEVTdGF0
ZSBtX3N0YXRlOyAgICAgICAgICAgICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0aW9uCiAg
ICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25zdHJl
YW0gYWZmaW5pdHkgb2YgdGhlIHNlbGVjdGlvbgogCi0gICAgUVJlY3QgbV9jYXJldFJlY3Q7ICAg
ICAgICAgICAgLy8gY2FyZXQgY29vcmRpbmF0ZXMsIHNpemUsIGFuZCBwb3NpdGlvbgorICAgIENh
cmV0UmVjdHMgbV9jYXJldFJlY3RzOyAgICAgIC8vIGNhcmV0IGNvb3JkaW5hdGVzLCBzaXplLCBh
bmQgcG9zaXRpb24KICAgICBRUmVjdCBtX2V4cGVjdGVkVmlzaWJsZVJlY3Q7ICAvLyByZWN0YW5n
bGUgdXNlZCB0byB1cGRhdGUgc2Nyb2xsIHBvc2l0aW9uIGFzIHNlbGVjdGlvbiBjaGFuZ2VzCiAg
ICAgCiAgICAgYm9vbCBtX2Jhc2VJc1N0YXJ0IDogMTsgICAgICAgLy8gdHJ1ZSBpZiBiYXNlIG5v
ZGUgaXMgYmVmb3JlIHRoZSBleHRlbnQgbm9kZQpJbmRleDoga2h0bWwvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYg
LXAgLXUgLXUgLXAgLXIxLjM0IGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKLS0tIGto
dG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJMjYgTWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJ
MS4zNAorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkyNSBKdW4gMjAwNSAxOToy
ODoyNSAtMDAwMApAQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBSb290SW5saW5lQm94ICpyb290
Qm94Rm9yTGluZShjb24KICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBJbmxpbmVCb3ggKmJveCA9IHJlbmRlcmVyLT5pbmxpbmVCb3gocC5vZmZzZXQoKSwg
Yy5hZmZpbml0eSgpKTsKKyAgICBJbmxpbmVCb3ggKmJveCA9IHJlbmRlcmVyLT5pbmxpbmVCb3go
cC5vZmZzZXQoKSwgYy5hZmZpbml0eSgpLCBmYWxzZSk7CiAgICAgaWYgKCFib3gpCiAgICAgICAg
IHJldHVybiAwOwogICAgIApAQCAtMzc5LDcgKzM3OSw3IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0xpbmVQb3NpdGlvbihjb24KIAogICAgIFJlbmRlckJsb2NrICpjb250YWluaW5nQmxvY2sg
PSAwOwogICAgIFJvb3RJbmxpbmVCb3ggKnJvb3QgPSAwOwotICAgIElubGluZUJveCAqYm94ID0g
cmVuZGVyZXItPmlubGluZUJveChwLm9mZnNldCgpLCBjLmFmZmluaXR5KCkpOworICAgIElubGlu
ZUJveCAqYm94ID0gcmVuZGVyZXItPmlubGluZUJveChwLm9mZnNldCgpLCBjLmFmZmluaXR5KCks
IGZhbHNlKTsKICAgICBpZiAoYm94KSB7CiAgICAgICAgIHJvb3QgPSBib3gtPnJvb3QoKS0+cHJl
dlJvb3RCb3goKTsKICAgICAgICAgaWYgKHJvb3QpCkBAIC00MDAsNyArNDAwLDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgICAgICAgICAgUG9zaXRpb24g
cG9zKG4sIG4tPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAgICAgICAgaWYgKHBvcy5pblJlbmRl
cmVkQ29udGVudCgpKSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG4tPnJlbmRlcmVyKCkpOwot
ICAgICAgICAgICAgICAgIGJveCA9IG4tPnJlbmRlcmVyKCktPmlubGluZUJveChuLT5jYXJldE1h
eE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBib3ggPSBuLT5yZW5kZXJlcigpLT5pbmxpbmVC
b3gobi0+Y2FyZXRNYXhPZmZzZXQoKSwgVVBTVFJFQU0sIGZhbHNlKTsKICAgICAgICAgICAgICAg
ICBpZiAoYm94KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHJvb3QgbGluZSBi
b3ggZm91bmQKICAgICAgICAgICAgICAgICAgICAgcm9vdCA9IGJveC0+cm9vdCgpOwpAQCAtNDQ5
LDcgKzQ0OSw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFYKIAog
ICAgIFJlbmRlckJsb2NrICpjb250YWluaW5nQmxvY2sgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gg
KnJvb3QgPSAwOwotICAgIElubGluZUJveCAqYm94ID0gcmVuZGVyZXItPmlubGluZUJveChwLm9m
ZnNldCgpLCBjLmFmZmluaXR5KCkpOworICAgIElubGluZUJveCAqYm94ID0gcmVuZGVyZXItPmlu
bGluZUJveChwLm9mZnNldCgpLCBjLmFmZmluaXR5KCksIGZhbHNlKTsKICAgICBpZiAoYm94KSB7
CiAgICAgICAgIHJvb3QgPSBib3gtPnJvb3QoKS0+bmV4dFJvb3RCb3goKTsKICAgICAgICAgaWYg
KHJvb3QpCkBAIC00NzAsNyArNDcwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRp
b24oY29uc3QgVgogICAgICAgICAgICAgUG9zaXRpb24gcG9zKG4sIG4tPmNhcmV0TWluT2Zmc2V0
KCkpOwogICAgICAgICAgICAgaWYgKHBvcy5pblJlbmRlcmVkQ29udGVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgYXNzZXJ0KG4tPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGJveCA9IG4t
PnJlbmRlcmVyKCktPmlubGluZUJveChuLT5jYXJldE1pbk9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBib3ggPSBuLT5yZW5kZXJlcigpLT5pbmxpbmVCb3gobi0+Y2FyZXRNaW5PZmZzZXQoKSwg
VVBTVFJFQU0sIGZhbHNlKTsKICAgICAgICAgICAgICAgICBpZiAoYm94KSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIG5leHQgcm9vdCBsaW5lIGJveCBmb3VuZAogICAgICAgICAgICAgICAgICAg
ICByb290ID0gYm94LT5yb290KCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9ib3guY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1NApkaWZmIC1wIC11IC11
IC1wIC1yMS4xNTQga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCi0tLSBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2JveC5jcHAJMTEgSnVuIDIwMDUgMDU6MDE6MTcgLTAwMDAJMS4xNTQKKysr
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAkyNSBKdW4gMjAwNSAxOToyODoyNSAtMDAw
MApAQCAtMTYwMiw3ICsxNjAyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRp
Y2FsVmFsdQogICAgIHkgPSB0ICsgbXQgKyBjYi0+Ym9yZGVyVG9wKCk7CiB9CiAKLVFSZWN0IFJl
bmRlckJveDo6Y2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgaW50ICpl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCitRUmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChpbnQgb2Zm
c2V0LCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc2Vjb25kYXJ5LCBpbnQgKmV4dHJhV2lkdGhU
b0VuZE9mTGluZSkKIHsKICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdG8gY2hlY2sgb25seSBmaXJz
dCBjaGlsZCBpbnN0ZWFkIG9mIHBpY2tpbmcKICAgICAvLyByaWdodCBjaGlsZCBiYXNlZCBvbiBv
ZmZzZXQ/IElzIGl0IE9LIHRvIHBhc3MgdGhlIHNhbWUgb2Zmc2V0CkBAIC0xNjExLDcgKzE2MTEs
NyBAQCBRUmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFCiAgICAgLy8gcHJv
cGFnYXRlIGl0IGRvd253YXJkcyB0byBpdHMgY2hpbGRyZW4sIHNvbWVvbmUgd2lsbCBmZWVsIHJl
c3BvbnNpYmxlCiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBp
ZiAoY2hpbGQpIHsKLSAgICAgICAgUVJlY3QgcmVzdWx0ID0gY2hpbGQtPmNhcmV0UmVjdChvZmZz
ZXQsIGFmZmluaXR5LCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOworICAgICAgICBRUmVjdCByZXN1
bHQgPSBjaGlsZC0+Y2FyZXRSZWN0KG9mZnNldCwgYWZmaW5pdHksIHNlY29uZGFyeSwgZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lKTsKICAgICAgICAgLy8gRklYTUU6IGluLWJhbmQgc2lnbmFsbGluZyEK
ICAgICAgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTYyMCw4ICsxNjIwLDExIEBAIFFSZWN0IFJlbmRlckJveDo6Y2FyZXRSZWN0KGludCBv
ZmZzZXQsIEUKICAgICBpbnQgX3gsIF95LCBoZWlnaHQ7CiAKICAgICAvLyBpZiBub3QsIHVzZSB0
aGUgZXh0ZW50cyBvZiB0aGlzIGJveCAKLSAgICAvLyBvZmZzZXQgMCBtZWFucyBsZWZ0LCBvZmZz
ZXQgMSBtZWFucyByaWdodAotICAgIF94ID0geFBvcygpICsgKG9mZnNldCA9PSAwID8gMCA6IG1f
d2lkdGgpOworICAgIC8vIG9mZnNldCAwIG1lYW5zIGJlZm9yZSwgb2Zmc2V0IDEgbWVhbnMgYWZ0
ZXIKKyAgICBib29sIGxlZnQgPSBvZmZzZXQgPT0gMDsKKyAgICBpZiAoc2Vjb25kYXJ5KQorICAg
ICAgICBsZWZ0ID0gIWxlZnQ7CisgICAgX3ggPSB4UG9zKCkgKyAobGVmdCA/IDAgOiBtX3dpZHRo
KTsKICAgICBJbmxpbmVCb3ggKmJveCA9IGlubGluZUJveFdyYXBwZXIoKTsKICAgICBpZiAoYm94
KSB7CiAgICAgICAgIGhlaWdodCA9IGJveC0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpIC0gYm94
LT5yb290KCktPnRvcE92ZXJmbG93KCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfYm94LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtcCAtdSAtdSAt
cCAtcjEuNTQga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guaAotLS0ga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9ib3guaAkxNCBBcHIgMjAwNSAxODozMzo1NCAtMDAwMAkxLjU0CisrKyBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2JveC5oCTI1IEp1biAyMDA1IDE5OjI4OjI2IC0wMDAwCkBAIC0xMzMs
NyArMTMzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZW5kZXJMYXllciogbGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX2xheWVyOyB9CiAgICAgCi0gICAgdmlydHVhbCBRUmVjdCBjYXJldFJl
Y3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5ID0gVVBTVFJFQU0sIGludCAqZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBRUmVjdCBjYXJldFJlY3QoaW50IG9m
ZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHNlY29uZGFyeSwgaW50ICpleHRyYVdpZHRo
VG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludEJhY2tncm91bmRFeHRl
bmRlZChRUGFpbnRlciAqcCwgY29uc3QgUUNvbG9yJiBjLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIq
IGJnTGF5ZXIsIGludCBjbGlweSwgaW50IGNsaXBoLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGhlaWdodCwKSW5k
ZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjI3CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjI3IGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfYnIuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JyLmNwcAkxNCBGZWIgMjAw
NSAxODoxOToxOCAtMDAwMAkxLjI3CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JyLmNwcAky
NSBKdW4gMjAwNSAxOToyODoyNiAtMDAwMApAQCAtMTA2LDcgKzEwNiw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJCUjo6cG9zaXRpb25Gb3JDb28KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CiB9CiAKLVFSZWN0IFJlbmRlckJSOjpjYXJldFJl
Y3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9m
TGluZSkKK1FSZWN0IFJlbmRlckJSOjpjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIHNlY29uZGFyeSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAg
ICAgLy8gRURJVCBGSVhNRTogVGhpcyBkb2VzIG5vdCB3b3JrIHlldC4gU29tZSBvdGhlciBjaGFu
Z2VzIGFyZSBuZWVkIGJlZm9yZQogICAgIC8vIGFuIGFjY3VyYXRlIHBvc2l0aW9uIGNhbiBiZSBk
ZXRlcm1pbmVkLgpAQCAtMTIyLDcgKzEyMiw3IEBAIFFSZWN0IFJlbmRlckJSOjpjYXJldFJlY3Qo
aW50IG9mZnNldCwgRUEKICAgICByZXR1cm4gUVJlY3QoeFBvcygpICsgYWJzeCwgeVBvcygpICsg
YWJzeSwgMSwgbGluZUhlaWdodChmYWxzZSkpOwogfQogCi1JbmxpbmVCb3ggKlJlbmRlckJSOjpp
bmxpbmVCb3gobG9uZyBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKK0lubGluZUJveCAqUmVu
ZGVyQlI6OmlubGluZUJveChsb25nIG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHNl
Y29uZGFyeSkKIHsKICAgICByZXR1cm4gZmlyc3RUZXh0Qm94KCk7CiB9CkluZGV4OiBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2JyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ici5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI4
CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjI4IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuaAotLS0g
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ici5oCTE0IEZlYiAyMDA1IDE4OjE5OjE4IC0wMDAwCTEu
MjgKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuaAkyNSBKdW4gMjAwNSAxOToyODoyNiAt
MDAwMApAQCAtNjQsOSArNjQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7Ci0gICAgdmly
dHVhbCBRUmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5ID0gVVBT
VFJFQU0sIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBRUmVj
dCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHNlY29uZGFy
eSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAotICAgIHZpcnR1YWwgSW5saW5l
Qm94ICppbmxpbmVCb3gobG9uZyBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQU1RSRUFN
KTsKKyAgICB2aXJ0dWFsIElubGluZUJveCAqaW5saW5lQm94KGxvbmcgb2Zmc2V0LCBFQWZmaW5p
dHkgYWZmaW5pdHksIGJvb2wgc2Vjb25kYXJ5KTsKICAgICAKIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBzaG9ydCBtX2xpbmVIZWlnaHQ7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZmxvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYwCmRpZmYgLXAgLXUg
LXUgLXAgLXIxLjE2MCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCi0tLSBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCTExIE1heSAyMDA1IDAyOjEwOjEwIC0wMDAwCTEuMTYw
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCTI1IEp1biAyMDA1IDE5OjI4OjI2
IC0wMDAwCkBAIC01NzksMTEgKzU3OSwxMSBAQCBpbnQgUmVuZGVyRmxvdzo6bGVmdG1vc3RQb3Np
dGlvbihib29sIGluCiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLVFSZWN0IFJlbmRlckZsb3c6OmNh
cmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHksIGludCAqZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKQorUVJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZp
bml0eSBhZmZpbml0eSwgYm9vbCBzZWNvbmRhcnksIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
KQogewogICAgIGlmIChmaXJzdENoaWxkKCkgfHwgc3R5bGUoKS0+ZGlzcGxheSgpID09IElOTElO
RSkgewogICAgICAgICAvLyBEbyB0aGUgbm9ybWFsIGNhbGN1bGF0aW9uCi0gICAgICAgIHJldHVy
biBSZW5kZXJDb250YWluZXI6OmNhcmV0UmVjdChvZmZzZXQsIGFmZmluaXR5LCBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOworICAgICAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpjYXJldFJlY3Qo
b2Zmc2V0LCBhZmZpbml0eSwgc2Vjb25kYXJ5LCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogICAg
IH0KIAogICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2U6CkluZGV4OiBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2Zsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MQpk
aWZmIC1wIC11IC11IC1wIC1yMS42MSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuaAotLS0g
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmgJMyBNYXkgMjAwNSAyMDo1NTozMiAtMDAwMAkx
LjYxCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuaAkyNSBKdW4gMjAwNSAxOToyODoy
NiAtMDAwMApAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcmlnaHRt
b3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvcj10cnVlLCBib29sIGluY2x1
ZGVTZWxmPXRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9zaXRpb24oYm9v
bCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvcj10cnVlLCBib29sIGluY2x1ZGVTZWxmPXRydWUpIGNv
bnN0OwogICAgIAotICAgIHZpcnR1YWwgUVJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZp
bml0eSBhZmZpbml0eSA9IFVQU1RSRUFNLCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDAp
OworICAgIHZpcnR1YWwgUVJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBzZWNvbmRhcnksIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAK
ICNpZmRlZiBBUFBMRV9DSEFOR0VTCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3Rz
KFFQYWludGVyICpwYWludGVyLCBpbnQgX3R4LCBpbnQgX3R5KTsKSW5kZXg6IGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MApkaWZmIC1wIC11IC11IC1wIC1yMS40MCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUu
Y3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCTIzIEp1biAyMDA1IDE5OjQ3
OjQ5IC0wMDAwCTEuNDAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJMjUgSnVu
IDIwMDUgMTk6Mjg6MjcgLTAwMDAKQEAgLTI2Myw2ICsyNjMsMTQgQEAgaW50IElubGluZUJveDo6
cGxhY2VFbGxpcHNpc0JveChib29sIGx0cgogICAgIHJldHVybiAtMTsKIH0KIAorRURpcmVjdGlv
biBJbmxpbmVCb3g6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKFJlbmRlck9iamVjdCAq
byA9IG1fb2JqZWN0KQorICAgICAgICBpZiAoUmVuZGVyU3R5bGUgKnMgPSBvLT5zdHlsZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHMtPmRpcmVjdGlvbigpOworICAgIHJldHVybiBMVFI7Cit9CisK
IFJlbmRlckZsb3cqIElubGluZUZsb3dCb3g6OmZsb3dPYmplY3QoKQogewogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4obV9vYmplY3QpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlm
ZiAtcCAtdSAtdSAtcCAtcjEuMjYga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgKLS0tIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5oCTIzIEp1biAyMDA1IDE5OjQ3OjQ5IC0wMDAwCTEu
MjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5oCTI1IEp1biAyMDA1IDE5OjI4OjI3
IC0wMDAwCkBAIC0xNTUsNiArMTU1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5B
Y2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNX
aWR0aCk7CiAgICAgdmlydHVhbCBpbnQgcGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50IGJs
b2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgsIGJvb2wmKTsKIAorICAgIHZpcnR1YWwgRURpcmVj
dGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKKwogcHVibGljOiAvLyBGSVhNRTogV291bGQgbGlrZSB0
byBtYWtlIHRoaXMgcHJvdGVjdGVkLCBidXQgbWV0aG9kcyBhcmUgYWNjZXNzaW5nIHRoZXNlCiAg
ICAgICAgIC8vIG1lbWJlcnMgb3ZlciBpbiB0aGUgcGFydC4KICAgICBSZW5kZXJPYmplY3QqIG1f
b2JqZWN0OwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfb2Jq
ZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTUKZGlmZiAtcCAtdSAtdSAtcCAtcjEu
MTk1IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9vYmplY3QuY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjQ5IC0wMDAwCTEuMTk1CisrKyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJMjUgSnVuIDIwMDUgMTk6Mjg6MjggLTAw
MDAKQEAgLTE2ODAsNyArMTY4MCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVBvc2l0
aW9uKGludCAKICAgICB9CiB9CiAKLVFSZWN0IFJlbmRlck9iamVjdDo6Y2FyZXRSZWN0KGludCBv
ZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitR
UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgc2Vjb25kYXJ5LCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgIGlm
IChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IDA7CkBAIC0yMzYzLDcgKzIzNjMsNyBAQCBsb25nIFJlbmRlck9iamVjdDo6bmV4dE9mZnNldCAo
bG9uZyBjdXJyCiAgICAgcmV0dXJuIG5leHRPZmZzZXQ7CiB9CiAKLUlubGluZUJveCAqUmVuZGVy
T2JqZWN0OjppbmxpbmVCb3gobG9uZyBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKK0lubGlu
ZUJveCAqUmVuZGVyT2JqZWN0OjppbmxpbmVCb3gobG9uZyBvZmZzZXQsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBzZWNvbmRhcnkpCiB7CiAgICAgcmV0dXJuIGlubGluZUJveFdyYXBwZXIoKTsK
IH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDkKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMTQ5IGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2Jq
ZWN0LmgJMjMgSnVuIDIwMDUgMTk6NDc6NDkgLTAwMDAJMS4xNDkKKysrIGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfb2JqZWN0LmgJMjUgSnVuIDIwMDUgMTk6Mjg6MjggLTAwMDAKQEAgLTM3OCw3ICsz
NzgsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmxpbmVCb3hXcmFwcGVyKElu
bGluZUJveCogYik7CiAgICAgdm9pZCBkZWxldGVMaW5lQm94V3JhcHBlcigpOwogCi0gICAgdmly
dHVhbCBJbmxpbmVCb3ggKmlubGluZUJveChsb25nIG9mZnNldD0wLCBFQWZmaW5pdHkgYWZmaW5p
dHkgPSBVUFNUUkVBTSk7CisgICAgLy8gVGhlIGFmZmluaXR5IHBhcmFtZXRlciBpcyB1c2VkIHRv
IGRldGVybWluZSB3aGljaCBvZiB0aGUgdHdvIHBvc2l0aW9ucyB0byB1c2Ugd2hlbiBhdCBhIGxp
bmUgYnJlYWsuCisgICAgLy8gVXBzdHJlYW0gbWVhbnMgdGhlIGZpcnN0IGxpbmUsIGFuZCBkb3du
c3RyZWFtIG1lYW5zIHRoZSBzZWNvbmQgbGluZS4KKyAgICAvLyBUaGUgc2Vjb25kYXJ5IHBhcmFt
ZXRlciBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdHdvIHBvc2l0aW9ucyB0byB1
c2Ugd2hlbiBhdCBhIGRpcmVjdGlvbgorICAgIC8vIGJyZWFrLiBGYWxzZSBtZWFucyB0aGUgcHJp
bWFyeSBwb3NpdGlvbiAodGhlIG9uZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGRpcmVjdGlvbiBvZiB0
aGUgdW5kZXJseWluZworICAgIC8vIHN0eWxlKSwgYW5kIHRydWUgbWVhbnMgdGhlIHNlY29uZGFy
eSBwb3NpdGlvbiAodGhlIG90aGVyIG9uZSkuIFRoZXNlIGFyZSB1c2VkIGZvciB0aGUgaGlnaCBh
bmQKKyAgICAvLyBsb3cgY2FyZXQgcmVzcGVjdGl2ZWx5IGluIGJpZGlyZWN0aW9uYWwgdGV4dC4K
KyAgICB2aXJ0dWFsIElubGluZUJveCAqaW5saW5lQm94KGxvbmcgb2Zmc2V0LCBFQWZmaW5pdHkg
YWZmaW5pdHksIGJvb2wgc2Vjb25kYXJ5KTsKICAgICAKICAgICAvLyBmb3IgZGlzY3Vzc2lvbiBv
ZiBsaW5lSGVpZ2h0IHNlZSBDU1MyIHNwZWMKICAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQo
IGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3g9ZmFsc2UgKSBjb25zdDsKQEAgLTc5
OCwxMiArODA0LDEwIEBAIHB1YmxpYzoKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb250
ZW50IGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0Lgog
ICAgICAqIEBwYXJhbSBvZmZzZXQgemVyby1iYXNlZCBvZmZzZXQgZGV0ZXJtaW5pbmcgcG9zaXRp
b24gd2l0aGluIHRoZSByZW5kZXIgb2JqZWN0LgotICAgICAqIEBwYXJhbSBvdmVycmlkZSBAcCB0
cnVlIGlmIGlucHV0IG92ZXJyaWRlcyBleGlzdGluZyBjaGFyYWN0ZXJzLAotICAgICAqIEBwIGZh
bHNlIGlmIGl0IGluc2VydHMgdGhlbS4gVGhlIHdpZHRoIG9mIHRoZSBjYXJldCBkZXBlbmRzIG9u
IHRoaXMgb25lLgogICAgICAqIEBwYXJhbSBleHRyYVdpZHRoVG9FbmRPZkxpbmUgb3B0aW9uYWwg
b3V0IGFyZyB0byBnaXZlIGV4dHJhIHdpZHRoIHRvIGVuZCBvZiBsaW5lIC0KICAgICAgKiB1c2Vm
dWwgZm9yIGNoYXJhY3RlciByYW5nZSByZWN0IGNvbXB1dGF0aW9ucwogICAgICAqLwotICAgIHZp
cnR1YWwgUVJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQ
U1RSRUFNLCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOworICAgIHZpcnR1YWwgUVJl
Y3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzZWNvbmRh
cnksIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKICAgICB2aXJ0dWFsIGludCBs
b3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yPXRydWUsIGJvb2wgaW5j
bHVkZVNlbGY9dHJ1ZSkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50IHJpZ2h0
bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNs
dWRlU2VsZj10cnVlKSBjb25zdCB7IHJldHVybiAwOyB9CkluZGV4OiBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX3RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgy
CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjE4MiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3Bw
Ci0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwCTI3IE1heSAyMDA1IDIwOjU0OjIx
IC0wMDAwCTEuMTgyCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwCTI1IEp1biAy
MDA1IDE5OjI4OjI4IC0wMDAwCkBAIC03MzksNiArNzM5LDggQEAgaW50IElubGluZVRleHRCb3g6
OnBvc2l0aW9uRm9yT2Zmc2V0KGludAogICAgIFJlbmRlclRleHQgKnRleHQgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0ICo+KG1fb2JqZWN0KTsKICAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0g
dGV4dC0+bWV0cmljcyhtX2ZpcnN0TGluZSk7CiAKKyAgICBhc3NlcnQob2Zmc2V0ID49IG1fc3Rh
cnQgJiYgb2Zmc2V0IDw9IG1fc3RhcnQgKyBtX2xlbik7CisKICAgICBpbnQgbGVmdDsKICAgICBp
ZiAobV9yZXZlcnNlZCkgewogCWxvbmcgbGVuID0gbV9zdGFydCArIG1fbGVuIC0gb2Zmc2V0OwpA
QCAtNzQ5LDEwICs3NTEsMTYgQEAgaW50IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0
KGludAogCVFTdHJpbmcgc3RyaW5nKHRleHQtPnN0ci0+cyArIG1fc3RhcnQsIGxlbik7CiAJbGVm
dCA9IG1feCArIGZtLmJvdW5kaW5nUmVjdChzdHJpbmcsIGxlbikucmlnaHQoKTsKICAgICB9CisK
ICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhlcmU/CiAgICAg
cmV0dXJuIGxlZnQ7CiB9CiAKK0VEaXJlY3Rpb24gSW5saW5lVGV4dEJveDo6ZGlyZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXZlcnNlZCA/IFJUTCA6IExUUjsKK30KKwogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KERPTTo6
Tm9kZUltcGwqIG5vZGUsIERPTVN0cmluZ0ltcGwgKl9zdHIpCkBAIC0xMDE5LDUxICsxMDI3LDQx
IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QgKmxhc3RSZW5kZXJlck9uUHJldkwKICAgICByZXR1cm4g
bGFzdENoaWxkLT5vYmplY3QoKTsKIH0KIAotUVJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KGlu
dCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUp
CitRUmVjdCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmlu
aXR5LCBib29sIHNlY29uZGFyeSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7Ci0gICAg
aWYgKCFmaXJzdFRleHRCb3goKSB8fCBzdHJpbmdMZW5ndGgoKSA9PSAwKSB7CisgICAgLy8gRmlu
ZCB0aGUgdGV4dCBib3ggZm9yIHRoZSBnaXZlbiBvZmZzZXQuCisgICAgSW5saW5lVGV4dEJveCAq
Ym94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihpbmxpbmVCb3gob2Zmc2V0LCBhZmZp
bml0eSwgc2Vjb25kYXJ5KSk7CisgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiBRUmVjdCgp
OwotICAgIH0KIAotICAgIC8vIEZpbmQgdGhlIHRleHQgYm94IGZvciB0aGUgZ2l2ZW4gb2Zmc2V0
Ci0gICAgSW5saW5lVGV4dEJveCAqYm94ID0gMDsKLSAgICBmb3IgKGJveCA9IGZpcnN0VGV4dEJv
eCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBpZiAoKG9mZnNl
dCA+PSBib3gtPm1fc3RhcnQpICYmIChvZmZzZXQgPD0gYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xl
bikpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIGRvd25zdHJlYW0gYWZmaW5pdHkgd291bGQg
bWFrZSB1cyBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICBJbmxpbmVUZXh0Qm94
ICpuZXh0Qm94ID0gYm94LT5uZXh0VGV4dEJveCgpOwotICAgICAgICAgICAgaWYgKG9mZnNldCA9
PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuICYmIGFmZmluaXR5ID09IERPV05TVFJFQU0gICYm
IG5leHRCb3ggJiYgICFib3gtPm5leHRPbkxpbmUoKSkgewotICAgICAgICAgICAgICAgIC8vIFdl
J3JlIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGJyb2tlbiBvbiBhIHdvcmQgYm91bmRhcnkgYW5kIGFm
ZmluaXR5IGlzIGRvd25zdHJlYW0uCi0gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGp1bXAgZG93
biB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbmV4dCB0ZXh0IGJveAotICAgICAgICAgICAgICAg
ICAgICBib3ggPSBuZXh0Qm94OwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPm1f
c3RhcnQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
TG9vayBvbiB0aGUgbmV4dCBsaW5lCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAq
b2JqZWN0ID0gZmlyc3RSZW5kZXJlck9uTmV4dExpbmUoYm94KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QtPmNh
cmV0UmVjdCgwLCBhZmZpbml0eSk7Ci0gICAgICAgICAgICAgICAgfQorICAgIC8vIENoZWNrIGlm
IGRvd25zdHJlYW0gYWZmaW5pdHkgd291bGQgbWFrZSB1cyBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUu
CisgICAgSW5saW5lVGV4dEJveCAqbmV4dEJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKKyAgICBp
ZiAob2Zmc2V0ID09IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW4gJiYgYWZmaW5pdHkgPT0gRE9X
TlNUUkVBTSAmJiBuZXh0Qm94ICYmICFib3gtPm5leHRPbkxpbmUoKSkgeworICAgICAgICAvLyBX
ZSdyZSBhdCB0aGUgZW5kIG9mIGEgbGluZSBicm9rZW4gb24gYSB3b3JkIGJvdW5kYXJ5IGFuZCBh
ZmZpbml0eSBpcyBkb3duc3RyZWFtLgorICAgICAgICAvLyBUcnkgdG8ganVtcCBkb3duIHRvIHRo
ZSBuZXh0IGxpbmUuCisgICAgICAgIGlmIChuZXh0Qm94KSB7CisgICAgICAgICAgICAvLyBVc2Ug
dGhlIG5leHQgdGV4dCBib3gKKyAgICAgICAgICAgIGJveCA9IG5leHRCb3g7CisgICAgICAgICAg
ICBvZmZzZXQgPSBib3gtPm1fc3RhcnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBMb29rIG9uIHRoZSBuZXh0IGxpbmUKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCAqb2JqZWN0
ID0gZmlyc3RSZW5kZXJlck9uTmV4dExpbmUoYm94KTsKKyAgICAgICAgICAgIGlmIChvYmplY3Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+Y2FyZXRSZWN0KDAsIGFmZmluaXR5LCBz
ZWNvbmRhcnkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgSW5saW5lVGV4dEJv
eCAqcHJldkJveCA9IGJveC0+cHJldlRleHRCb3goKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBi
b3gtPm1fc3RhcnQgJiYgYWZmaW5pdHkgPT0gVVBTVFJFQU0gJiYgcHJldkJveCAmJiAhYm94LT5w
cmV2T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChwcmV2Qm94KSB7CisgICAgICAgICAgICAg
ICAgYm94ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPm1fc3RhcnQg
KyBib3gtPm1fbGVuOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkJSW5saW5lVGV4dEJveCAqcHJl
dkJveCA9IGJveC0+cHJldlRleHRCb3goKTsKLQkJaWYgKG9mZnNldCA9PSBib3gtPm1fc3RhcnQg
JiYgYWZmaW5pdHkgPT0gVVBTVFJFQU0gJiYgcHJldkJveCAmJiAhYm94LT5wcmV2T25MaW5lKCkp
IHsKLQkJICAgIGlmIChwcmV2Qm94KSB7Ci0JCQlib3ggPSBwcmV2Qm94OwotCQkJb2Zmc2V0ID0g
Ym94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbjsKLQkJICAgIH0gZWxzZSB7Ci0JCQlSZW5kZXJPYmpl
Y3QgKm9iamVjdCA9IGxhc3RSZW5kZXJlck9uUHJldkxpbmUoYm94KTsKLQkJCWlmIChvYmplY3Qp
Ci0JCQkgICAgcmV0dXJuIG9iamVjdC0+Y2FyZXRSZWN0KDAsIGFmZmluaXR5KTsKLQkJICAgIH0K
LQkJfQotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBSZW5kZXJP
YmplY3QgKm9iamVjdCA9IGxhc3RSZW5kZXJlck9uUHJldkxpbmUoYm94KTsKKyAgICAgICAgICAg
ICAgICBpZiAob2JqZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5jYXJl
dFJlY3QoMCwgYWZmaW5pdHksIHNlY29uZGFyeSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCi0gICAgaWYgKCFib3gpIHsKLSAgICAgICAgcmV0dXJuIFFSZWN0KCk7Ci0g
ICAgfQogCiAgICAgaW50IGhlaWdodCA9IGJveC0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpIC0g
Ym94LT5yb290KCktPnRvcE92ZXJmbG93KCk7CiAgICAgaW50IHRvcCA9IGJveC0+cm9vdCgpLT50
b3BPdmVyZmxvdygpOwpAQCAtMTc5MywyMyArMTc5MSwzMCBAQCB1bnNpZ25lZCBsb25nIFJlbmRl
clRleHQ6OmNhcmV0TWF4UmVuZGVyCiAgICAgcmV0dXJuIGw7CiB9CiAKLUlubGluZUJveCAqUmVu
ZGVyVGV4dDo6aW5saW5lQm94KGxvbmcgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCitJbmxp
bmVCb3ggKlJlbmRlclRleHQ6OmlubGluZUJveChsb25nIG9mZnNldCwgRUFmZmluaXR5IGFmZmlu
aXR5LCBib29sIHNlY29uZGFyeSkKIHsKLSAgICBmb3IgKElubGluZVRleHRCb3ggKmJveCA9IGZp
cnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBp
ZiAob2Zmc2V0ID49IGJveC0+bV9zdGFydCAmJiBvZmZzZXQgPD0gYm94LT5tX3N0YXJ0ICsgYm94
LT5tX2xlbikgewotICAgICAgICAgICAgaWYgKGFmZmluaXR5ID09IERPV05TVFJFQU0gJiYgYm94
LT5uZXh0VGV4dEJveCgpICYmIG9mZnNldCA9PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKQot
ICAgICAgICAgICAgICAgIHJldHVybiBib3gtPm5leHRUZXh0Qm94KCk7CisgICAgSW5saW5lVGV4
dEJveCAqYm94ID0gZmlyc3RUZXh0Qm94KCk7CisgICAgSW5saW5lVGV4dEJveCAqcHJldkJveCA9
IGJveDsKKyAgICBJbmxpbmVUZXh0Qm94ICpoaXRFZGdlQm94ID0gMDsKKyAgICB3aGlsZSAoYm94
KSB7CisgICAgICAgIGludCBzdGFydCA9IGJveC0+bV9zdGFydDsKKyAgICAgICAgaW50IGVuZCA9
IHN0YXJ0ICsgYm94LT5tX2xlbjsKKyAgICAgICAgaWYgKG9mZnNldCA+IHN0YXJ0ICYmIG9mZnNl
dCA8IGVuZCkKICAgICAgICAgICAgIHJldHVybiBib3g7CisgICAgICAgIElubGluZVRleHRCb3gg
Km5leHRCb3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gc3Rh
cnQgfHwgb2Zmc2V0ID09IGVuZCkgeworICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBzdGFydCAm
JiBhZmZpbml0eSA9PSBVUFNUUkVBTSAmJiBwcmV2Qm94ICYmICFib3gtPnByZXZPbkxpbmUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gcHJldkJveDsKKyAgICAgICAgICAgIGlmIChvZmZzZXQg
PT0gZW5kICYmIGFmZmluaXR5ID09IERPV05TVFJFQU0gJiYgbmV4dEJveCAmJiAhYm94LT5uZXh0
T25MaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRCb3g7CisgICAgICAgICAgICBp
ZiAob2Zmc2V0ID09ICgoKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgXiBib3gtPm1fcmV2
ZXJzZWQgXiBzZWNvbmRhcnkpID8gZW5kIDogc3RhcnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBib3g7CisgICAgICAgICAgICBoaXRFZGdlQm94ID0gYm94OwogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKG9mZnNldCA8IGJveC0+bV9zdGFydCkgewotICAgICAgICAgICAgLy8gVGhlIG9m
ZnNldCB3ZSdyZSBsb29raW5nIGZvciBpcyBiZWZvcmUgdGhpcyBub2RlCi0gICAgICAgICAgICAv
LyB0aGlzIG1lYW5zIHRoZSBvZmZzZXQgbXVzdCBiZSBpbiBjb250ZW50IHRoYXQgaXMKLSAgICAg
ICAgICAgIC8vIG5vdCByZW5kZXJlZC4KLSAgICAgICAgICAgIHJldHVybiBib3gtPnByZXZUZXh0
Qm94KCkgPyBib3gtPnByZXZUZXh0Qm94KCkgOiBmaXJzdFRleHRCb3goKTsKLSAgICAgICAgfQor
ICAgICAgICBwcmV2Qm94ID0gYm94OworICAgICAgICBib3ggPSBuZXh0Qm94OwogICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaGl0RWRnZUJveCA/IGhpdEVkZ2VCb3ggOiBw
cmV2Qm94OwogfQogCiBSZW5kZXJUZXh0RnJhZ21lbnQ6OlJlbmRlclRleHRGcmFnbWVudChET006
Ok5vZGVJbXBsKiBfbm9kZSwgRE9NOjpET01TdHJpbmdJbXBsKiBfc3RyLApJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNzgKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNzgga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0
LmgKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5oCTIyIEFwciAyMDA1IDE2OjI5OjUx
IC0wMDAwCTEuNzgKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5oCTI1IEp1biAyMDA1
IDE5OjI4OjI4IC0wMDAwCkBAIC0xMzQsNiArMTM0LDggQEAgcHVibGljOgogICAgICAqLwogICAg
IGJvb2wgY2hlY2tWZXJ0aWNhbFBvaW50KGludCBfeSwgaW50IF90eSwgaW50IF9oKTsKIAorICAg
IHZpcnR1YWwgRURpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKKwogICAgIGludCBtX3N0YXJ0
OwogICAgIHVuc2lnbmVkIHNob3J0IG1fbGVuOwogICAgIApAQCAtMjI4LDcgKzIzMCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Qg
e3JldHVybiBtX3NlbGVjdGlvblN0YXRlO30KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uU3RhdGUgcyk7CiAgICAgdmlydHVhbCBRUmVjdCBzZWxlY3Rpb25SZWN0
KCk7Ci0gICAgdmlydHVhbCBRUmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFm
ZmluaXR5LCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOworICAgIHZpcnR1YWwgUVJl
Y3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzZWNvbmRh
cnksIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAgICAgdm9pZCBwb3NPZkNoYXIo
aW50IGNoLCBpbnQgJngsIGludCAmeSk7CiAKICAgICB2aXJ0dWFsIGludCBtYXJnaW5MZWZ0KCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS0+bWFyZ2luTGVmdCgpLm1pbldpZHRoKDApOyB9CkBAIC0y
NDUsNyArMjQ3LDcgQEAgcHVibGljOgogICAgIElubGluZVRleHRCb3gqIGZpcnN0VGV4dEJveCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RUZXh0Qm94OyB9CiAgICAgSW5saW5lVGV4dEJveCogbGFz
dFRleHRCb3goKSBjb25zdCB7IHJldHVybiBtX2xhc3RUZXh0Qm94OyB9CiAgICAgCi0gICAgdmly
dHVhbCBJbmxpbmVCb3ggKmlubGluZUJveChsb25nIG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5
ID0gVVBTVFJFQU0pOworICAgIHZpcnR1YWwgSW5saW5lQm94ICppbmxpbmVCb3gobG9uZyBvZmZz
ZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzZWNvbmRhcnkpOwogCiAjaWYgQVBQTEVfQ0hB
TkdFUwogICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250ICosIGludCBzdGFydCwgaW50
IGxlbikgY29uc3Q7CkluZGV4OiBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC1wIC11IC11IC1wIC1yMS43MSBraHRtbC94
bWwvZG9tX3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMjEgSnVu
IDIwMDUgMTg6MTE6MTAgLTAwMDAJMS43MQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJ
MjUgSnVuIDIwMDUgMTk6Mjg6MzAgLTAwMDAKQEAgLTYzLDYgKzYzLDcgQEAgdXNpbmcga2h0bWw6
OlJlbmRlckZsb3c7CiB1c2luZyBraHRtbDo6UmVuZGVyT2JqZWN0OwogdXNpbmcga2h0bWw6OlJl
bmRlclRleHQ7CiB1c2luZyBraHRtbDo6Um9vdElubGluZUJveDsKK3VzaW5nIGtodG1sOjpVUFNU
UkVBTTsKIHVzaW5nIGtodG1sOjpWSVNJQkxFOwogdXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlv
bjsKIApAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMgTm9kZUltcGwgKm5leHRSZW5kZXJlZEVkaXRh
YmxlKE5vCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJl
cigpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigp
LT5pbmxpbmVCb3goMCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pbmxpbmVCb3go
MCwgVVBTVFJFQU0sIGZhbHNlKSkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAg
ICByZXR1cm4gMDsKQEAgLTkwLDcgKzkxLDcgQEAgc3RhdGljIE5vZGVJbXBsICpwcmV2aW91c1Jl
bmRlcmVkRWRpdGFibAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghbm9kZS0+
cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAobm9kZS0+cmVu
ZGVyZXIoKS0+aW5saW5lQm94KDApKQorICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aW5s
aW5lQm94KDAsIFVQU1RSRUFNLCBmYWxzZSkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAgICAgcmV0dXJuIDA7CkBAIC03MjcsMTYgKzcyOCwxNiBAQCBib29sIFBvc2l0aW9uOjpy
ZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgaWYgKHJlbmRlcmVyID09IHBvc1JlbmRlcmVy
ICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSBwb3NSZW5kZXJlZE9mZnNldCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgTE9HKEVkaXRpbmcsICJyZW5kZXJlcjogICAgICAgICAgICAgICAl
cCBbJXBdXG4iLCByZW5kZXJlciwgcmVuZGVyZXIgPyByZW5kZXJlci0+aW5saW5lQm94KG9mZnNl
dCgpKSA6IDApOwotICAgIExPRyhFZGl0aW5nLCAidGhpc1JlbmRlcmVkT2Zmc2V0OiAgICAgICAg
ICVkXG4iLCB0aGlzUmVuZGVyZWRPZmZzZXQpOwotICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVy
ZXI6ICAgICAgICAgICAgJXAgWyVwXVxuIiwgcG9zUmVuZGVyZXIsIHBvc1JlbmRlcmVyID8gcG9z
UmVuZGVyZXItPmlubGluZUJveChvZmZzZXQoKSkgOiAwKTsKKyAgICBMT0coRWRpdGluZywgInJl
bmRlcmVyOiAgICAgICAgICAgICAgICVwIFslcF1cbiIsIHJlbmRlcmVyLCByZW5kZXJlciA/IHJl
bmRlcmVyLT5pbmxpbmVCb3gob2Zmc2V0KCksIFVQU1RSRUFNLCBmYWxzZSkgOiAwKTsKKyAgICBM
T0coRWRpdGluZywgInRoaXNSZW5kZXJlZE9mZnNldDogICAgICVkXG4iLCB0aGlzUmVuZGVyZWRP
ZmZzZXQpOworICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZXI6ICAgICAgICAgICAgJXAgWyVw
XVxuIiwgcG9zUmVuZGVyZXIsIHBvc1JlbmRlcmVyID8gcG9zUmVuZGVyZXItPmlubGluZUJveChv
ZmZzZXQoKSwgVVBTVFJFQU0sIGZhbHNlKSA6IDApOwogICAgIExPRyhFZGl0aW5nLCAicG9zUmVu
ZGVyZWRPZmZzZXQ6ICAgICAgJWRcbiIsIHBvc1JlbmRlcmVkT2Zmc2V0KTsKICAgICBMT0coRWRp
dGluZywgIm5vZGUgbWluL21heDogICAgICAgICAgICVkOiVkXG4iLCBub2RlKCktPmNhcmV0TWlu
T2Zmc2V0KCksIG5vZGUoKS0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpKTsKICAgICBMT0coRWRp
dGluZywgInBvcyBub2RlIG1pbi9tYXg6ICAgICAgICVkOiVkXG4iLCBwb3Mubm9kZSgpLT5jYXJl
dE1pbk9mZnNldCgpLCBwb3Mubm9kZSgpLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkpOwogICAg
IExPRyhFZGl0aW5nLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKLSAgICBJbmxpbmVCb3ggKmIxID0g
cmVuZGVyZXIgPyByZW5kZXJlci0+aW5saW5lQm94KG9mZnNldCgpKSA6IDA7Ci0gICAgSW5saW5l
Qm94ICpiMiA9IHBvc1JlbmRlcmVyID8gcG9zUmVuZGVyZXItPmlubGluZUJveChwb3Mub2Zmc2V0
KCkpIDogMDsKKyAgICBJbmxpbmVCb3ggKmIxID0gcmVuZGVyZXIgPyByZW5kZXJlci0+aW5saW5l
Qm94KG9mZnNldCgpLCBVUFNUUkVBTSwgZmFsc2UpIDogMDsKKyAgICBJbmxpbmVCb3ggKmIyID0g
cG9zUmVuZGVyZXIgPyBwb3NSZW5kZXJlci0+aW5saW5lQm94KHBvcy5vZmZzZXQoKSwgVVBTVFJF
QU0sIGZhbHNlKSA6IDA7CiAKICAgICBpZiAoIWIxIHx8ICFiMikgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBrd3EvS1dRQWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBY2NPYmplY3QubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNjgKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNjgga3dxL0tXUUFjY09iamVjdC5tbQotLS0ga3dx
L0tXUUFjY09iamVjdC5tbQk1IEp1biAyMDA1IDA3OjA2OjUyIC0wMDAwCTEuNjgKKysrIGt3cS9L
V1FBY2NPYmplY3QubW0JMjUgSnVuIDIwMDUgMTk6Mjg6MzAgLTAwMDAKQEAgLTExMjcsNyArMTEy
Nyw2IEBAIHN0YXRpYyBRUmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKIAogLSAoaWQp
ZG9BWEJvdW5kc0ZvclRleHRNYXJrZXJSYW5nZTogKFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UgKikg
dGV4dE1hcmtlclJhbmdlCiB7Ci0KICAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZp
c2libGVQb3NpdGlvbgogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9
IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2U6IHRleHRNYXJr
ZXJSYW5nZV07CiAgICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQpAQCAtMTEz
OCw4ICsxMTM3LDggQEAgc3RhdGljIFFSZWN0IGJvdW5kaW5nQm94UmVjdChSZW5kZXJPYmplYwog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIC8vIHVzZSB0aGUgU2VsZWN0aW9uIGNsYXNz
IHRvIGhlbHAgY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlY3RhbmdsZQotICAgIFFSZWN0
IHJlY3QxID0gU2VsZWN0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBzdGFydFZpc2libGVQb3Np
dGlvbikuY2FyZXRSZWN0KCk7Ci0gICAgUVJlY3QgcmVjdDIgPSBTZWxlY3Rpb24oZW5kVmlzaWJs
ZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmNhcmV0UmVjdCgpOworICAgIFFSZWN0IHJl
Y3QxID0gU2VsZWN0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBzdGFydFZpc2libGVQb3NpdGlv
bikuY2FyZXRSZWN0cygpLmhpZ2g7CisgICAgUVJlY3QgcmVjdDIgPSBTZWxlY3Rpb24oZW5kVmlz
aWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmNhcmV0UmVjdHMoKS5oaWdoOwogICAg
IFFSZWN0IG91cnJlY3QgPSByZWN0MS51bml0ZShyZWN0Mik7CiAKICAgICAvLyB0cnkgdG8gdXNl
IHRoZSBkb2N1bWVudCB2aWV3IGZyb20gdGhlIHNlbGVjdGlvbiwgc28gdGhhdCBuZXN0ZWQgV2Vi
QXJlYXMgd29yaywKSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS42NDMKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNjQzIGt3cS9LV1FLSFRNTFBhcnQubW0K
LS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMjYgTWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJMS42NDMK
KysrIGt3cS9LV1FLSFRNTFBhcnQubW0JMjUgSnVuIDIwMDUgMTk6Mjg6MzEgLTAwMDAKQEAgLTMz
NjEsMTIgKzMzNjEsMTEgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OmNlbnRlclNlbGVjdGlvbkluVmlz
aQogICAgIHN3aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkgewogICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6Tk9ORToKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6
Q0FSRVQ6IHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgogICAgICAgICAgICAgaWYg
KHZpZXcoKSkKICAgICAgICAgICAgICAgICAvLyBwYXNzaW5nIHRydWUgZm9yY2VzIGNlbnRlcmlu
ZyBldmVuIGlmIHNlbGVjdGlvbiBpcyBhbHJlYWR5IGV4cG9zZWQKLSAgICAgICAgICAgICAgICB2
aWV3KCktPmVuc3VyZVJlY3RWaXNpYmxlQ2VudGVyZWQoc2VsZWN0aW9uKCkuY2FyZXRSZWN0KCks
IHRydWUpOworICAgICAgICAgICAgICAgIHZpZXcoKS0+ZW5zdXJlUmVjdFZpc2libGVDZW50ZXJl
ZChzZWxlY3Rpb24oKS5jYXJldFJlY3RzKCkuaGlnaCwgdHJ1ZSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQogICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAg
ICBpZiAodmlldygpKQogICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgdHJ1ZSBmb3JjZXMgY2Vu
dGVyaW5nIGV2ZW4gaWYgc2VsZWN0aW9uIGlzIGFscmVhZHkgZXhwb3NlZApJbmRleDoga3dxL1dl
YkNvcmVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzk2CmRpZmYgLXAgLXUg
LXUgLXAgLXIxLjM5NiBrd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0ga3dxL1dlYkNvcmVCcmlkZ2Uu
bW0JMTQgSnVuIDIwMDUgMDA6MjM6NDUgLTAwMDAJMS4zOTYKKysrIGt3cS9XZWJDb3JlQnJpZGdl
Lm1tCTI1IEp1biAyMDA1IDE5OjI4OjM0IC0wMDAwCkBAIC0xMjc1LDEzICsxMjc1LDE0IEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAoTlNSZWN0KWNhcmV0
UmVjdEF0Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5OihO
U1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CiB7Ci0gICAgcmV0dXJuIFtub2RlIF9ub2RlSW1w
bF0tPnJlbmRlcmVyKCktPmNhcmV0UmVjdChvZmZzZXQsIHN0YXRpY19jYXN0PEVBZmZpbml0eT4o
YWZmaW5pdHkpKTsKKyAgICByZXR1cm4gW25vZGUgX25vZGVJbXBsXS0+cmVuZGVyZXIoKS0+Y2Fy
ZXRSZWN0KG9mZnNldCwgc3RhdGljX2Nhc3Q8RUFmZmluaXR5PihhZmZpbml0eSksIGZhbHNlKTsK
IH0KKwogLSAoTlNSZWN0KWZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7
CiAgICAgaW50IGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDA7Ci0gICAgUVJlY3Qgc3RhcnRDYXJl
dFJlY3QgPSBbW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSBfbm9kZUltcGxdLT5yZW5kZXJlcigpLT5j
YXJldFJlY3QoW3JhbmdlIHN0YXJ0T2Zmc2V0XSwgVVBTVFJFQU0sICZleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpOwotICAgIFFSZWN0IGVuZENhcmV0UmVjdCA9IFtbcmFuZ2Ugc3RhcnRDb250YWluZXJd
IF9ub2RlSW1wbF0tPnJlbmRlcmVyKCktPmNhcmV0UmVjdChbcmFuZ2UgZW5kT2Zmc2V0XSwgVVBT
VFJFQU0pOworICAgIFFSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gW1tyYW5nZSBzdGFydENvbnRhaW5l
cl0gX25vZGVJbXBsXS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KFtyYW5nZSBzdGFydE9mZnNldF0s
IFVQU1RSRUFNLCBmYWxzZSwgJmV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CisgICAgUVJlY3QgZW5k
Q2FyZXRSZWN0ID0gW1tyYW5nZSBzdGFydENvbnRhaW5lcl0gX25vZGVJbXBsXS0+cmVuZGVyZXIo
KS0+Y2FyZXRSZWN0KFtyYW5nZSBlbmRPZmZzZXRdLCBVUFNUUkVBTSwgZmFsc2UpOwogCiAgICAg
aWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJldFJlY3QueSgpKSB7CiAgICAgICAgIC8v
IHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxpbmUKQEAgLTIwOTksNyArMjEwMCw3IEBA
IHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBpZiAoIWRvY3Vt
ZW50VmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFFSZWN0IGV4dGVudFJlY3QgPSBy
ZW5kZXJlci0+Y2FyZXRSZWN0KGV4dGVudC5vZmZzZXQoKSwgX3BhcnQtPnNlbGVjdGlvbigpLmV4
dGVudEFmZmluaXR5KCkpOworICAgIFFSZWN0IGV4dGVudFJlY3QgPSByZW5kZXJlci0+Y2FyZXRS
ZWN0KGV4dGVudC5vZmZzZXQoKSwgX3BhcnQtPnNlbGVjdGlvbigpLmV4dGVudEFmZmluaXR5KCks
IGZhbHNlKTsKICAgICBpZiAoIU5TQ29udGFpbnNSZWN0KFtkb2N1bWVudFZpZXcgdmlzaWJsZVJl
Y3RdLCBOU1JlY3QoZXh0ZW50UmVjdCkpKSB7CiAgICAgICAgIHYtPmVuc3VyZVJlY3RWaXNpYmxl
Q2VudGVyZWQoZXh0ZW50UmVjdCwgdHJ1ZSk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>