<?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>15954</bug_id>
          
          <creation_ts>2007-11-12 07:18:11 -0800</creation_ts>
          <short_desc>Move DOM Selection operations out of SelectionController</short_desc>
          <delta_ts>2007-11-12 22:26:19 -0800</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60986</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-12 07:18:11 -0800</bug_when>
    <thetext>From bug 15922 comment 2:

&gt; DOMSelection is the DOM&apos;s &quot;selection object&quot; API. It has the same relationship
&gt; to SelectionController that DOMWindow has to Frame. Right now there&apos;s a problem
&gt; in that we were &quot;grooming&quot; SelectionController to be this DOM object. So it has
&gt; many functions that should simply be moved into DOMSelection.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60987</commentid>
    <comment_count>1</comment_count>
      <attachid>17202</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-12 07:28:39 -0800</bug_when>
    <thetext>Created attachment 17202
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61009</commentid>
    <comment_count>2</comment_count>
      <attachid>17202</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-12 12:34:01 -0800</bug_when>
    <thetext>Comment on attachment 17202
proposed patch

+    if (selectionController-&gt;isNone())
+        return &quot;None&quot;;
+    else if (selectionController-&gt;isCaret())
+        return &quot;Caret&quot;;
+    else
+        return &quot;Range&quot;;

We normally don&apos;t do else after return.

+        || node-&gt;offsetInCharacters() &amp;&amp; offset &gt; caretMaxOffset(node)
+        || !node-&gt;offsetInCharacters() &amp;&amp; offset &gt; (int)node-&gt;childNodeCount()) {

Could probably rewrite this using ? : to not call offsetInCharacters twice. Or maybe there should be a helper function for this relatively common operation?

+        // Safari Selection Object API

Wow, I&apos;m really surprised to learn that baseNode is Safari-specific!

Great patch! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61049</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-12 22:26:19 -0800</bug_when>
    <thetext>Committed revision 27744.

(In reply to comment #2)
&gt; We normally don&apos;t do else after return.

Fixed.

&gt; Could probably rewrite this using ? : to not call offsetInCharacters twice.

Done.

&gt; Or maybe there should be a helper function for this relatively common operation?

That&apos;s something I&apos;d like to avoid - currently, there seem to be too many editing helper functions that aren&apos;t quite clear about what they do, because the concept of a position is messed up (editing positions vs. DOM ones vs. rendering ones).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17202</attachid>
            <date>2007-11-12 07:28:39 -0800</date>
            <delta_ts>2007-11-12 12:34:01 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>15954r1_patch.txt</filename>
            <type>text/plain</type>
            <size>42474</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzcxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDctMTEtMTIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTU0CisgICAgICAgIE1v
dmUgRE9NIFNlbGVjdGlvbiBvcGVyYXRpb25zIG91dCBvZiBTZWxlY3Rpb25Db250cm9sbGVyCisK
KyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBlZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NU2VsZWN0aW9uOjphbmNob3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YmFzZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjph
bmNob3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNlT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Zm9jdXNOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
T01TZWxlY3Rpb246OmZvY3VzT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlv
bjo6ZXh0ZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6aXNDb2xs
YXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjp0eXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6cmFuZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01TZWxlY3Rpb246OmNvbGxhcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
Y29sbGFwc2VUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNl
VG9TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmVtcHR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6bW9kaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZXh0
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpET01TZWxlY3Rpb246OmFkZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNl
bGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6Y29udGFpbnNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2Vs
ZWN0QWxsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjp0b1N0cmlu
Zyk6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uaDoKKyAgICAgICAgTW92ZWQgYWxsIERP
TSBBUEkgbWV0aG9kcyB0byBET01TZWxlY3Rpb247IGNoYW5nZWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6c2V0U2VsZWN0ZWRSYW5nZSgpCisgICAgICAgIHRvIHJldHVybiBpdHMgcmVzdWx0IGRpcmVj
dGx5IGluc3RlYWQgb2YgdmlhIGFuIEV4Y2VwdGlvbkNvZGUgdGhhdCBubyBjYWxsZXIgd2FudGVk
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpkZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZUZvcm1h
dHRpbmdBbmRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdENvbXBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgQWRhcHRlZCBmb3IgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZSgpIG5vdyByZXR1cm5pbmcgYSBib29sLgorICAgICAg
ICBTZWxlY3Rpb25Db250cm9sbGVyOjp0b1N0cmluZygpIGlzIG5vIGxvbmdlciBhdmFzaWxhYmxl
LCB1c2UgcGxhaW5UZXh0KCkgZXhwbGljaXRseS4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5l
eHA6IENoYW5nZWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZSgpIHNpZ25h
dHVyZS4KKwogMjAwNy0xMS0xMiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2luZG93cyBidWlsZCBmaXgKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDI3Njg5KQor
KysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNyArMzMx
LDcgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaQogX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNWNsb3NlRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNw
ZWN0RVBOU180Tm9kZUUKLV9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE2c2V0U2Vs
ZWN0ZWRSYW5nZUVQTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYlJpCitfX1pON1dlYkNvcmUxOVNl
bGVjdGlvbkNvbnRyb2xsZXIxNnNldFNlbGVjdGVkUmFuZ2VFUE5TXzVSYW5nZUVOU185RUFmZmlu
aXR5RWIKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjVjbGVhckV2CiBfX1pON1dl
YkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI5c2VsZWN0QWxsRXYKIF9fWk43V2ViQ29yZTE5VGV4
dFJlc291cmNlRGVjb2RlcjVmbHVzaEV2CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMjc2
OTApCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3
LDIwICsyMzcsMTYgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSwgYgog
ICAgIGlmIChraWxsUmluZykKICAgICAgICAgYWRkVG9LaWxsUmluZyhyYW5nZSwgcHJlcGVuZCk7
CiAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIq
IHNlbGVjdGlvbkNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCk7CiAg
ICAgYm9vbCBzbWFydERlbGV0ZSA9IHNtYXJ0RGVsZXRlT0sgJiYgY2FuU21hcnRDb3B5T3JEZWxl
dGUoKTsKICAgICBzd2l0Y2ggKGRlbGV0aW9uQWN0aW9uKSB7CiAgICAgICAgIGNhc2UgZGVsZXRl
U2VsZWN0aW9uQWN0aW9uOgotICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxlci0+c2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgdHJ1ZSwgZWMpOwotICAgICAgICAgICAgaWYg
KGVjKQorICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb25Db250cm9sbGVyLT5zZXRTZWxlY3RlZFJh
bmdlKHJhbmdlLCBET1dOU1RSRUFNLCB0cnVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoc21hcnREZWxldGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZGVsZXRlS2V5QWN0aW9uOgotICAgICAg
ICAgICAgc2VsZWN0aW9uQ29udHJvbGxlci0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNU
UkVBTSwgKGdyYW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KSwgZWMpOwotICAgICAg
ICAgICAgaWYgKGVjKQorICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb25Db250cm9sbGVyLT5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dOU1RSRUFNLCAoZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpZiAo
bV9mcmFtZS0+ZG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRl
bGV0ZUtleVByZXNzZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc21hcnREZWxldGUsIGdyYW51bGFy
aXR5KTsKQEAgLTI1OCw4ICsyNTQsNyBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlUmFuZ2UoUmFuZ2Uq
IHJhbmdlLCBiCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBmb3J3YXJkRGVsZXRlS2V5QWN0aW9uOgotICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxl
ci0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgKGdyYW51bGFyaXR5ICE9IENo
YXJhY3RlckdyYW51bGFyaXR5KSwgZWMpOwotICAgICAgICAgICAgaWYgKGVjKQorICAgICAgICAg
ICAgaWYgKCFzZWxlY3Rpb25Db250cm9sbGVyLT5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dO
U1RSRUFNLCAoZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkgewog
ICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKG1f
ZnJhbWUtPmRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCBncmFudWxhcml0eSk7CkBAIC02MTcsOCAr
NjEyLDggQEAgdm9pZCBFZGl0b3I6OnJlbW92ZUZvcm1hdHRpbmdBbmRTdHlsZSgpCiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAKICAgICAvLyBNYWtl
IGEgcGxhaW4gdGV4dCBzdHJpbmcgZnJvbSB0aGUgc2VsZWN0aW9uIHRvIHJlbW92ZSBmb3JtYXR0
aW5nIGxpa2UgdGFibGVzIGFuZCBsaXN0cy4KLSAgICBTdHJpbmcgc3RyaW5nID0gbV9mcmFtZS0+
c2VsZWN0aW9uQ29udHJvbGxlcigpLT50b1N0cmluZygpOwotICAgIAorICAgIFN0cmluZyBzdHJp
bmcgPSBwbGFpblRleHQobV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rpb24o
KS50b1JhbmdlKCkuZ2V0KCkpOworCiAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IHN0eWxlIGZvciB0
aGlzIGVkaXRhYmxlIHJvb3QsIGl0J3MgdGhlIHN0eWxlIHRoYXQgd2UnbGwgZ2l2ZSB0aGUKICAg
ICAvLyBjb250ZW50IHRoYXQgd2UncmUgb3BlcmF0aW5nIG9uLgogICAgIE5vZGUqIHJvb3QgPSBt
X2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKQEAg
LTE2NzAsOCArMTY2NSw3IEBAIHZvaWQgRWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbigpCiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdl
KQogICAgICAgICByZXR1cm47Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9mcmFt
ZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBE
T1dOU1RSRUFNLCBmYWxzZSwgZWMpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UpOwogfQog
CiB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKQEAgLTE3NDIsOSArMTczNiw5IEBA
IHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcKICAgICBpZiAoIXRleHQu
aXNFbXB0eSgpKSB7CiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgdGV4dCwgdHJ1ZSwgdHJ1ZSk7CiAKLSAgICAgICAgTm9kZSogYmFzZU5vZGUg
PSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmJhc2VOb2RlKCk7CisgICAgICAgIE5v
ZGUqIGJhc2VOb2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5iYXNlKCkubm9k
ZSgpOwogICAgICAgICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29u
dHJvbGxlcigpLT5iYXNlKCkub2Zmc2V0KCk7Ci0gICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBt
X2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmV4dGVudE5vZGUoKTsKKyAgICAgICAgTm9k
ZSogZXh0ZW50Tm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+ZXh0ZW50KCku
bm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBleHRlbnRPZmZzZXQgPSBtX2ZyYW1lLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPmV4dGVudCgpLm9mZnNldCgpOwogCiAgICAgICAgIGlmIChiYXNlTm9k
ZSAmJiBiYXNlTm9kZSA9PSBleHRlbnROb2RlICYmIGJhc2VOb2RlLT5pc1RleHROb2RlKCkgJiYg
YmFzZU9mZnNldCArIHRleHQubGVuZ3RoKCkgPT0gZXh0ZW50T2Zmc2V0KSB7CkBAIC0xNzYzLDgg
KzE3NTcsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nCiAgICAg
ICAgICAgICB1bnNpZ25lZCBzdGFydCA9IG1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQs
IGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBtaW4obWF4KHN0YXJ0
LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG5ldyBSYW5nZShiYXNlTm9kZS0+ZG9jdW1l
bnQoKSwgYmFzZU5vZGUsIHN0YXJ0LCBiYXNlTm9kZSwgZW5kKTsgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIG1fZnJhbWUtPnNl
bGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLmdldCgp
LCBET1dOU1RSRUFNLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9u
Q29udHJvbGxlcigpLT5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERPV05T
VFJFQU0sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjc2OTApCisrKyBXZWJDb3JlL2VkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw1NiArNDA3
LDYgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIHJldHVy
biBwb3M7CiB9CiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KGNvbnN0IFN0cmlu
ZyAmYWx0ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyAmZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBTdHJp
bmcgJmdyYW51bGFyaXR5U3RyaW5nLCBib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0gICAgU3RyaW5n
IGFsdGVyU3RyaW5nTG93ZXIgPSBhbHRlclN0cmluZy5sb3dlcigpOwotICAgIEVBbHRlcmF0aW9u
IGFsdGVyOwotICAgIGlmIChhbHRlclN0cmluZ0xvd2VyID09ICJleHRlbmQiKQotICAgICAgICBh
bHRlciA9IEVYVEVORDsKLSAgICBlbHNlIGlmIChhbHRlclN0cmluZ0xvd2VyID09ICJtb3ZlIikK
LSAgICAgICAgYWx0ZXIgPSBNT1ZFOwotICAgIGVsc2UgCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBTdHJpbmcgZGlyZWN0aW9uU3RyaW5nTG93ZXIgPSBkaXJlY3Rpb25TdHJpbmcu
bG93ZXIoKTsKLSAgICBFRGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICBpZiAoZGlyZWN0aW9uU3Ry
aW5nTG93ZXIgPT0gImZvcndhcmQiKQotICAgICAgICBkaXJlY3Rpb24gPSBGT1JXQVJEOwotICAg
IGVsc2UgaWYgKGRpcmVjdGlvblN0cmluZ0xvd2VyID09ICJiYWNrd2FyZCIpCi0gICAgICAgIGRp
cmVjdGlvbiA9IEJBQ0tXQVJEOwotICAgIGVsc2UgaWYgKGRpcmVjdGlvblN0cmluZ0xvd2VyID09
ICJsZWZ0IikKLSAgICAgICAgZGlyZWN0aW9uID0gTEVGVDsKLSAgICBlbHNlIGlmIChkaXJlY3Rp
b25TdHJpbmdMb3dlciA9PSAicmlnaHQiKQotICAgICAgICBkaXJlY3Rpb24gPSBSSUdIVDsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgU3RyaW5nIGdyYW51
bGFyaXR5U3RyaW5nTG93ZXIgPSBncmFudWxhcml0eVN0cmluZy5sb3dlcigpOwotICAgIFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eTsKLSAgICBpZiAoZ3JhbnVsYXJpdHlTdHJpbmdMb3dlciA9
PSAiY2hhcmFjdGVyIikKLSAgICAgICAgZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0
eTsKLSAgICBlbHNlIGlmIChncmFudWxhcml0eVN0cmluZ0xvd2VyID09ICJ3b3JkIikKLSAgICAg
ICAgZ3JhbnVsYXJpdHkgPSBXb3JkR3JhbnVsYXJpdHk7Ci0gICAgZWxzZSBpZiAoZ3JhbnVsYXJp
dHlTdHJpbmdMb3dlciA9PSAic2VudGVuY2UiKQotICAgICAgICBncmFudWxhcml0eSA9IFNlbnRl
bmNlR3JhbnVsYXJpdHk7Ci0gICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmdMb3dlciA9PSAi
bGluZSIpCi0gICAgICAgIGdyYW51bGFyaXR5ID0gTGluZUdyYW51bGFyaXR5OwotICAgIGVsc2Ug
aWYgKGdyYW51bGFyaXR5U3RyaW5nTG93ZXIgPT0gInBhcmFncmFwaCIpCi0gICAgICAgIGdyYW51
bGFyaXR5ID0gUGFyYWdyYXBoR3JhbnVsYXJpdHk7Ci0gICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlT
dHJpbmdMb3dlciA9PSAibGluZWJvdW5kYXJ5IikKLSAgICAgICAgZ3JhbnVsYXJpdHkgPSBMaW5l
Qm91bmRhcnk7Ci0gICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmdMb3dlciA9PSAic2VudGVu
Y2Vib3VuZGFyeSIpCi0gICAgICAgIGdyYW51bGFyaXR5ID0gU2VudGVuY2VCb3VuZGFyeTsKLSAg
ICBlbHNlIGlmIChncmFudWxhcml0eVN0cmluZ0xvd2VyID09ICJwYXJhZ3JhcGhib3VuZGFyeSIp
Ci0gICAgICAgIGdyYW51bGFyaXR5ID0gUGFyYWdyYXBoQm91bmRhcnk7Ci0gICAgZWxzZSBpZiAo
Z3JhbnVsYXJpdHlTdHJpbmdMb3dlciA9PSAiZG9jdW1lbnRib3VuZGFyeSIpCi0gICAgICAgIGdy
YW51bGFyaXR5ID0gRG9jdW1lbnRCb3VuZGFyeTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICByZXR1cm4gbW9kaWZ5KGFsdGVyLCBkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCB1c2VyVHJpZ2dlcmVkKTsKLX0KLQogYm9vbCBTZWxlY3Rpb25Db250
cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIEVEaXJlY3Rpb24gZGlyLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBpZiAodXNl
clRyaWdnZXJlZCkgewpAQCAtNzA2LDI0MCArNjU2LDYgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXROZWVkc0xheW91dAogICAgIG1fbmVlZHNMYXlvdXQgPSBmbGFnOwogfQogCi1TdHJp
bmcgU2VsZWN0aW9uQ29udHJvbGxlcjo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTm9uZSgp
KQotICAgICAgICByZXR1cm4gIk5vbmUiOwotICAgIGVsc2UgaWYgKGlzQ2FyZXQoKSkKLSAgICAg
ICAgcmV0dXJuICJDYXJldCI7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gIlJhbmdlIjsKLX0K
LQotLy8gVGhlc2UgbWV0aG9kcyBhcmUgYWNjZXNzaWJsZSB2aWEgSlMgKGFuZCBhcmUgbm90IHVz
ZWQgaW50ZXJuYWxseSksIHNvIHRoZXkgbXVzdCByZXR1cm4gdmFsaWQgRE9NIHBvc2l0aW9ucy4K
LU5vZGUqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmJhc2VOb2RlKCkgY29uc3QKLXsKLSAgICBQb3Np
dGlvbiBiYXNlID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fc2VsLmJhc2UoKSk7Ci0gICAg
cmV0dXJuIGJhc2Uubm9kZSgpOwotfQotCi1pbnQgU2VsZWN0aW9uQ29udHJvbGxlcjo6YmFzZU9m
ZnNldCgpIGNvbnN0Ci17Ci0gICAgUG9zaXRpb24gYmFzZSA9IHJhbmdlQ29tcGxpYW50RXF1aXZh
bGVudChtX3NlbC5iYXNlKCkpOwotICAgIHJldHVybiBiYXNlLm9mZnNldCgpOwotfQotCi1Ob2Rl
KiBTZWxlY3Rpb25Db250cm9sbGVyOjpleHRlbnROb2RlKCkgY29uc3QKLXsKLSAgICBQb3NpdGlv
biBleHRlbnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9zZWwuZXh0ZW50KCkpOwotICAg
IHJldHVybiBleHRlbnQubm9kZSgpOwotfQotCi1pbnQgU2VsZWN0aW9uQ29udHJvbGxlcjo6ZXh0
ZW50T2Zmc2V0KCkgY29uc3QKLXsKLSAgICBQb3NpdGlvbiBleHRlbnQgPSByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQobV9zZWwuZXh0ZW50KCkpOwotICAgIHJldHVybiBleHRlbnQub2Zmc2V0KCk7
Ci19Ci0KLU5vZGUqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmFuY2hvck5vZGUoKSBjb25zdAotewot
ICAgIFBvc2l0aW9uIGFuY2hvciA9IG1fc2VsLmlzQmFzZUZpcnN0KCkgPyBtX3NlbC5zdGFydCgp
IDogbV9zZWwuZW5kKCk7Ci0gICAgYW5jaG9yID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGFu
Y2hvcik7Ci0gICAgcmV0dXJuIGFuY2hvci5ub2RlKCk7Ci19Ci0KLWludCBTZWxlY3Rpb25Db250
cm9sbGVyOjphbmNob3JPZmZzZXQoKSBjb25zdAotewotICAgIFBvc2l0aW9uIGFuY2hvciA9IG1f
c2VsLmlzQmFzZUZpcnN0KCkgPyBtX3NlbC5zdGFydCgpIDogbV9zZWwuZW5kKCk7Ci0gICAgYW5j
aG9yID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGFuY2hvcik7Ci0gICAgcmV0dXJuIGFuY2hv
ci5vZmZzZXQoKTsKLX0KLQotTm9kZSogU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNOb2RlKCkg
Y29uc3QKLXsKLSAgICBQb3NpdGlvbiBmb2N1cyA9IG1fc2VsLmlzQmFzZUZpcnN0KCkgPyBtX3Nl
bC5lbmQoKSA6IG1fc2VsLnN0YXJ0KCk7Ci0gICAgZm9jdXMgPSByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQoZm9jdXMpOwotICAgIHJldHVybiBmb2N1cy5ub2RlKCk7Ci19Ci0KLWludCBTZWxlY3Rp
b25Db250cm9sbGVyOjpmb2N1c09mZnNldCgpIGNvbnN0Ci17Ci0gICAgUG9zaXRpb24gZm9jdXMg
PSBtX3NlbC5pc0Jhc2VGaXJzdCgpID8gbV9zZWwuZW5kKCkgOiBtX3NlbC5zdGFydCgpOwotICAg
IGZvY3VzID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKLSAgICByZXR1cm4gZm9j
dXMub2Zmc2V0KCk7Ci19Ci0KLVN0cmluZyBTZWxlY3Rpb25Db250cm9sbGVyOjp0b1N0cmluZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYWluVGV4dChtX3NlbC50b1JhbmdlKCkuZ2V0KCkpOwot
fQotCi1QYXNzUmVmUHRyPFJhbmdlPiBTZWxlY3Rpb25Db250cm9sbGVyOjpnZXRSYW5nZUF0KGlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGluZGV4IDwgMCB8
fCBpbmRleCA+PSByYW5nZUNvdW50KCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSAgIAotICAgIHJldHVybiBtX3NlbC50b1JhbmdlKCk7
Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQWxsUmFuZ2VzKCkKLXsKLSAg
ICBjbGVhcigpOwotfQotCi0vLyBBZGRzIHIgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByYW5n
ZS4KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6YWRkUmFuZ2UoY29uc3QgUmFuZ2UqIHIpCi17
Ci0gICAgaWYgKCFyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGlzTm9uZSgpKSB7
Ci0gICAgICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24ocikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsLnRvUmFuZ2UoKTsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIGVjKSA9PSAtMSkgewotICAgICAgICAv
LyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBh
bnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIGlmIChyLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIGVj
KSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwgZWMpID09IC0xKQotICAgICAgICAgICAgICAgIC8v
IFRoZSBvcmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2V0
U2VsZWN0aW9uKFNlbGVjdGlvbihyLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlv
bigpLCBET1dOU1RSRUFNKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLy8g
ciBjb250YWlucyB0aGUgb3JpZ2luYWwgcmFuZ2UuCi0gICAgICAgICAgICAgICAgc2V0U2VsZWN0
aW9uKFNlbGVjdGlvbihyKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0
aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIGlmIChyLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgcmFuZ2UuZ2V0KCksIGVjKSA8
IDEpIHsKLSAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsIHJhbmdlLmdldCgpLCBlYykgPT0gLTEpCi0gICAgICAgICAgICAgICAgLy8gVGhl
IG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHIuCi0gICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9u
KFNlbGVjdGlvbihyYW5nZS5nZXQoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAgICAgICAgICAg
ICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByLT5lbmRQ
b3NpdGlvbigpLCBET1dOU1RSRUFNKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAoaXNOb25l
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc0NvbGxhcHNlZCgpKQotICAgICAgICBt
b2RpZnkoRVhURU5ELCBCQUNLV0FSRCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwotCi0gICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9zZWwudG9SYW5nZSgpOwotCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+ZGVsZXRlQ29udGVudHMoZWMpOwot
ICAgIEFTU0VSVCghZWMpOwotICAgIAotICAgIHNldEJhc2VBbmRFeHRlbnQoc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoZWMpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldChlYyksIHNl
bGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZz
ZXQoZWMpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Y29udGFpbnNOb2RlKGNvbnN0IE5vZGUqIG4sIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25z
dAotewotICAgIGlmICghbiB8fCBpc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgTm9kZSogcGFyZW50Tm9kZSA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICB1bnNpZ25lZCBub2Rl
SW5kZXggPSBuLT5ub2RlSW5kZXgoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBtX3NlbC50b1JhbmdlKCk7Ci0KLSAgICBpZiAoIXBhcmVudE5vZGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgbm9kZUZ1bGx5
U2VsZWN0ZWQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJ
bmRleCwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLCBzZWxlY3RlZFJhbmdlLT5z
dGFydE9mZnNldChlYykpID49IDAKLSAgICAgICAgJiYgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBzZWxlY3RlZFJhbmdlLT5lbmRDb250YWlu
ZXIoZWMpLCBzZWxlY3RlZFJhbmdlLT5lbmRPZmZzZXQoZWMpKSA8PSAwOwotICAgIEFTU0VSVCgh
ZWMpOwotICAgIGlmIChub2RlRnVsbHlTZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0ZWQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCwgc2VsZWN0ZWRSYW5nZS0+ZW5kQ29udGFpbmVyKGVj
KSwgc2VsZWN0ZWRSYW5nZS0+ZW5kT2Zmc2V0KGVjKSkgPiAwCi0gICAgICAgIHx8IFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgc2VsZWN0ZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldChlYykp
IDwgMDsKLSAgICBBU1NFUlQoIWVjKTsKLSAgICBpZiAobm9kZUZ1bGx5VW5zZWxlY3RlZCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFsbG93UGFydGlhbCB8fCBuLT5pc1Rl
eHROb2RlKCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0QWxsQ2hpbGRy
ZW4oTm9kZSogbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFuKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBUaGlzIGRvZXNuJ3QgKGFuZCBzaG91bGRuJ3QpIHNlbGVjdCB0ZXh0
IG5vZGUgY2hhcmFjdGVycy4KLSAgICBzZXRCYXNlQW5kRXh0ZW50KG4sIDAsIG4sIG4tPmNoaWxk
Tm9kZUNvdW50KCksIGVjKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRCYXNl
QW5kRXh0ZW50KE5vZGUgKmJhc2VOb2RlLCBpbnQgYmFzZU9mZnNldCwgTm9kZSAqZXh0ZW50Tm9k
ZSwgaW50IGV4dGVudE9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJhc2VP
ZmZzZXQgPCAwIHx8IGV4dGVudE9mZnNldCA8IDApIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpF
X0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZUJhc2UgPSBWaXNpYmxlUG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQsIERPV05TVFJFQU0p
OwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKGV4
dGVudE5vZGUsIGV4dGVudE9mZnNldCwgRE9XTlNUUkVBTSk7Ci0gICAgCi0gICAgbW92ZVRvKHZp
c2libGVCYXNlLCB2aXNpYmxlRXh0ZW50KTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
OjpzZXRQb3NpdGlvbihOb2RlICpub2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1vdmVUbyhWaXNpYmxlUG9zaXRpb24obm9kZSwg
b2Zmc2V0LCBET1dOU1RSRUFNKSk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y29s
bGFwc2UoTm9kZSAqbm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwg
RE9XTlNUUkVBTSkpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvbGxhcHNlVG9F
bmQoKQotewotICAgIG1vdmVUbyhWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIERPV05TVFJF
QU0pKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjb2xsYXBzZVRvU3RhcnQoKQot
ewotICAgIG1vdmVUbyhWaXNpYmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgRE9XTlNUUkVBTSkp
OwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmVtcHR5KCkKLXsKLSAgICBtb3ZlVG8o
VmlzaWJsZVBvc2l0aW9uKCkpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmV4dGVu
ZChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
IW5vZGUpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAob2Zmc2V0IDwgMAotICAgICAgICB8fCBub2RlLT5vZmZzZXRJbkNo
YXJhY3RlcnMoKSAmJiBvZmZzZXQgPiBjYXJldE1heE9mZnNldChub2RlKQotICAgICAgICB8fCAh
bm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgJiYgb2Zmc2V0ID4gKGludClub2RlLT5jaGlsZE5v
ZGVDb3VudCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9zZWwuZXhwYW5kVXNpbmdHcmFudWxhcml0eShDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7Ci0gICAgc2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERP
V05TVFJFQU0pKTsKLX0KLQogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpsYXlvdXQoKQogewog
ICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWwuc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSB8
fCAhbV9zZWwuZW5kKCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKQEAgLTEyNDQsMjIgKzk2MCwx
OSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFsbCgpCiAgICAgbV9mcmFtZS0+
bm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKIH0KIAotdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIGNsb3NlVHlwaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBh
ZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZykKIHsKLSAgICBlYyA9IDA7Ci0gICAgCi0gICAgaWYg
KCFyYW5nZSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAorICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKTsKICAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gcmFuZ2Ut
PmVuZENvbnRhaW5lcihlYyk7CiAgICAgaWYgKGVjKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBBU1NFUlQoc3RhcnRDb250YWluZXIpOwogICAgIEFT
U0VSVChlbmRDb250YWluZXIpOwpAQCAtMTI3MSwyMCArOTg0LDIxIEBAIHZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW4KICAgICAvLyB0aGV5IHN0YXJ0IGF0IHRoZSBiZWdp
bm5pbmcgb2YgdGhlIG5leHQgbGluZSBpbnN0ZWFkCiAgICAgYm9vbCBjb2xsYXBzZWQgPSByYW5n
ZS0+Y29sbGFwc2VkKGVjKTsKICAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIGludCBzdGFydE9mZnNldCA9IHJhbmdlLT5zdGFydE9m
ZnNldChlYyk7CiAgICAgaWYgKGVjKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGludCBlbmRPZmZzZXQgPSByYW5nZS0+ZW5kT2Zmc2V0KGVjKTsKICAgICBp
ZiAoZWMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IC8vIEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgY29sbGFwc2Vk
ID8gYWZmaW5pdHkgOiBET1dOU1RSRUFNKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVu
ZChlbmRDb250YWluZXIsIGVuZE9mZnNldCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIHNl
dFNlbGVjdGlvbihTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgY2xvc2VUeXBp
bmcpOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Omlz
SW5QYXNzd29yZEZpZWxkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjc2ODkpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWw7IH0KICAg
ICB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mLCBib29sIGNsb3NlVHlwaW5nID0g
dHJ1ZSwgYm9vbCBjbGVhclR5cGluZ1N0eWxlID0gdHJ1ZSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0g
ZmFsc2UpOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgYm9v
bCBjbG9zZVR5cGluZywgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgc2V0U2VsZWN0ZWRSYW5n
ZShSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZyk7CiAgICAgdm9pZCBzZWxlY3RB
bGwoKTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgCkBAIC0xMDMsNDYgKzEwMyw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqKTsKIAotICAgIC8vIFNh
ZmFyaSBTZWxlY3Rpb24gT2JqZWN0IEFQSQotICAgIC8vIFRoZXNlIG1ldGhvZHMgcmV0dXJuIHRo
ZSB2YWxpZCBlcXVpdmFsZW50cyBvZiBpbnRlcm5hbCBlZGl0aW5nIHBvc2l0aW9ucy4KLSAgICBO
b2RlKiBiYXNlTm9kZSgpIGNvbnN0OwotICAgIE5vZGUqIGV4dGVudE5vZGUoKSBjb25zdDsKLSAg
ICBpbnQgYmFzZU9mZnNldCgpIGNvbnN0OwotICAgIGludCBleHRlbnRPZmZzZXQoKSBjb25zdDsK
LSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QmFzZUFuZEV4dGVudChOb2Rl
KiBiYXNlTm9kZSwgaW50IGJhc2VPZmZzZXQsIE5vZGUqIGV4dGVudE5vZGUsIGludCBleHRlbnRP
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFBvc2l0aW9uKE5vZGUqLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBtb2RpZnkoY29uc3QgU3RyaW5nJiBh
bHRlclN0cmluZywgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIGNvbnN0IFN0cmluZyYg
Z3JhbnVsYXJpdHlTdHJpbmcsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAgICAKLSAg
ICAvLyBNb3ppbGxhIFNlbGVjdGlvbiBPYmplY3QgQVBJCi0gICAgLy8gSW4gRmlyZWZveCwgYW5j
aG9yL2ZvY3VzIGFyZSB0aGUgZXF1YWwgdG8gdGhlIHN0YXJ0L2VuZCBvZiB0aGUgc2VsZWN0aW9u
LAotICAgIC8vIGJ1dCByZWZsZWN0IHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHNlbGVjdGlv
biB3YXMgbWFkZSBieSB0aGUgdXNlci4gIFRoYXQgZG9lcwotICAgIC8vIG5vdCBtZWFuIHRoYXQg
dGhleSBhcmUgYmFzZS9leHRlbnQsIHNpbmNlIHRoZSBiYXNlL2V4dGVudCBkb24ndCByZWZsZWN0
Ci0gICAgLy8gZXhwYW5zaW9uLgotICAgIC8vIFRoZXNlIG1ldGhvZHMgcmV0dXJuIHRoZSB2YWxp
ZCBlcXVpdmFsZW50cyBvZiBpbnRlcm5hbCBlZGl0aW5nIHBvc2l0aW9ucy4KLSAgICBOb2RlKiBh
bmNob3JOb2RlKCkgY29uc3Q7Ci0gICAgaW50IGFuY2hvck9mZnNldCgpIGNvbnN0OwotICAgIE5v
ZGUqIGZvY3VzTm9kZSgpIGNvbnN0OwotICAgIGludCBmb2N1c09mZnNldCgpIGNvbnN0OwotICAg
IGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiAhaXNSYW5nZSgpOyB9Ci0gICAgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBjb2xsYXBzZShOb2RlKiwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgY29sbGFwc2VUb0VuZCgpOwotICAgIHZvaWQg
Y29sbGFwc2VUb1N0YXJ0KCk7Ci0gICAgdm9pZCBleHRlbmQoTm9kZSosIGludCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBnZXRSYW5nZUF0KGludCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIGludCByYW5nZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gIWlzTm9uZSgpID8gMSA6IDA7IH0KLSAgICB2b2lkIHJlbW92ZUFsbFJhbmdlcygpOwot
ICAgIHZvaWQgYWRkUmFuZ2UoY29uc3QgUmFuZ2UqKTsKLSAgICB2b2lkIGRlbGV0ZUZyb21Eb2N1
bWVudCgpOwotICAgIGJvb2wgY29udGFpbnNOb2RlKGNvbnN0IE5vZGUqLCBib29sIGFsbG93UGFy
dGlhbCkgY29uc3Q7Ci0gICAgdm9pZCBzZWxlY3RBbGxDaGlsZHJlbihOb2RlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIAotICAgIC8vIE1pY3Jvc29mdCBTZWxlY3Rpb24gT2JqZWN0IEFQSQotICAg
IHZvaWQgZW1wdHkoKTsKLSAgICAvL3ZvaWQgY2xlYXIoKTsKLSAgICAvL1RleHRSYW5nZSAqY3Jl
YXRlUmFuZ2UoKTsKLSAgICAKICAgICBib29sIHJlY29tcHV0ZUNhcmV0UmVjdCgpOyAvLyByZXR1
cm5zIHRydWUgaWYgY2FyZXQgcmVjdCBtb3ZlZAogICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVj
dCgpOwogICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNzY4OSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQAogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJU
ZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xMjkyLDcgKzEyOTMs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwgbm90IHZpb2xhdGUg
dGhlIG1heExlbmd0aC4KICAgICAgICAgaW50IG9sZExlbiA9IG51bUdyYXBoZW1lQ2x1c3RlcnMo
dmFsdWUoKS5pbXBsKCkpOwogICAgICAgICBBU1NFUlQob2xkTGVuIDw9IG1heExlbmd0aCgpKTsK
LSAgICAgICAgaW50IHNlbGVjdGlvbkxlbiA9IG51bUdyYXBoZW1lQ2x1c3RlcnMoZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT50b1N0cmluZygpLmltcGwoKSk7Cisg
ICAgICAgIGludCBzZWxlY3Rpb25MZW4gPSBudW1HcmFwaGVtZUNsdXN0ZXJzKHBsYWluVGV4dChk
b2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigpLnRv
UmFuZ2UoKS5nZXQoKSkuaW1wbCgpKTsKICAgICAgICAgQVNTRVJUKG9sZExlbiA+PSBzZWxlY3Rp
b25MZW4pOwogICAgICAgICBpbnQgbWF4TmV3TGVuID0gbWF4TGVuZ3RoKCkgLSAob2xkTGVuIC0g
c2VsZWN0aW9uTGVuKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDI3Njg5
KQorKysgV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDExICszMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTVNlbGVjdGlv
bi5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01NywxODkgKzYwLDM3OCBAQCBOb2RlKiBET01TZWxlY3Rpb246OmFuY2hvck5v
ZGUoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+YW5jaG9yTm9kZSgpOworCisg
ICAgY29uc3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9s
bGVyKCktPnNlbGVjdGlvbigpOworICAgIFBvc2l0aW9uIGFuY2hvciA9IHNlbGVjdGlvbi5pc0Jh
c2VGaXJzdCgpID8gc2VsZWN0aW9uLnN0YXJ0KCkgOiBzZWxlY3Rpb24uZW5kKCk7CisgICAgYW5j
aG9yID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGFuY2hvcik7CisgICAgcmV0dXJuIGFuY2hv
ci5ub2RlKCk7CiB9CiAKIE5vZGUqIERPTVNlbGVjdGlvbjo6YmFzZU5vZGUoKSBjb25zdAogewog
ICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZnJhbWUt
PnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+YmFzZU5vZGUoKTsKKyAgICByZXR1cm4gcmFuZ2VDb21w
bGlhbnRFcXVpdmFsZW50KG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9u
KCkuYmFzZSgpKS5ub2RlKCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmFuY2hvck9mZnNldCgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5hbmNob3JPZmZzZXQoKTsKKworICAg
IGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpLT5zZWxlY3Rpb24oKTsKKyAgICBQb3NpdGlvbiBhbmNob3IgPSBzZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSA/IHNlbGVjdGlvbi5zdGFydCgpIDogc2VsZWN0aW9uLmVuZCgpOworICAgIGFuY2hv
ciA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChhbmNob3IpOworICAgIHJldHVybiBhbmNob3Iu
b2Zmc2V0KCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmJhc2VPZmZzZXQoKSBjb25zdAogewog
ICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZnJhbWUt
PnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+YmFzZU9mZnNldCgpOworICAgIHJldHVybiByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQobV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rp
b24oKS5iYXNlKCkpLm9mZnNldCgpOwogfQogCiBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9k
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5mb2N1c05vZGUoKTsKKworICAg
IGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpLT5zZWxlY3Rpb24oKTsKKyAgICBQb3NpdGlvbiBmb2N1cyA9IHNlbGVjdGlvbi5pc0Jhc2VG
aXJzdCgpID8gc2VsZWN0aW9uLmVuZCgpIDogc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgZm9jdXMg
PSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZm9jdXMpOworICAgIHJldHVybiBmb2N1cy5ub2Rl
KCk7CiB9CiAKIE5vZGUqIERPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9kZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9mcmFtZS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5leHRlbnROb2RlKCk7CisgICAgcmV0dXJuIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudChtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigp
LmV4dGVudCgpKS5ub2RlKCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmZvY3VzT2Zmc2V0KCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmZvY3VzT2Zmc2V0KCk7CisKKyAgICBj
b25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+c2VsZWN0aW9uKCk7CisgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24uaXNCYXNlRmly
c3QoKSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOworICAgIGZvY3VzID0g
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKKyAgICByZXR1cm4gZm9jdXMub2Zmc2V0
KCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmV4dGVudE9mZnNldCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9mcmFtZS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5leHRlbnRPZmZzZXQoKTsKKyAgICByZXR1cm4gcmFuZ2VDb21w
bGlhbnRFcXVpdmFsZW50KG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9u
KCkuZXh0ZW50KCkpLm9mZnNldCgpOwogfQogCiBib29sIERPTVNlbGVjdGlvbjo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzQ29sbGFwc2VkKCk7
CisgICAgcmV0dXJuICFtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzUmFuZ2UoKTsK
IH0KIAogU3RyaW5nIERPTVNlbGVjdGlvbjo6dHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Zy
YW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVj
dGlvbkNvbnRyb2xsZXIoKS0+dHlwZSgpOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2Vs
ZWN0aW9uQ29udHJvbGxlciA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKKworICAg
IGlmIChzZWxlY3Rpb25Db250cm9sbGVyLT5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuICJOb25l
IjsKKyAgICBlbHNlIGlmIChzZWxlY3Rpb25Db250cm9sbGVyLT5pc0NhcmV0KCkpCisgICAgICAg
IHJldHVybiAiQ2FyZXQiOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICJSYW5nZSI7CiB9CiAK
IGludCBET01TZWxlY3Rpb246OnJhbmdlQ291bnQoKSBjb25zdAogewogICAgIGlmICghbV9mcmFt
ZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRy
b2xsZXIoKS0+cmFuZ2VDb3VudCgpOworICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb25Db250
cm9sbGVyKCktPmlzTm9uZSgpID8gMCA6IDE7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xs
YXBzZShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250
cm9sbGVyKCktPmNvbGxhcHNlKG5vZGUsIG9mZnNldCwgZWMpOworCisgICAgaWYgKG9mZnNldCA8
IDApIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPm1vdmVUbyhWaXNpYmxlUG9z
aXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
Ojpjb2xsYXBzZVRvRW5kKCkKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmNvbGxhcHNlVG9FbmQoKTsKKwor
ICAgIGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJv
bGxlcigpLT5zZWxlY3Rpb24oKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCkt
Pm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLmVuZCgpLCBET1dOU1RSRUFNKSk7CiB9
CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvU3RhcnQoKQogewogICAgIGlmICghbV9m
cmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+Y29sbGFwc2VUb1N0YXJ0KCk7CisKKyAgICBjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCk7CisgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlv
bi5zdGFydCgpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjplbXB0eSgp
CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5lbXB0eSgpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRy
b2xsZXIoKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbigpKTsKIH0KIAogdm9pZCBET01TZWxlY3Rp
b246OnNldEJhc2VBbmRFeHRlbnQoTm9kZSogYmFzZU5vZGUsIGludCBiYXNlT2Zmc2V0LCBOb2Rl
KiBleHRlbnROb2RlLCBpbnQgZXh0ZW50T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb25D
b250cm9sbGVyKCktPnNldEJhc2VBbmRFeHRlbnQoYmFzZU5vZGUsIGJhc2VPZmZzZXQsIGV4dGVu
dE5vZGUsIGV4dGVudE9mZnNldCwgZWMpOworCisgICAgaWYgKGJhc2VPZmZzZXQgPCAwIHx8IGV4
dGVudE9mZnNldCA8IDApIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUJhc2UgPSBWaXNpYmxl
UG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlRXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKGV4dGVudE5vZGUsIGV4dGVu
dE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgCisgICAgbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJv
bGxlcigpLT5tb3ZlVG8odmlzaWJsZUJhc2UsIHZpc2libGVFeHRlbnQpOwogfQogCiB2b2lkIERP
TVNlbGVjdGlvbjo6c2V0UG9zaXRpb24oTm9kZSogbm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgbV9m
cmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRQb3NpdGlvbihub2RlLCBvZmZzZXQsIGVj
KTsKKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0pKTsKIH0K
IAogdm9pZCBET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZnJh
bWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0UG9zaXRpb24obm9kZSwgMCwgZWMpOworICAg
IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihu
b2RlLCAwLCBET1dOU1RSRUFNKSk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjptb2RpZnkoY29u
c3QgU3RyaW5nJiBhbHRlciwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIGNvbnN0IFN0cmluZyYg
Z3JhbnVsYXJpdHkpCit2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0
ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIGdy
YW51bGFyaXR5U3RyaW5nKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KGFsdGVyLCBkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKKworICAgIFN0cmluZyBhbHRlclN0cmluZ0xvd2VyID0gYWx0ZXJT
dHJpbmcubG93ZXIoKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpFQWx0ZXJhdGlvbiBhbHRl
cjsKKyAgICBpZiAoYWx0ZXJTdHJpbmdMb3dlciA9PSAiZXh0ZW5kIikKKyAgICAgICAgYWx0ZXIg
PSBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQ7CisgICAgZWxzZSBpZiAoYWx0ZXJTdHJpbmdM
b3dlciA9PSAibW92ZSIpCisgICAgICAgIGFsdGVyID0gU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9W
RTsKKyAgICBlbHNlIAorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5nIGRpcmVjdGlv
blN0cmluZ0xvd2VyID0gZGlyZWN0aW9uU3RyaW5nLmxvd2VyKCk7CisgICAgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6RURpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgaWYgKGRpcmVjdGlvblN0cmluZ0xv
d2VyID09ICJmb3J3YXJkIikKKyAgICAgICAgZGlyZWN0aW9uID0gU2VsZWN0aW9uQ29udHJvbGxl
cjo6Rk9SV0FSRDsKKyAgICBlbHNlIGlmIChkaXJlY3Rpb25TdHJpbmdMb3dlciA9PSAiYmFja3dh
cmQiKQorICAgICAgICBkaXJlY3Rpb24gPSBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRDsK
KyAgICBlbHNlIGlmIChkaXJlY3Rpb25TdHJpbmdMb3dlciA9PSAibGVmdCIpCisgICAgICAgIGRp
cmVjdGlvbiA9IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQ7CisgICAgZWxzZSBpZiAoZGlyZWN0
aW9uU3RyaW5nTG93ZXIgPT0gInJpZ2h0IikKKyAgICAgICAgZGlyZWN0aW9uID0gU2VsZWN0aW9u
Q29udHJvbGxlcjo6UklHSFQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIFN0cmluZyBncmFudWxhcml0eVN0cmluZ0xvd2VyID0gZ3JhbnVsYXJpdHlTdHJpbmcubG93
ZXIoKTsKKyAgICBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHk7CisgICAgaWYgKGdyYW51bGFy
aXR5U3RyaW5nTG93ZXIgPT0gImNoYXJhY3RlciIpCisgICAgICAgIGdyYW51bGFyaXR5ID0gQ2hh
cmFjdGVyR3JhbnVsYXJpdHk7CisgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmdMb3dlciA9
PSAid29yZCIpCisgICAgICAgIGdyYW51bGFyaXR5ID0gV29yZEdyYW51bGFyaXR5OworICAgIGVs
c2UgaWYgKGdyYW51bGFyaXR5U3RyaW5nTG93ZXIgPT0gInNlbnRlbmNlIikKKyAgICAgICAgZ3Jh
bnVsYXJpdHkgPSBTZW50ZW5jZUdyYW51bGFyaXR5OworICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5
U3RyaW5nTG93ZXIgPT0gImxpbmUiKQorICAgICAgICBncmFudWxhcml0eSA9IExpbmVHcmFudWxh
cml0eTsKKyAgICBlbHNlIGlmIChncmFudWxhcml0eVN0cmluZ0xvd2VyID09ICJwYXJhZ3JhcGgi
KQorICAgICAgICBncmFudWxhcml0eSA9IFBhcmFncmFwaEdyYW51bGFyaXR5OworICAgIGVsc2Ug
aWYgKGdyYW51bGFyaXR5U3RyaW5nTG93ZXIgPT0gImxpbmVib3VuZGFyeSIpCisgICAgICAgIGdy
YW51bGFyaXR5ID0gTGluZUJvdW5kYXJ5OworICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5U3RyaW5n
TG93ZXIgPT0gInNlbnRlbmNlYm91bmRhcnkiKQorICAgICAgICBncmFudWxhcml0eSA9IFNlbnRl
bmNlQm91bmRhcnk7CisgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmdMb3dlciA9PSAicGFy
YWdyYXBoYm91bmRhcnkiKQorICAgICAgICBncmFudWxhcml0eSA9IFBhcmFncmFwaEJvdW5kYXJ5
OworICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5U3RyaW5nTG93ZXIgPT0gImRvY3VtZW50Ym91bmRh
cnkiKQorICAgICAgICBncmFudWxhcml0eSA9IERvY3VtZW50Qm91bmRhcnk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPm1v
ZGlmeShhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSwgZmFsc2UpOwogfQogCi12b2lkIERP
TVNlbGVjdGlvbjo6ZXh0ZW5kKE5vZGUqIG4sIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBET01TZWxlY3Rpb246OmV4dGVuZChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmV4dGVuZChuLCBvZmZzZXQsIGVjKTsK
KworICAgIGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwCisgICAgICAgIHx8IG5vZGUt
Pm9mZnNldEluQ2hhcmFjdGVycygpICYmIG9mZnNldCA+IGNhcmV0TWF4T2Zmc2V0KG5vZGUpCisg
ICAgICAgIHx8ICFub2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSAmJiBvZmZzZXQgPiAoaW50KW5v
ZGUtPmNoaWxkTm9kZUNvdW50KCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlv
bkNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCk7CisgICAgc2VsZWN0
aW9uQ29udHJvbGxlci0+ZXhwYW5kVXNpbmdHcmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CisgICAgc2VsZWN0aW9uQ29udHJvbGxlci0+c2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihu
b2RlLCBvZmZzZXQsIERPV05TVFJFQU0pKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4gRE9NU2Vs
ZWN0aW9uOjpnZXRSYW5nZUF0KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9mcmFtZS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5nZXRSYW5nZUF0KGluZGV4LCBlYyk7CisKKyAgICBpZiAoaW5k
ZXggPCAwIHx8IGluZGV4ID49IHJhbmdlQ291bnQoKSkgeworICAgICAgICBlYyA9IElOREVYX1NJ
WkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjb25zdCBTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCk7
CisgICAgcmV0dXJuIHNlbGVjdGlvbi50b1JhbmdlKCk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
OjpyZW1vdmVBbGxSYW5nZXMoKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlQWxsUmFuZ2VzKCk7
CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5jbGVhcigpOwogfQogCi12b2lk
IERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UqIHJhbmdlKQordm9pZCBET01TZWxlY3Rpb246
OmFkZFJhbmdlKFJhbmdlKiByKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+YWRkUmFuZ2UocmFuZ2UpOwor
ICAgIGlmICghcikKKyAgICAgICAgcmV0dXJuOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciog
c2VsZWN0aW9uQ29udHJvbGxlciA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKKyAg
ICAKKyAgICBpZiAoc2VsZWN0aW9uQ29udHJvbGxlci0+aXNOb25lKCkpIHsKKyAgICAgICAgc2Vs
ZWN0aW9uQ29udHJvbGxlci0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbihyKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uQ29udHJv
bGxlci0+c2VsZWN0aW9uKCkudG9SYW5nZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBy
YW5nZS5nZXQoKSwgZWMpID09IC0xKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlz
Y29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdl
IGRvbid0IGludGVyc2VjdC4KKyAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX1NUQVJULCByYW5nZS5nZXQoKSwgZWMpID4gLTEpIHsKKyAgICAgICAgICAg
IGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJhbmdlLmdl
dCgpLCBlYykgPT0gLTEpCisgICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGFu
ZCByIGludGVyc2VjdC4KKyAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyLT5zZXRT
ZWxlY3Rpb24oU2VsZWN0aW9uKHItPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9u
KCksIERPV05TVFJFQU0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAvLyBy
IGNvbnRhaW5zIHRoZSBvcmlnaW5hbCByYW5nZS4KKyAgICAgICAgICAgICAgICBzZWxlY3Rpb25D
b250cm9sbGVyLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHIpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rp
b24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2VjdC4K
KyAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5E
LCByYW5nZS5nZXQoKSwgZWMpIDwgMSkgeworICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIGVjKSA9PSAtMSkKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgY29udGFpbnMgci4KKyAgICAgICAg
ICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHJhbmdl
LmdldCgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdp
bmFsIHJhbmdlIGFuZCByIGludGVyc2VjdC4KKyAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250
cm9sbGVyLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHIt
PmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9p
ZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKCFtX2ZyYW1l
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5k
ZWxldGVGcm9tRG9jdW1lbnQoKTsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlv
bkNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCk7CisKKyAgICBpZiAo
c2VsZWN0aW9uQ29udHJvbGxlci0+aXNOb25lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChpc0NvbGxhcHNlZCgpKQorICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyLT5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ELCBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gc2VsZWN0aW9uQ29udHJvbGxlci0+c2VsZWN0aW9uKCkudG9SYW5nZSgpOworCisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgc2VsZWN0ZWRSYW5nZS0+ZGVsZXRlQ29udGVudHMoZWMp
OworICAgIEFTU0VSVCghZWMpOworICAgIAorICAgIHNldEJhc2VBbmRFeHRlbnQoc2VsZWN0ZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldChlYyks
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRP
ZmZzZXQoZWMpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7CiB9CiAKIGJvb2wgRE9NU2VsZWN0aW9u
Ojpjb250YWluc05vZGUoY29uc3QgTm9kZSogbiwgYm9vbCBhbGxvd1BhcnRpYWwpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1f
ZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+Y29udGFpbnNOb2RlKG4sIGFsbG93UGFydGlh
bCk7CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gbV9m
cmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpOworCisgICAgaWYgKCFuIHx8IHNlbGVjdGlvbkNv
bnRyb2xsZXItPmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBw
YXJlbnROb2RlID0gbi0+cGFyZW50Tm9kZSgpOworICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG4t
Pm5vZGVJbmRleCgpOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlv
bkNvbnRyb2xsZXItPnNlbGVjdGlvbigpLnRvUmFuZ2UoKTsKKworICAgIGlmICghcGFyZW50Tm9k
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgYm9vbCBub2RlRnVsbHlTZWxlY3RlZCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMo
cGFyZW50Tm9kZSwgbm9kZUluZGV4LCBzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyks
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSkgPj0gMAorICAgICAgICAmJiBSYW5nZTo6
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIHNlbGVjdGVk
UmFuZ2UtPmVuZENvbnRhaW5lcihlYyksIHNlbGVjdGVkUmFuZ2UtPmVuZE9mZnNldChlYykpIDw9
IDA7CisgICAgQVNTRVJUKCFlYyk7CisgICAgaWYgKG5vZGVGdWxseVNlbGVjdGVkKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGJvb2wgbm9kZUZ1bGx5VW5zZWxlY3RlZCA9IFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBzZWxlY3RlZFJhbmdl
LT5lbmRDb250YWluZXIoZWMpLCBzZWxlY3RlZFJhbmdlLT5lbmRPZmZzZXQoZWMpKSA+IDAKKyAg
ICAgICAgfHwgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5k
ZXggKyAxLCBzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyksIHNlbGVjdGVkUmFuZ2Ut
PnN0YXJ0T2Zmc2V0KGVjKSkgPCAwOworICAgIEFTU0VSVCghZWMpOworICAgIGlmIChub2RlRnVs
bHlVbnNlbGVjdGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYWxsb3dQ
YXJ0aWFsIHx8IG4tPmlzVGV4dE5vZGUoKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OnNlbGVj
dEFsbENoaWxkcmVuKE5vZGUqIG4sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghbV9m
cmFtZSkKKyAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybjsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPnNlbGVjdEFsbENoaWxkcmVuKG4sIGVjKTsKKworICAgIC8vIFRoaXMg
ZG9lc24ndCAoYW5kIHNob3VsZG4ndCkgc2VsZWN0IHRleHQgbm9kZSBjaGFyYWN0ZXJzLgorICAg
IHNldEJhc2VBbmRFeHRlbnQobiwgMCwgbiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOwogfQog
CiBTdHJpbmcgRE9NU2VsZWN0aW9uOjp0b1N0cmluZygpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbkNv
bnRyb2xsZXIoKS0+dG9TdHJpbmcoKTsKKworICAgIHJldHVybiBwbGFpblRleHQobV9mcmFtZS0+
c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rpb24oKS50b1JhbmdlKCkuZ2V0KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5oCShyZXZpc2lvbiAy
NzY4OSkKKysrIFdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsMjYgKzUwLDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CiAKLSAgICAgICAgTm9k
ZSogYW5jaG9yTm9kZSgpIGNvbnN0OworICAgICAgICAvLyBTYWZhcmkgU2VsZWN0aW9uIE9iamVj
dCBBUEkKKyAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyByZXR1cm4gdGhlIHZhbGlkIGVxdWl2YWxl
bnRzIG9mIGludGVybmFsIGVkaXRpbmcgcG9zaXRpb25zLgogICAgICAgICBOb2RlKiBiYXNlTm9k
ZSgpIGNvbnN0OwotICAgICAgICBpbnQgYW5jaG9yT2Zmc2V0KCkgY29uc3Q7CisgICAgICAgIE5v
ZGUqIGV4dGVudE5vZGUoKSBjb25zdDsKICAgICAgICAgaW50IGJhc2VPZmZzZXQoKSBjb25zdDsK
KyAgICAgICAgaW50IGV4dGVudE9mZnNldCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgdHlwZSgp
IGNvbnN0OworICAgICAgICB2b2lkIHNldEJhc2VBbmRFeHRlbnQoTm9kZSogYmFzZU5vZGUsIGlu
dCBiYXNlT2Zmc2V0LCBOb2RlKiBleHRlbnROb2RlLCBpbnQgZXh0ZW50T2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7CisgICAgICAgIHZvaWQgc2V0UG9zaXRpb24oTm9kZSosIGludCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBzZXRQb3NpdGlvbihOb2RlKiwgRXhjZXB0aW9u
Q29kZSYpOworICAgICAgICB2b2lkIG1vZGlmeShjb25zdCBTdHJpbmcmIGFsdGVyLCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgY29uc3QgU3RyaW5nJiBncmFudWxhcml0eSk7CisKKyAgICAgICAg
Ly8gTW96aWxsYSBTZWxlY3Rpb24gT2JqZWN0IEFQSQorICAgICAgICAvLyBJbiBGaXJlZm94LCBh
bmNob3IvZm9jdXMgYXJlIHRoZSBlcXVhbCB0byB0aGUgc3RhcnQvZW5kIG9mIHRoZSBzZWxlY3Rp
b24sCisgICAgICAgIC8vIGJ1dCByZWZsZWN0IHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHNl
bGVjdGlvbiB3YXMgbWFkZSBieSB0aGUgdXNlci4gIFRoYXQgZG9lcworICAgICAgICAvLyBub3Qg
bWVhbiB0aGF0IHRoZXkgYXJlIGJhc2UvZXh0ZW50LCBzaW5jZSB0aGUgYmFzZS9leHRlbnQgZG9u
J3QgcmVmbGVjdAorICAgICAgICAvLyBleHBhbnNpb24uCisgICAgICAgIC8vIFRoZXNlIG1ldGhv
ZHMgcmV0dXJuIHRoZSB2YWxpZCBlcXVpdmFsZW50cyBvZiBpbnRlcm5hbCBlZGl0aW5nIHBvc2l0
aW9ucy4KKyAgICAgICAgTm9kZSogYW5jaG9yTm9kZSgpIGNvbnN0OworICAgICAgICBpbnQgYW5j
aG9yT2Zmc2V0KCkgY29uc3Q7CiAgICAgICAgIE5vZGUqIGZvY3VzTm9kZSgpIGNvbnN0OwotICAg
ICAgICBOb2RlKiBleHRlbnROb2RlKCkgY29uc3Q7CiAgICAgICAgIGludCBmb2N1c09mZnNldCgp
IGNvbnN0OwotICAgICAgICBpbnQgZXh0ZW50T2Zmc2V0KCkgY29uc3Q7CiAgICAgICAgIGJvb2wg
aXNDb2xsYXBzZWQoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICAg
ICAgaW50IHJhbmdlQ291bnQoKSBjb25zdDsKLQogICAgICAgICB2b2lkIGNvbGxhcHNlKE5vZGUq
LCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgY29sbGFwc2VUb0Vu
ZCgpOwogICAgICAgICB2b2lkIGNvbGxhcHNlVG9TdGFydCgpOwotICAgICAgICB2b2lkIGVtcHR5
KCk7Ci0gICAgICAgIHZvaWQgc2V0QmFzZUFuZEV4dGVudChOb2RlKiBiYXNlTm9kZSwgaW50IGJh
c2VPZmZzZXQsIE5vZGUqIGV4dGVudE5vZGUsIGludCBleHRlbnRPZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICAgICAgdm9pZCBzZXRQb3NpdGlvbihOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgICAgICB2b2lkIHNldFBvc2l0aW9uKE5vZGUqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgICAgIHZvaWQgbW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXIsIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGdyYW51bGFyaXR5KTsKICAgICAgICAgdm9pZCBl
eHRlbmQoTm9kZSosIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gZ2V0UmFuZ2VBdChpbnQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9p
ZCByZW1vdmVBbGxSYW5nZXMoKTsKQEAgLTgwLDYgKzg3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKTsKIAorICAgICAgICAvLyBNaWNyb3NvZnQg
U2VsZWN0aW9uIE9iamVjdCBBUEkKKyAgICAgICAgdm9pZCBlbXB0eSgpOworICAgICAgICAvL3Zv
aWQgY2xlYXIoKTsKKyAgICAgICAgLy9UZXh0UmFuZ2UgKmNyZWF0ZVJhbmdlKCk7CisKICAgICBw
cml2YXRlOgogICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICB9OwpJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI3NzE2KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOCBAQAorMjAwNy0xMS0xMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NTQKKyAgICAgICAgTW92ZSBET00g
U2VsZWN0aW9uIG9wZXJhdGlvbnMgb3V0IG9mIFNlbGVjdGlvbkNvbnRyb2xsZXIKKworICAgICAg
ICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9leHBh
bmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxl
Y3RUb01hcms6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHN3YXBXaXRoTWFyazpdKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgc2V0U2VsZWN0
ZWRET01SYW5nZTphZmZpbml0eTpdKToKKyAgICAgICAgQWRhcHRlZCBmb3IgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZSgpIG5vdyByZXR1cm5pbmcgYSBib29sLgorCiAyMDA3
LTExLTA5ICBUcmlzdGFuIE8nVGllcm5leSAgPHRyaXN0YW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0JKHJldmlzaW9uIDI3Njg5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEyLDggKzM3MTIsNyBAQCBub1Byb21pc2VkRGF0YToK
ICAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+YWZmaW5pdHkoKTsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwog
ICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJW
aWV3IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIHRv
RE9NUmFuZ2U6ZG9tUmFuZ2UgYWZmaW5pdHk6a2l0KGFmZmluaXR5KSBzdGlsbFNlbGVjdGluZzpO
T10pIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGNvcmVGcmFtZS0+
c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBhZmZp
bml0eSwgdHJ1ZSwgZWMpOworICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwogICAgIH0K
IH0KIApAQCAtNDY3MSw4ICs0NjcwLDcgQEAgc3RhdGljIERPTVJhbmdlICp1bmlvbkRPTVJhbmdl
cyhET01SYW5nZQogICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xs
ZXIoKS0+c2V0U2VsZWN0ZWRSYW5nZShjb3JlKHVuaW9uRE9NUmFuZ2VzKG1hcmssIFtzZWxmIF9z
ZWxlY3RlZFJhbmdlXSkpLCBET1dOU1RSRUFNLCB0cnVlLCBlYyk7CisgICAgY29yZUZyYW1lLT5z
ZWxlY3Rpb25Db250cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UoY29yZSh1bmlvbkRPTVJhbmdl
cyhtYXJrLCBbc2VsZiBfc2VsZWN0ZWRSYW5nZV0pKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiB9CiAK
IC0gKHZvaWQpc3dhcFdpdGhNYXJrOihpZClzZW5kZXIKQEAgLTQ2ODgsOSArNDY4Niw3IEBAIHN0
YXRpYyBET01SYW5nZSAqdW5pb25ET01SYW5nZXMoRE9NUmFuZ2UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNvcmVGcmFtZS0+c2VsZWN0
aW9uQ29udHJvbGxlcigpLT5zZXRTZWxlY3RlZFJhbmdlKGNvcmUobWFyayksIERPV05TVFJFQU0s
IHRydWUsIGVjKTsKLSAgICBpZiAoZWMgPT0gMCkKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UoY29yZShtYXJrKSwgRE9XTlNUUkVBTSwg
dHJ1ZSkpCiAgICAgICAgIFticmlkZ2Ugc2V0TWFya0RPTVJhbmdlOnNlbGVjdGlvbl07CiB9CiAK
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAyNzY4OSkKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMzLDggKzMyMzMsNyBAQCBz
dGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAgICAgICAgIGlmICghY29y
ZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0U2VsZWN0
ZWRSYW5nZShbcmFuZ2UgX3JhbmdlXSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIHRydWUsIGVj
KTsKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNldFNlbGVjdGVk
UmFuZ2UoW3JhbmdlIF9yYW5nZV0sIGNvcmUoc2VsZWN0aW9uQWZmaW5pdHkpLCB0cnVlKTsKICAg
ICB9CiB9CiAK
</data>
<flag name="review"
          id="7333"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>