<?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>11219</bug_id>
          
          <creation_ts>2006-10-08 08:59:27 -0700</creation_ts>
          <short_desc>eliminate DeprecatedStringList</short_desc>
          <delta_ts>2008-02-18 19:09:24 -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>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>53802</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-10-08 08:59:27 -0700</bug_when>
    <thetext>Bug for the last bits of DeprecatedStringList removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53808</commentid>
    <comment_count>1</comment_count>
      <attachid>10982</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-10-08 09:36:20 -0700</bug_when>
    <thetext>Created attachment 10982
work in progress, maybe Anders can use some of this

I was working on this for a while, but I moved to doing something else. Here&apos;s my work in progress in case it&apos;s useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53688</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-09 16:55:50 -0700</bug_when>
    <thetext>The parts of Darin&apos;s patch which deal with the Objective-C DOM bindings was landed in r16947.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22993</commentid>
    <comment_count>3</comment_count>
      <attachid>13205</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-02-16 14:08:31 -0800</bug_when>
    <thetext>Created attachment 13205
first attempt

It seems this is all needed to remove DeprecatedStringList. There seem to be no regressions, but I hope someone familiar with the editing code can check.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22801</commentid>
    <comment_count>4</comment_count>
      <attachid>13215</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-02-17 13:48:18 -0800</bug_when>
    <thetext>Created attachment 13215
Improved patch

This patch has improved iterator logic, after a suggestion from Sam. Hopefully someone can performance test the patch :) All tests pass fine.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22791</commentid>
    <comment_count>5</comment_count>
      <attachid>13205</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-17 16:47:17 -0800</bug_when>
    <thetext>Comment on attachment 13205
first attempt

+        bool atParagraphEnd = nextTab == -1 || nextTab &gt; paragraphEnd;

I believe this should be &gt;=</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22581</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-02-18 04:11:17 -0800</bug_when>
    <thetext>Should wait until after stabilization period I assume.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22589</commentid>
    <comment_count>7</comment_count>
      <attachid>13224</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-02-18 05:46:10 -0800</bug_when>
    <thetext>Created attachment 13224
Improved patch II

I added Darin&apos;s suggestion. I am ok with waiting until the stabilization is over, so I didnt set the review flag.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22591</commentid>
    <comment_count>8</comment_count>
      <attachid>13224</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-02-18 06:37:32 -0800</bug_when>
    <thetext>Comment on attachment 13224
Improved patch II

I think it&apos;s best to set the review? flag so this patch doesn&apos;t get lost.

Reviewers and committers should be reading the bug so that they understand it shouldn&apos;t be committed until after stabilization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21174</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-02-27 03:42:40 -0800</bug_when>
    <thetext>I&apos;d rather the flag be cleared personally.  This is like the sixth time I&apos;ve stumbled into this bug while examining the list.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20961</commentid>
    <comment_count>10</comment_count>
      <attachid>13224</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-02-27 19:57:59 -0800</bug_when>
    <thetext>Comment on attachment 13224
Improved patch II

Clearing review per Comment #9.

Is there a way to search for these bugs once the flags are cleared?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71106</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-18 19:09:24 -0800</bug_when>
    <thetext>Sam fixed this today.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10982</attachid>
            <date>2006-10-08 09:36:20 -0700</date>
            <delta_ts>2006-10-08 09:36:20 -0700</delta_ts>
            <desc>work in progress, maybe Anders can use some of this</desc>
            <filename>StringListPatch.txt</filename>
            <type>text/plain</type>
            <size>53719</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2ODg3KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyAr
MjYyLDYgQEAKIAkJNjUwRjUzREQwOUQxNURERjAwQzlCMEM4IC8qIENTU0dyYW1tYXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxNDQwOUQx
MzA0MzAwMEU2MUQ3IC8qIENTU0dyYW1tYXIuY3BwICovOyB9OwogCQk2NTFCNEQ4NTA5QUM4MzM3
MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxQjREODMwOUFDODMzNzAwMjlGMUVGIC8qIERl
cHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCAqLzsgfTsKIAkJNjUxQjREODYwOUFDODMzNzAwMjlGMUVG
IC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTFCNEQ4NDA5QUM4MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0
cmluZ0xpc3QuaCAqLzsgfTsKLQkJNjUxQjREOEYwOUFDODU5RjAwMjlGMUVGIC8qIERlcHJlY2F0
ZWRTdHJpbmdMaXN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjUxQjREOEUwOUFDODU5RjAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0
TWFjLm1tICovOyB9OwogCQk2NTIyQkNERjA5QzlEQUE4MDBDOUJBN0EgLyogUmVzb3VyY2VSZXF1
ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTIy
QkNERTA5QzlEQUE4MDBDOUJBN0EgLyogUmVzb3VyY2VSZXF1ZXN0LmggKi87IH07CiAJCTY1NDVG
NjcwMDlCODJGRUQwMDEzMDA2RiAvKiBSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQ1RjY2QzA5QjgyRkVEMDAxMzAwNkYg
LyogUmVzb3VyY2VMb2FkZXIuY3BwICovOyB9OwogCQk2NTQ1RjY3MTA5QjgyRkVEMDAxMzAwNkYg
LyogUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1NDVGNjZEMDlCODJGRUQwMDEzMDA2RiAvKiBSZXNvdXJjZUxvYWRlci5oICov
OyB9OwpAQCAtMjk2Myw3ICsyOTYyLDYgQEAKIAkJNjUwRjUzREIwOUQxNUREQTAwQzlCMEM4IC8q
IENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0dyYW1t
YXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxQjREODMwOUFDODMzNzAwMjlG
MUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZXByZWNhdGVkU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTY1MUI0RDg0MDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5n
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFN0cmlu
Z0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjUxQjREOEUwOUFDODU5RjAw
MjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NTIyQkNERTA5QzlEQUE4MDBDOUJBN0EgLyogUmVzb3Vy
Y2VSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZVJl
cXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0NUY2NkMwOUI4MkZFRDAw
MTMwMDZGIC8qIFJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1NDVGNjZEMDlCODJGRUQwMDEzMDA2RiAvKiBSZXNvdXJjZUxvYWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU5NjgsNyArNTk2Niw2IEBACiAJCQkJNjU4MkExNDkwOTk5OUQ2
QzAwQkVFQjZEIC8qIENvbG9yTWFjLm1tICovLAogCQkJCTkzNTIwODc2MDlCRDQ1MzQwMEYyMDM4
RCAvKiBDb29raWVKYXIubW0gKi8sCiAJCQkJRjU4Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8qIEN1
cnNvck1hYy5tbSAqLywKLQkJCQk2NTFCNEQ4RTA5QUM4NTlGMDAyOUYxRUYgLyogRGVwcmVjYXRl
ZFN0cmluZ0xpc3RNYWMubW0gKi8sCiAJCQkJNjU4MkExNzcwOTk5OUVBMDAwQkVFQjZEIC8qIERl
cHJlY2F0ZWRTdHJpbmdNYWMubW0gKi8sCiAJCQkJNjVGNTM4NjgwOUIyQkZEQTAwRjNEQzRBIC8q
IEV4dHJhQ0ZFbmNvZGluZ3MuaCAqLywKIAkJCQkwNjZDNzcyQzBBQjYwM0QyMDAyMzhDQzQgLyog
RmlsZUNob29zZXJNYWMubW0gKi8sCkBAIC05ODMxLDcgKzk4MjgsNiBAQAogCQkJbWFpbkdyb3Vw
ID0gMDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3IC8qIFdlYktpdCAqLzsKIAkJCXByb2R1Y3RSZWZH
cm91cCA9IDAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAvKiBQcm9kdWN0cyAqLzsKIAkJCXByb2pl
Y3REaXJQYXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwogCQkJdGFyZ2V0cyA9ICgKIAkJ
CQk5M0YxOThBNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZSAqLywKIAkJCQlERDA0MUZCRTA5
RDlEREJFMDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2VzICovLApAQCAtMTAyODEsNyArMTAyNzcs
NiBAQAogCQkJCTkzNUM0NzcxMDlBQzRENzMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZlbnRN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzVDNDc3MzA5QUM0RDc3MDBBNkFBQjQgLyogV2hl
ZWxFdmVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1MUI0RDg1MDlBQzgzMzcwMDI5RjFF
RiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2NTFCNEQ4
RjA5QUM4NTlGMDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5MzAzMkNDODA5QUVDMzQzMDBGODJBMTggLyogUGF0aENHLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTY1OTM5MjM3MDlBRTQzNDYwMDJDNTMxRiAvKiBLVVJMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTY1OTM5MjNBMDlBRTQzNUMwMDJDNTMxRiAvKiBLVVJMTWFjLm1tIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBiaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5k
aW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTY4ODcpCisrKyBiaW5kaW5ncy9vYmpjL0RPTS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw3IEBAIHN0YXRpYyBDbGFzcyBlbGVtZW50
Q2xhc3MoY29uc3QgV2ViQ29yZToKIC0gKHZvaWQpYWRkRXZlbnRMaXN0ZW5lcjooTlNTdHJpbmcg
Kil0eXBlIGxpc3RlbmVyOihpZCA8RE9NRXZlbnRMaXN0ZW5lcj4pbGlzdGVuZXIgdXNlQ2FwdHVy
ZTooQk9PTCl1c2VDYXB0dXJlCiB7CiAgICAgaWYgKCFbc2VsZiBfbm9kZV0tPmlzRXZlbnRUYXJn
ZXROb2RlKCkpCi0gICAgICAgIHJhaXNlRE9NRXhjZXB0aW9uKERPTV9OT1RfU1VQUE9SVEVEX0VS
Uik7CisgICAgICAgIFdlYkNvcmU6OnJhaXNlRE9NRXhjZXB0aW9uKERPTV9OT1RfU1VQUE9SVEVE
X0VSUik7CiAgICAgCiAgICAgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lciAqd3JhcHBlciA9IE9iakNF
dmVudExpc3RlbmVyOjpjcmVhdGUobGlzdGVuZXIpOwogICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qo
W3NlbGYgX25vZGVdKS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB3cmFwcGVyLCB1c2VDYXB0dXJl
KTsKQEAgLTMzMSw3ICszMzEsNyBAQCBzdGF0aWMgQ2xhc3MgZWxlbWVudENsYXNzKGNvbnN0IFdl
YkNvcmU6CiAtICh2b2lkKXJlbW92ZUV2ZW50TGlzdGVuZXI6KE5TU3RyaW5nICopdHlwZSBsaXN0
ZW5lcjooaWQgPERPTUV2ZW50TGlzdGVuZXI+KWxpc3RlbmVyIHVzZUNhcHR1cmU6KEJPT0wpdXNl
Q2FwdHVyZQogewogICAgIGlmICghW3NlbGYgX25vZGVdLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKQot
ICAgICAgICByYWlzZURPTUV4Y2VwdGlvbihET01fTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAg
ICBXZWJDb3JlOjpyYWlzZURPTUV4Y2VwdGlvbihET01fTk9UX1NVUFBPUlRFRF9FUlIpOwogCiAg
ICAgaWYgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIgKndyYXBwZXIgPSBPYmpDRXZlbnRMaXN0ZW5l
cjo6ZmluZChsaXN0ZW5lcikpCiAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoW3NlbGYgX25v
ZGVdKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB3cmFwcGVyLCB1c2VDYXB0dXJlKTsKQEAg
LTM0NiwxMSArMzQ2LDExIEBAIHN0YXRpYyBDbGFzcyBlbGVtZW50Q2xhc3MoY29uc3QgV2ViQ29y
ZToKIC0gKEJPT0wpZGlzcGF0Y2hFdmVudDooRE9NRXZlbnQgKilldmVudAogewogICAgIGlmICgh
W3NlbGYgX25vZGVdLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKQotICAgICAgICByYWlzZURPTUV4Y2Vw
dGlvbihET01fTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBXZWJDb3JlOjpyYWlzZURPTUV4
Y2VwdGlvbihET01fTk9UX1NVUFBPUlRFRF9FUlIpOwogCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgQk9PTCByZXN1bHQgPSBFdmVudFRhcmdldE5vZGVDYXN0KFtzZWxm
IF9ub2RlXSktPmRpc3BhdGNoRXZlbnQoW2V2ZW50IF9ldmVudF0sIGVjKTsKLSAgICByYWlzZU9u
RE9NRXJyb3IoZWMpOworICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyBDbGFzcyBlbGVtZW50
Q2xhc3MoY29uc3QgV2ViQ29yZToKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAvLyBET01FbGVtZW50CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhdXRvLWdlbmVuZXJh
dGUgaW4gRE9NRWxlbWVudC5tbQorLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGF1dG8tZ2VuZXJh
dGVkIGluIERPTUVsZW1lbnQubW0KIEBpbXBsZW1lbnRhdGlvbiBET01FbGVtZW50IChET01FbGVt
ZW50QXBwS2l0RXh0ZW5zaW9ucykKIAogLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGltcGxlbWVu
dGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbgpAQCAtNjIzLDcgKzYyMyw3IEBAIHNob3J0IE9iakNO
b2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBET01Eb2N1bWVudCAoRE9NRG9jdW1lbnRUcmF2ZXJzYWwpCiAKLS8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBiZSBhdXRvLWdlbmVuZXJhdGUgaW4gRE9NRG9jdW1lbnQubW0KKy8v
IEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhdXRvLWdlbmVyYXRlZCBpbiBET01Eb2N1bWVudC5tbQog
QGltcGxlbWVudGF0aW9uIERPTURvY3VtZW50IChET01Eb2N1bWVudFRyYXZlcnNhbCkKIAogLSAo
RE9NTm9kZUl0ZXJhdG9yICopY3JlYXRlTm9kZUl0ZXJhdG9yOihET01Ob2RlICopcm9vdCB3aGF0
VG9TaG93Oih1bnNpZ25lZCl3aGF0VG9TaG93IGZpbHRlcjooaWQgPERPTU5vZGVGaWx0ZXI+KWZp
bHRlciBleHBhbmRFbnRpdHlSZWZlcmVuY2VzOihCT09MKWV4cGFuZEVudGl0eVJlZmVyZW5jZXMK
QEAgLTYzMyw3ICs2MzMsNyBAQCBzaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0
Tm9kCiAgICAgICAgIGNwcEZpbHRlciA9IG5ldyBXZWJDb3JlOjpOb2RlRmlsdGVyKG5ldyBPYmpD
Tm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUl0ZXJhdG9yPiBpbXBsID0gW3NlbGYg
X2RvY3VtZW50XS0+Y3JlYXRlTm9kZUl0ZXJhdG9yKFtyb290IF9ub2RlXSwgd2hhdFRvU2hvdywg
Y3BwRmlsdGVyLCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVy
cm9yKGVjKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOwogICAgIHJldHVybiBb
RE9NTm9kZUl0ZXJhdG9yIF9ub2RlSXRlcmF0b3JXaXRoOmltcGwuZ2V0KCkgZmlsdGVyOmZpbHRl
cl07CiB9CiAKQEAgLTY0NCw3ICs2NDQsNyBAQCBzaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlv
bjo6YWNjZXB0Tm9kCiAgICAgICAgIGNwcEZpbHRlciA9IG5ldyBXZWJDb3JlOjpOb2RlRmlsdGVy
KG5ldyBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8V2ViQ29yZTo6VHJlZVdhbGtlcj4gaW1wbCA9
IFtzZWxmIF9kb2N1bWVudF0tPmNyZWF0ZVRyZWVXYWxrZXIoW3Jvb3QgX25vZGVdLCB3aGF0VG9T
aG93LCBjcHBGaWx0ZXIsIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMsIGVjKTsKLSAgICByYWlzZU9u
RE9NRXJyb3IoZWMpOworICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7CiAgICAgcmV0
dXJuIFtET01UcmVlV2Fsa2VyIF90cmVlV2Fsa2VyV2l0aDppbXBsLmdldCgpIGZpbHRlcjpmaWx0
ZXJdOwogfQogCkluZGV4OiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxNjg4NykKKysrIGJpbmRpbmdzL29i
amMvRE9NSFRNTC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw4IEBAIHN0YXRpYyBO
U1ZpZXcgKnZpZXdGb3JFbGVtZW50KERPTUVsZW1lbnQKIHsKICAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBbc2VsZiBfSFRNTElucHV0RWxlbWVudF07CiAgICAg
aWYgKGlucHV0RWxlbWVudCkgewotICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbmV3VmFsdWUgPSBp
bnB1dEVsZW1lbnQtPnZhbHVlKCkucmVwbGFjZSh0YXJnZXRSYW5nZS5sb2NhdGlvbiwgdGFyZ2V0
UmFuZ2UubGVuZ3RoLCByZXBsYWNlbWVudFN0cmluZyk7CisgICAgICAgIFdlYkNvcmU6OlN0cmlu
ZyBuZXdWYWx1ZSA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgbmV3VmFsdWUucmVw
bGFjZSh0YXJnZXRSYW5nZS5sb2NhdGlvbiwgdGFyZ2V0UmFuZ2UubGVuZ3RoLCByZXBsYWNlbWVu
dFN0cmluZyk7CiAgICAgICAgIGlucHV0RWxlbWVudC0+c2V0VmFsdWUobmV3VmFsdWUpOwogICAg
ICAgICBpbnB1dEVsZW1lbnQtPnNldFNlbGVjdGlvblJhbmdlKGluZGV4LCBuZXdWYWx1ZS5sZW5n
dGgoKSk7CiAgICAgfQpJbmRleDogYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkocmV2aXNpb24gMTY4ODcpCisrKyBi
aW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNiwxNyArMzM2
LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgRE9N
IHdyYXBwZXJzIGFuZCBnbHVpbmcgdG8gT2JqZWN0aXZlLUMKIAotTlNPYmplY3QqIGdldERPTVdy
YXBwZXIoRE9NT2JqZWN0SW50ZXJuYWwqKTsKLXZvaWQgYWRkRE9NV3JhcHBlcihOU09iamVjdCog
d3JhcHBlciwgRE9NT2JqZWN0SW50ZXJuYWwqKTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IE5TT2JqZWN0KiBnZXRET01XcmFwcGVyKERPTU9iamVjdEludGVybmFsKik7CisgICAgdm9pZCBh
ZGRET01XcmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBET01PYmplY3RJbnRlcm5hbCopOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFNvdXJjZT4gaW5saW5lIGlkIGdldERPTVdyYXBwZXIoU291cmNl
IGltcGwpIHsgcmV0dXJuIGdldERPTVdyYXBwZXIocmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJ
bnRlcm5hbCo+KGltcGwpKTsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBTb3VyY2U+IGlubGluZSB2
b2lkIGFkZERPTVdyYXBwZXIoTlNPYmplY3QqIHdyYXBwZXIsIFNvdXJjZSBpbXBsKSB7IGFkZERP
TVdyYXBwZXIod3JhcHBlciwgcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGlt
cGwpKTsgfQorICAgIHZvaWQgcmVtb3ZlRE9NV3JhcHBlcihET01PYmplY3RJbnRlcm5hbCopOwor
CisgICAgdm9pZCByYWlzZURPTUV4Y2VwdGlvbihFeGNlcHRpb25Db2RlKTsKKworICAgIGlubGlu
ZSB2b2lkIHJhaXNlT25ET01FcnJvcihFeGNlcHRpb25Db2RlIGVjKSAKKyAgICB7CisgICAgICAg
IGlmIChlYykgCisgICAgICAgICAgICByYWlzZURPTUV4Y2VwdGlvbihlYyk7CisgICAgfQorCisg
ICAgTlNTdHJpbmcqIGRpc3BsYXlTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgTm9kZSopOwog
Ci10ZW1wbGF0ZSA8Y2xhc3MgU291cmNlPiBpbmxpbmUgaWQgZ2V0RE9NV3JhcHBlcihTb3VyY2Ug
aW1wbCkgeyByZXR1cm4gZ2V0RE9NV3JhcHBlcihyZWludGVycHJldF9jYXN0PERPTU9iamVjdElu
dGVybmFsKj4oaW1wbCkpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgU291cmNlPiBpbmxpbmUgdm9pZCBh
ZGRET01XcmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBTb3VyY2UgaW1wbCkgeyBhZGRET01XcmFw
cGVyKHdyYXBwZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPihpbXBsKSk7
IH0KLXZvaWQgcmVtb3ZlRE9NV3JhcHBlcihET01PYmplY3RJbnRlcm5hbCopOwotCi12b2lkIHJh
aXNlRE9NRXhjZXB0aW9uKFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUpOwotCi1pbmxpbmUgdm9pZCBy
YWlzZU9uRE9NRXJyb3IoV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYykgCi17Ci0gICAgaWYgKGVj
KSAKLSAgICAgICAgcmFpc2VET01FeGNlcHRpb24oZWMpOwogfQpJbmRleDogYmluZGluZ3Mvb2Jq
Yy9ET01JbnRlcm5hbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFs
Lm1tCShyZXZpc2lvbiAxNjg4NykKKysrIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAgdXNpbmcgS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdDsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBXcmFwcGluZyBX
ZWJDb3JlIGltcGxlbWVudGF0aW9uIG9iamVjdHMKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCiBz
dGF0aWMgSGFzaE1hcDxET01PYmplY3RJbnRlcm5hbCosIE5TT2JqZWN0Kj4qIHdyYXBwZXJDYWNo
ZTsKIAogTlNPYmplY3QqIGdldERPTVdyYXBwZXIoRE9NT2JqZWN0SW50ZXJuYWwqIGltcGwpCkBA
IC03MCw2ICs3Miw4IEBAIHZvaWQgcmVtb3ZlRE9NV3JhcHBlcihET01PYmplY3RJbnRlcm5hbCoK
ICAgICB3cmFwcGVyQ2FjaGUtPnJlbW92ZShpbXBsKTsKIH0KIAorfQorCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRXhjZXB0aW9ucwogCkBAIC04Myw2ICs4Nyw4IEBA
IE5TU3RyaW5nICogY29uc3QgRE9NU1ZHRXhjZXB0aW9uID0gQCJET00KIE5TU3RyaW5nICogY29u
c3QgRE9NWFBhdGhFeGNlcHRpb24gPSBAIkRPTVhQYXRoRXhjZXB0aW9uIjsKICNlbmRpZiAvLyBY
UEFUSF9TVVBQT1JUCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwogdm9pZCByYWlzZURPTUV4Y2Vw
dGlvbihFeGNlcHRpb25Db2RlIGVjKQogewogICAgIEFTU0VSVChlYyk7CkBAIC0xMTQsNiArMTIw
LDggQEAgdm9pZCByYWlzZURPTUV4Y2VwdGlvbihFeGNlcHRpb25Db2RlIGVjKQogICAgIFtleGNl
cHRpb24gcmFpc2VdOwogfQogCit9CisKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJTY3JpcHRPYmplY3QgKFdlYlNjcmlwdE9iamVjdElu
dGVybmFsKQpAQCAtMTYzLDMgKzE3MSwxOSBAQCB2b2lkIHJhaXNlRE9NRXhjZXB0aW9uKEV4Y2Vw
dGlvbkNvZGUgZWMpCiB9CiAKIEBlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOU1N0cmlu
ZyogZGlzcGxheVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm4gc3RyaW5nOworICAgIFN0cmluZyBjb3B5KHN0cmluZyk7CisgICAgY29weS5yZXBs
YWNlKCdcXCcsIGRvY3VtZW50LT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgIHJl
dHVybiBjb3B5OworfQorCit9CkluZGV4OiBiaW5kaW5ncy9vYmpjL0RPTU9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTU9iamVjdC5tbQkocmV2aXNpb24gMTY4ODcpCisr
KyBiaW5kaW5ncy9vYmpjL0RPTU9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTIsMTQgKzUy
LDE0IEBACiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAoX2ludGVybmFsKQotICAgICAgICBy
ZW1vdmVET01XcmFwcGVyKF9pbnRlcm5hbCk7CisgICAgICAgIFdlYkNvcmU6OnJlbW92ZURPTVdy
YXBwZXIoX2ludGVybmFsKTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKHZvaWQpZmlu
YWxpemUKIHsKICAgICBpZiAoX2ludGVybmFsKQotICAgICAgICByZW1vdmVET01XcmFwcGVyKF9p
bnRlcm5hbCk7CisgICAgICAgIFdlYkNvcmU6OnJlbW92ZURPTVdyYXBwZXIoX2ludGVybmFsKTsK
ICAgICBbc3VwZXIgZmluYWxpemVdOwogfQogCkluZGV4OiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JPYmpDLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvck9iakMucG0JKHJldmlzaW9uIDE2ODg3KQorKysgYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yT2JqQy5wbQkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBteSAlYmFzZVR5
cGVIYXNoID0gKCJOb2RlIiA9PiAxLCAiTm9kZUxpCiBteSAkYnVpbGRpbmdGb3JUaWdlck9yRWFy
bGllciA9IDEgaWYgJEVOVnsiTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIn0gYW5kICRFTlZ7Ik1B
Q09TWF9ERVBMT1lNRU5UX1RBUkdFVCJ9IDw9IDEwLjQ7CiBteSAkYnVpbGRpbmdGb3JMZW9wYXJk
T3JMYXRlciA9IDEgaWYgJEVOVnsiTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIn0gYW5kICRFTlZ7
Ik1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCJ9ID49IDEwLjU7CiBteSAkZXhjZXB0aW9uSW5pdCA9
ICJXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsiOwotbXkgJGV4Y2VwdGlvblJhaXNlT25F
cnJvciA9ICJyYWlzZU9uRE9NRXJyb3IoZWMpOyI7CitteSAkZXhjZXB0aW9uUmFpc2VPbkVycm9y
ID0gIldlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7IjsKIAogIyBEZWZhdWx0IExpY2VuY2Ug
VGVtcGxhdGVzCiBteSAkaGVhZGVyTGljZW5jZVRlbXBsYXRlID0gPDwgIkVPRiI7CkBAIC05MTQs
OCArOTE0LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAk
Z2V0dGVyQ29udGVudFRhaWwgLj0gIl0iOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0
ZU5hbWUgPX4gLyhcdyspRGlzcGxheVN0cmluZyQvKSB7CiAgICAgICAgICAgICAgICAgbXkgJGF0
dHJpYnV0ZVRvRGlzcGxheSA9ICQxOwotICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVh
ZCA9ICJJTVBMLT4kYXR0cmlidXRlVG9EaXNwbGF5KCkucmVwbGFjZShcJ1xcXFxcJywgW3NlbGYg
X2VsZW1lbnRdLT5kb2N1bWVudCgpLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkiOwotICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRvY3VtZW50LmgifSA9IDE7CisgICAgICAgICAg
ICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIldlYkNvcmU6OmRpc3BsYXlTdHJpbmcoSU1QTC0+
JGF0dHJpYnV0ZVRvRGlzcGxheSgpLCBbc2VsZiBfZWxlbWVudF0iOworICAgICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkRPTUludGVybmFsLmgifSA9IDE7CiAgICAgICAgICAgICB9IGVsc2lm
ICgkYXR0cmlidXRlTmFtZSA9fiAvXmFic29sdXRlKFx3KylVUkwkLykgewogICAgICAgICAgICAg
ICAgIG15ICR0eXBlT2ZVUkwgPSAkMTsKICAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhl
YWQgPSAiW3NlbGYgX2dldFVSTEF0dHJpYnV0ZToiOwpJbmRleDogYnJpZGdlL21hYy9XZWJDb3Jl
RnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UubW0JKHJldmlzaW9uIDE2ODg3KQorKysgYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTgxOCw3ICs4MTgsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkNv
cmVGcmFtZUJyaWRnZSAqYnJpZGdlCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbmV2ZXIgImZv
ciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgbmV4dCBtZXRob2QuCiAgICAg
VmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBOU1N0cmluZyAqbWFya3VwU3RyaW5nID0gY3Jl
YXRlTWFya3VwKFtub2RlIF9ub2RlXSwgSW5jbHVkZU5vZGUsIG5vZGVzID8gJm5vZGVMaXN0IDog
MCkuZ2V0TlNTdHJpbmcoKTsKKyAgICBOU1N0cmluZyAqbWFya3VwU3RyaW5nID0gY3JlYXRlTWFy
a3VwKFtub2RlIF9ub2RlXSwgSW5jbHVkZU5vZGUsIG5vZGVzID8gJm5vZGVMaXN0IDogMCk7CiAg
ICAgaWYgKG5vZGVzKQogICAgICAgICAqbm9kZXMgPSBbc2VsZiBub2Rlc0Zyb21MaXN0OiZub2Rl
TGlzdF07CiAKQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgaW5saW5lIFdlYkNvcmVGcmFtZUJy
aWRnZSAqYnJpZGdlCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzICJmb3IgaW50ZXJj
aGFuZ2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIHByZXZpb3VzIG1ldGhvZC4KICAgICBWZWN0
b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVN
YXJrdXAoW3JhbmdlIF9yYW5nZV0sIG5vZGVzID8gJm5vZGVMaXN0IDogMCwgQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSkuZ2V0TlNTdHJpbmcoKTsKKyAgICBOU1N0cmluZyAqbWFya3VwU3RyaW5nID0g
Y3JlYXRlTWFya3VwKFtyYW5nZSBfcmFuZ2VdLCBub2RlcyA/ICZub2RlTGlzdCA6IDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UpOwogICAgIGlmIChub2RlcykKICAgICAgICAgKm5vZGVzID0gW3Nl
bGYgbm9kZXNGcm9tTGlzdDombm9kZUxpc3RdOwogCkluZGV4OiBlZGl0aW5nL21hcmt1cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIGVk
aXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDb21tZW50LmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudFR5cGUuaCIKQEAgLTMwNSw3ICszMDQsNyBAQCBzdGF0aWMgYm9vbCBuZWVkSW50
ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoCiAKIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHls
ZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8v
IEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBhbmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFi
bHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1hcmt1cFN0cmluZygpCi1EZXByZWNhdGVkU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSAqcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVz
LCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSkKK1N0cmluZyBjcmVhdGVNYXJrdXAo
Y29uc3QgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFubm90YXRlRm9ySW50
ZXJjaGFuZ2UgYW5ub3RhdGUpCiB7CiAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+aXNEZXRhY2hl
ZCgpKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwpAQCAtMzE5LDE2ICszMTgs
MTcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgIE5vZGUg
KmNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKICAg
ICBBU1NFUlQoZWMgPT0gMCk7CiAKLSAgICBEb2N1bWVudCAqZG9jID0gY29tbW9uQW5jZXN0b3It
PmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvYyA9IGNvbW1vbkFuY2VzdG9yLT5kb2N1bWVu
dCgpOwogICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
LSAgICBOb2RlICpjb21tb25BbmNlc3RvckJsb2NrID0gMDsKKyAgICBOb2RlKiBjb21tb25BbmNl
c3RvckJsb2NrID0gMDsKICAgICBpZiAoY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIGNvbW1vbkFu
Y2VzdG9yQmxvY2sgPSBjb21tb25BbmNlc3Rvci0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
OwogICAgIGlmICghY29tbW9uQW5jZXN0b3JCbG9jaykKICAgICAgICAgcmV0dXJuICIiOwogCi0g
ICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbWFya3VwczsKKyAgICBWZWN0b3I8U3RyaW5nPiBwcmVm
aXhlczsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdWZmaXhlczsKICAgICBOb2RlICpwYXN0RW5kID0g
cmFuZ2UtPnBhc3RFbmROb2RlKCk7CiAgICAgTm9kZSAqbGFzdENsb3NlZCA9IDA7CiAgICAgVmVj
dG9yPE5vZGUqPiBhbmNlc3RvcnNUb0Nsb3NlOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIERlcHJlY2F0
ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgaWYgKHZpc2libGVTdGFy
dCA9PSB2aXNpYmxlRW5kLnByZXZpb3VzKCkpCiAgICAgICAgICAgICByZXR1cm4gaW50ZXJjaGFu
Z2VOZXdsaW5lU3RyaW5nOwogICAgICAgICAgICAgCi0gICAgICAgIG1hcmt1cHMuYXBwZW5kKGlu
dGVyY2hhbmdlTmV3bGluZVN0cmluZyk7CisgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChpbnRlcmNo
YW5nZU5ld2xpbmVTdHJpbmcpOwogICAgICAgICBzdGFydE5vZGUgPSB2aXNpYmxlU3RhcnQubmV4
dCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwogICAgIH0KIApAQCAtMzYwLDcgKzM2MCw3IEBA
IERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgLy8gQWRk
IHRoZSBub2RlIHRvIHRoZSBtYXJrdXAuCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgbWFya3VwIGZv
ciBub2RlcyB3aXRob3V0IHJlbmRlcmVycyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQwNjI4NjU+
LiBBbHNvIHNlZSB0aGUgdGhyZWUgY2hlY2tzIGJlbG93LgogICAgICAgICBpZiAobi0+cmVuZGVy
ZXIoKSkgewotICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoc3RhcnRNYXJrdXAobiwgcmFuZ2Us
IGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN1ZmZpeGVzLmFw
cGVuZChzdGFydE1hcmt1cChuLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkp
OwogICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQo
bik7CiAgICAgICAgIH0KQEAgLTM2OCw3ICszNjgsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgIGlmIChuLT5maXJzdENoaWxkKCkgPT0gMCkgewog
ICAgICAgICAgICAgLy8gTm9kZSBoYXMgbm8gY2hpbGRyZW4sIGFkZCBpdHMgY2xvc2UgdGFnIG5v
dy4KICAgICAgICAgICAgIGlmIChuLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgbWFy
a3Vwcy5hcHBlbmQoZW5kTWFya3VwKG4pKTsKKyAgICAgICAgICAgICAgICBzdWZmaXhlcy5hcHBl
bmQoZW5kTWFya3VwKG4pKTsKICAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gbjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzgxLDcgKzM4MSw3IEBAIERlcHJlY2F0ZWRTdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
ZXh0ICE9IHBhc3RFbmQgJiYgbmV4dC0+aXNEZXNjZW5kYW50T2YoYW5jZXN0b3IpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm90IGF0IHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGlu
ZyBvZiBuZXh0IG5vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChl
bmRNYXJrdXAoYW5jZXN0b3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeGVzLmFw
cGVuZChlbmRNYXJrdXAoYW5jZXN0b3IpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RD
bG9zZWQgPSBhbmNlc3RvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yc1RvQ2xv
c2UucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICghYW5jZXN0b3Jz
VG9DbG9zZS5pc0VtcHR5KCkpOwpAQCAtMzk3LDggKzM5Nyw4IEBAIERlcHJlY2F0ZWRTdHJpbmcg
Y3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdl
IG5ldmVyIGVuY291bnRlcmVkIGR1cmluZyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcg
YXQgc3RhcnROb2RlOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZS0+
aXNEZXNjZW5kYW50T2YocGFyZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBz
LnByZXBlbmQoc3RhcnRNYXJrdXAocGFyZW50LCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHls
ZS5nZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFy
a3VwKHBhcmVudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKHN0
YXJ0TWFya3VwKHBhcmVudCwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChlbmRNYXJrdXAocGFyZW50
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChwYXJlbnQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdENsb3NlZCA9IHBhcmVudDsKQEAgLTQzNSw4ICs0MzUsOCBAQCBEZXByZWNhdGVkU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFya3Vw
cy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRT
dHlsZS5nZXQoKSkpOwotICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKGFuY2Vz
dG9yKSk7CisgICAgICAgICAgICBwcmVmaXhlcy5hcHBlbmQoc3RhcnRNYXJrdXAoYW5jZXN0b3Is
IHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICBzdWZm
aXhlcy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICBpZiAobm9kZXMp
IHsKICAgICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKICAgICAgICAgICAg
IH0gICAgICAgIApAQCAtNDQ2LDE0ICs0NDYsMTQgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZwogICAgIH0KIAogICAgIGlmIChhbm5vdGF0ZSAmJiBuZWVkSW50ZXJj
aGFuZ2VOZXdsaW5lQWZ0ZXIodmlzaWJsZUVuZC5wcmV2aW91cygpKSkKLSAgICAgICAgbWFya3Vw
cy5hcHBlbmQoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKTsKKyAgICAgICAgc3VmZml4ZXMuYXBw
ZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZyk7CiAKICAgICAvLyBSZXRhaW4gdGhlIE1haWwg
cXVvdGUgbGV2ZWwgYnkgaW5jbHVkaW5nIGFsbCBhbmNlc3RvciBtYWlsIGJsb2NrIHF1b3Rlcy4K
ICAgICBpZiAoYW5ub3RhdGUpIHsKICAgICAgICAgZm9yIChOb2RlICphbmNlc3RvciA9IGNvbW1v
bkFuY2VzdG9yQmxvY2s7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgICAgIGlmIChpc01haWxCbG9ja3F1b3RlKGFuY2VzdG9yKSkgewotICAg
ICAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2Us
IGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBtYXJrdXBz
LmFwcGVuZChlbmRNYXJrdXAoYW5jZXN0b3IpKTsKKyAgICAgICAgICAgICAgICBwcmVmaXhlcy5h
cHBlbmQoc3RhcnRNYXJrdXAoYW5jZXN0b3IsIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxl
LmdldCgpKSk7CisgICAgICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5kKGVuZE1hcmt1cChhbmNl
c3RvcikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNDYxLDEwICs0NjEs
MzIgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgIC8vIGFk
ZCBpbiB0aGUgImRlZmF1bHQgc3R5bGUiIGZvciB0aGlzIG1hcmt1cAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgY2FzZSB3aGVyZSB2YWx1ZSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0LCBsaWtl
ICIKICAgICBEZXByZWNhdGVkU3RyaW5nIG9wZW5UYWcgPSBEZXByZWNhdGVkU3RyaW5nKCI8c3Bh
biBjbGFzcz1cIiIpICsgQXBwbGVTdHlsZVNwYW5DbGFzcyArICJcIiBzdHlsZT1cIiIgKyBkZWZh
dWx0U3R5bGUtPmNzc1RleHQoKS5kZXByZWNhdGVkU3RyaW5nKCkgKyAiXCI+IjsKLSAgICBtYXJr
dXBzLnByZXBlbmQob3BlblRhZyk7Ci0gICAgbWFya3Vwcy5hcHBlbmQoIjwvc3Bhbj4iKTsKKyAg
ICBwcmVmaXhlcy5hcHBlbmQob3BlblRhZyk7CisgICAgc3VmZml4ZXMuYXBwZW5kKCI8L3NwYW4+
Iik7CiAKLSAgICByZXR1cm4gbWFya3Vwcy5qb2luKCIiKTsKKyAgICB1bnNpZ25lZCBudW1QcmVm
aXhlcyA9IHByZWZpeGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBudW1TdWZmaXhlcyA9IHN1ZmZp
eGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bVByZWZpeGVzOyArK2kpCisgICAgICAgIHRvdGFsTGVuZ3RoICs9
IHByZWZpeGVzW2ldLmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1T
dWZmaXhlczsgKytpKQorICAgICAgICB0b3RhbExlbmd0aCArPSBzdWZmaXhlc1tpXS5sZW5ndGgo
KTsKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdCh0b3RhbExlbmd0aCk7CisgICAgdW5zaWduZWQg
b2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUHJlZml4ZXM7ICsr
aSkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHByZWZpeCA9IHByZWZpeGVzW251bVByZWZpeGVz
IC0gaV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHByZWZpeC5sZW5ndGgoKTsKKyAgICAg
ICAgbWVtY3B5KHJlc3VsdC5kYXRhKCkgKyBvZmZzZXQsIHByZWZpeC5jaGFyYWN0ZXJzKCksIGxl
bmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoOworICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3VmZml4ZXM7ICsraSkgeworICAgICAg
ICBjb25zdCBTdHJpbmcmIHN1ZmZpeCA9IHN1ZmZpeGVzW2ldOworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdWZmaXgubGVuZ3RoKCk7CisgICAgICAgIG1lbWNweShyZXN1bHQuZGF0YSgpICsg
b2Zmc2V0LCBzdWZmaXguY2hhcmFjdGVycygpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAg
ICAgICAgb2Zmc2V0ICs9IGxlbmd0aDsKKyAgICB9CisgICAgQVNTRVJUKG9mZnNldCA9PSB0b3Rh
bExlbmd0aCk7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KIAogUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKQpA
QCAtNDgyLDcgKzUwNCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z20KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1EZXByZWNhdGVkU3RyaW5n
IGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBFQ2hpbGRyZW5Pbmx5IGluY2x1ZGVDaGls
ZHJlbiwKK1N0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVuT25s
eSBpbmNsdWRlQ2hpbGRyZW4sCiAgICAgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBbm5vdGF0ZUZv
ckludGVyY2hhbmdlIGFubm90YXRlKQogewogICAgIEFTU0VSVChhbm5vdGF0ZSA9PSBEb05vdEFu
bm90YXRlRm9ySW50ZXJjaGFuZ2UpOyAvLyBhbm5vdGF0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQg
Zm9yIHRoaXMgY29kZSBwYXRoCkBAIC00OTAsNDYgKzUxMiw1MCBAQCBEZXByZWNhdGVkU3RyaW5n
IGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlCiAgICAgcmV0dXJuIG1hcmt1cChjb25zdF9jYXN0PE5v
ZGUqPihub2RlKSwgaW5jbHVkZUNoaWxkcmVuLCBmYWxzZSwgbm9kZXMpOwogfQogCi1zdGF0aWMg
dm9pZCBjcmVhdGVQYXJhZ3JhcGhDb250ZW50c0Zyb21TdHJpbmcoRWxlbWVudCogcGFyYWdyYXBo
LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHJpbmcpCitzdGF0aWMgdm9pZCBjcmVhdGVQYXJh
Z3JhcGhDb250ZW50c0Zyb21TdHJpbmcoRWxlbWVudCogcGFyYWdyYXBoLAorICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBpbnQgcGFyYWdyYXBoU3RhcnQsIGludCBwYXJhZ3JhcGhFbmQpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcGFyYWdyYXBoLT5kb2N1bWVudCgpOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICBpZiAo
cGFyYWdyYXBoU3RhcnQgPT0gcGFyYWdyYXBoRW5kKSB7CiAgICAgICAgIHBhcmFncmFwaC0+YXBw
ZW5kQ2hpbGQoY3JlYXRlQmxvY2tQbGFjZWhvbGRlckVsZW1lbnQoZG9jdW1lbnQpLCBlYyk7CiAg
ICAgICAgIEFTU0VSVChlYyA9PSAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFz
c2VydChzdHJpbmcuZmluZCgnXG4nKSA9PSAtMSk7CisgICAgQVNTRVJUKHN0cmluZy5maW5kKCdc
bicsIHBhcmFncmFwaFN0YXJ0KSA9PSAtMSB8fCBzdHJpbmcuZmluZCgnXG4nLCBwYXJhZ3JhcGhT
dGFydCkgPj0gcGFyYWdyYXBoRW5kKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0IHRhYkxp
c3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJ1x0Jywgc3RyaW5nLCB0cnVlKTsKLSAg
ICBEZXByZWNhdGVkU3RyaW5nIHRhYlRleHQgPSAiIjsKLSAgICB3aGlsZSAoIXRhYkxpc3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IHRhYkxpc3QuZmlyc3QoKTsK
LSAgICAgICAgdGFiTGlzdC5wb3BfZnJvbnQoKTsKKyAgICBpbnQgc3RhcnQgPSBwYXJhZ3JhcGhT
dGFydDsKKyAgICBTdHJpbmcgdGFiVGV4dCA9ICIiOworICAgIHdoaWxlICgxKSB7CisgICAgICAg
IGludCBuZXh0VGFiID0gc3RyaW5nLmZpbmQoJ1x0Jywgc3RhcnQpOworICAgICAgICBib29sIGF0
UGFyYWdyYXBoRW5kID0gbmV4dFRhYiA9PSAtMSB8fCBuZXh0VGFiID4gcGFyYWdyYXBoRW5kOwor
ICAgICAgICBpbnQgZW5kID0gYXRQYXJhZ3JhcGhFbmQgPyBwYXJhZ3JhcGhFbmQgOiBuZXh0VGFi
OwogCiAgICAgICAgIC8vIGFwcGVuZCB0aGUgbm9uLXRhYiB0ZXh0dWFsIHBhcnQKLSAgICAgICAg
aWYgKCFzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoc3RhcnQgIT0gZW5kKSB7CiAgICAgICAg
ICAgICBpZiAoIXRhYlRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgcGFyYWdyYXBo
LT5hcHBlbmRDaGlsZChjcmVhdGVUYWJTcGFuRWxlbWVudChkb2N1bWVudCwgdGFiVGV4dCksIGVj
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CiAgICAgICAgICAgICAgICAgdGFi
VGV4dCA9ICIiOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHRleHRO
b2RlID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKHMpOwotICAgICAgICAgICAgcmViYWxhbmNl
V2hpdGVzcGFjZUluVGV4dE5vZGUodGV4dE5vZGUuZ2V0KCksIDAsIHMubGVuZ3RoKCkpOworICAg
ICAgICAgICAgUmVmUHRyPE5vZGU+IHRleHROb2RlID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2Rl
KHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KSk7CisgICAgICAgICAgICByZWJh
bGFuY2VXaGl0ZXNwYWNlSW5UZXh0Tm9kZSh0ZXh0Tm9kZS5nZXQoKSwgMCwgZW5kIC0gc3RhcnQp
OwogICAgICAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZCh0ZXh0Tm9kZS5yZWxlYXNlKCks
IGVjKTsKICAgICAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIHRoZXJlIGlzIGEgdGFiIGFmdGVyIGV2ZXJ5IGVudHJ5LCBleGNlcHQgdGhlIGxhc3QgZW50
cnkKLSAgICAgICAgLy8gKGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpcyBhIHRhYiwgdGhlIGxpc3Qg
Z2V0cyBhbiBleHRyYSBlbXB0eSBlbnRyeSkKLSAgICAgICAgaWYgKCF0YWJMaXN0LmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHRhYlRleHQgKz0gJ1x0JzsKKyAgICAgICAgaWYgKCFhdFBhcmFncmFw
aEVuZCkKKyAgICAgICAgICAgIHRhYlRleHQuYXBwZW5kKCdcdCcpOwogICAgICAgICBlbHNlIGlm
ICghdGFiVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hp
bGQoY3JlYXRlVGFiU3BhbkVsZW1lbnQoZG9jdW1lbnQsIHRhYlRleHQpLCBlYyk7CiAgICAgICAg
ICAgICBBU1NFUlQoZWMgPT0gMCk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoYXRQYXJhZ3Jh
cGhFbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwogICAg
IH0KIH0KIApAQCAtNTUxLDcgKzU3Nyw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ20KICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmcmFn
bWVudC5yZWxlYXNlKCk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmluZyA9IHRleHQuZGVw
cmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyBzdHJpbmcgPSB0ZXh0LmNvcHkoKTsKICAgICBz
dHJpbmcucmVwbGFjZSgiXHJcbiIsICJcbiIpOwogICAgIHN0cmluZy5yZXBsYWNlKCdccicsICdc
bicpOwogCkBAIC01NjAsNyArNTg2LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbQogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS0+cHJlc2Vy
dmVOZXdsaW5lKCkpIHsKICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGRvY3VtZW50LT5j
cmVhdGVUZXh0Tm9kZShzdHJpbmcpLCBlYyk7CiAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKLSAg
ICAgICAgaWYgKHN0cmluZy5lbmRzV2l0aCgiXG4iKSkgeworICAgICAgICBpZiAoc3RyaW5nLmVu
ZHNXaXRoKCdcbicpKSB7CiAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudDsKICAg
ICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNw
YWNlVVJJLCAiYnIiLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CkBAIC01NzIs
MjMgKzU5OCwyNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAg
ICAgfQogCiAgICAgLy8gQnJlYWsgc3RyaW5nIGludG8gcGFyYWdyYXBocy4gRXh0cmEgbGluZSBi
cmVha3MgdHVybiBpbnRvIGVtcHR5IHBhcmFncmFwaHMuCi0gICAgRGVwcmVjYXRlZFN0cmluZ0xp
c3QgbGlzdCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnXG4nLCBzdHJpbmcsIHRydWUp
OyAvLyB0cnVlIGdldHMgdXMgZW1wdHkgc3RyaW5ncyBpbiB0aGUgbGlzdAotICAgIHdoaWxlICgh
bGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gbGlzdC5maXJz
dCgpOwotICAgICAgICBsaXN0LnBvcF9mcm9udCgpOworICAgIGludCBzdGFydCA9IDA7CisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgaW50IG5leHRMaW5lQnJlYWsgPSBzdHJpbmcuZmluZCgnXG4n
LCBzdGFydCk7CisgICAgICAgIGludCBlbmQgPSBuZXh0TGluZUJyZWFrICE9IC0xID8gbmV4dExp
bmVCcmVhayA6IHN0cmluZy5sZW5ndGgoKTsKIAogICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxl
bWVudDsKLSAgICAgICAgaWYgKHMuaXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChzdGFydCA9PSBlbmQgJiYgbmV4dExpbmVCcmVhayA9PSAtMSkgewogICAgICAgICAg
ICAgLy8gRm9yIGxhc3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFuIGEgUC4K
ICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFt
ZXNwYWNlVVJJLCAiYnIiLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CiAgICAg
ICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCBBcHBsZUludGVyY2hhbmdl
TmV3bGluZSk7ICAgICAgICAgICAgCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbGVt
ZW50ID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQpOwotICAgICAgICAg
ICAgY3JlYXRlUGFyYWdyYXBoQ29udGVudHNGcm9tU3RyaW5nKGVsZW1lbnQuZ2V0KCksIHMpOwor
ICAgICAgICAgICAgY3JlYXRlUGFyYWdyYXBoQ29udGVudHNGcm9tU3RyaW5nKGVsZW1lbnQuZ2V0
KCksIHN0cmluZywgc3RhcnQsIGVuZCk7CiAgICAgICAgIH0KICAgICAgICAgZnJhZ21lbnQtPmFw
cGVuZENoaWxkKGVsZW1lbnQucmVsZWFzZSgpLCBlYyk7CiAgICAgICAgIEFTU0VSVChlYyA9PSAw
KTsKKworICAgICAgICBpZiAobmV4dExpbmVCcmVhayA9PSAtMSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBzdGFydCA9IGVuZCArIDE7CiAgICAgfQogICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7CiB9CkluZGV4OiBlZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRp
bmcvbWFya3VwLmgJKHJldmlzaW9uIDE2ODg3KQorKysgZWRpdGluZy9tYXJrdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQq
LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKTsKICAgICBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50
KiwgY29uc3QgVmVjdG9yPE5vZGUqPiYpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZ2UqLAorICAgIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2Uq
LAogICAgICAgICBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlID0g
RG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBOb2RlKiwgRUNoaWxkcmVuT25seSA9IEluY2x1ZGVOb2RlLAorICAgIFN0
cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRlTm9k
ZSwKICAgICAgICAgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9
IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CiAKIH0KSW5kZXg6IGxvYWRlci9sb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiAxNjg4NykKKysr
IGxvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5j
bHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgpJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJ
KHJldmlzaW9uIDE2ODg3KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDYgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2Fj
aGUuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRGVwcmVj
YXRlZFN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRlY29kZXIuaCIKQEAgLTE1OTAsOTcgKzE1ODks
NzkgQEAgdm9pZCBGcmFtZTo6c3VibWl0Rm9ybUFnYWluKCkKICAgICBkZWxldGUgZm9ybTsKIH0K
IAotdm9pZCBGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBjaGFyICphY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBGb3JtRGF0YSYgZm9ybURhdGEsIGNvbnN0IFN0cmluZyYgX3RhcmdldCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSkKK3ZvaWQg
RnJhbWU6OnN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgRm9ybURhdGEmIGZvcm1EYXRhLAorICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0RnJhbWVO
YW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5KQog
ewotICBLVVJMIHUgPSBjb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKLQotICBp
ZiAoIXUuaXNWYWxpZCgpKQotICAgIC8vICMjIyBFUlJPUiBIQU5ETElORyEKLSAgICByZXR1cm47
Ci0KLSAgRGVwcmVjYXRlZFN0cmluZyB1cmxzdHJpbmcgPSB1LnVybCgpOwotICBpZiAodXJsc3Ry
aW5nLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKSB7Ci0gICAgdXJsc3RyaW5nID0g
S1VSTDo6ZGVjb2RlX3N0cmluZyh1cmxzdHJpbmcpOwotICAgIGQtPm1fZXhlY3V0aW5nSmF2YVNj
cmlwdEZvcm1BY3Rpb24gPSB0cnVlOwotICAgIGV4ZWN1dGVTY3JpcHQoMCwgdXJsc3RyaW5nLm1p
ZCgxMSkpOwotICAgIGQtPm1fZXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24gPSBmYWxzZTsK
LSAgICByZXR1cm47Ci0gIH0KLQotICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBLVVJM
IHUgPSBjb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBpZiAoIXUuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CiAKLSAgaWYgKCFkLT5tX3JlZmVycmVyLmlzRW1wdHko
KSkKLSAgICAgcmVxdWVzdC5zZXRSZWZlcnJlcihkLT5tX3JlZmVycmVyKTsKKyAgICBEZXByZWNh
dGVkU3RyaW5nIHVybHN0cmluZyA9IHUudXJsKCk7CisgICAgaWYgKHVybHN0cmluZy5zdGFydHNX
aXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkgeworICAgICAgICB1cmxzdHJpbmcgPSBLVVJMOjpk
ZWNvZGVfc3RyaW5nKHVybHN0cmluZyk7CisgICAgICAgIGQtPm1fZXhlY3V0aW5nSmF2YVNjcmlw
dEZvcm1BY3Rpb24gPSB0cnVlOworICAgICAgICBleGVjdXRlU2NyaXB0KDAsIHVybHN0cmluZy5t
aWQoMTEpKTsKKyAgICAgICAgZC0+bV9leGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbiA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gIHJlcXVlc3QuZnJhbWVOYW1lID0gX3Rh
cmdldC5pc0VtcHR5KCkgPyBkLT5tX2RvYy0+YmFzZVRhcmdldCgpIDogX3RhcmdldCA7CisgICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgaWYgKCFkLT5tX3JlZmVycmVyLmlzRW1wdHko
KSkKKyAgICAgICAgcmVxdWVzdC5zZXRSZWZlcnJlcihkLT5tX3JlZmVycmVyKTsKIAotICAvLyBI
YW5kbGUgbWFpbHRvOiBmb3JtcwotICBpZiAodS5wcm90b2NvbCgpID09ICJtYWlsdG8iKSB7Ci0g
ICAgICAvLyAxKSAgQ2hlY2sgZm9yIGF0dGFjaD0gYW5kIHN0cmlwIGl0Ci0gICAgICBEZXByZWNh
dGVkU3RyaW5nIHEgPSB1LnF1ZXJ5KCkubWlkKDEpOwotICAgICAgRGVwcmVjYXRlZFN0cmluZ0xp
c3QgbnZwcyA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgiJiIsIHEpOwotICAgICAgYm9v
bCB0cmllZFRvQXR0YWNoID0gZmFsc2U7Ci0KLSAgICAgIGZvciAoRGVwcmVjYXRlZFN0cmluZ0xp
c3Q6Okl0ZXJhdG9yIG52cCA9IG52cHMuYmVnaW4oKTsgbnZwICE9IG52cHMuZW5kKCk7ICsrbnZw
KSB7Ci0gICAgICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBwYWlyID0gRGVwcmVjYXRlZFN0cmlu
Z0xpc3Q6OnNwbGl0KCI9IiwgKm52cCk7Ci0gICAgICAgICBpZiAocGFpci5jb3VudCgpID49IDIp
IHsKLSAgICAgICAgICAgIGlmIChwYWlyLmZpcnN0KCkubG93ZXIoKSA9PSAiYXR0YWNoIikgewot
ICAgICAgICAgICAgICAgbnZwID0gbnZwcy5yZW1vdmUobnZwKTsKLSAgICAgICAgICAgICAgIHRy
aWVkVG9BdHRhY2ggPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgfQor
ICAgIHJlcXVlc3QuZnJhbWVOYW1lID0gdGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHkoKSA/IGQtPm1f
ZG9jLT5iYXNlVGFyZ2V0KCkgOiB0YXJnZXRGcmFtZU5hbWU7CiAKKyAgICAvLyBIYW5kbGUgbWFp
bHRvOiBmb3JtcworICAgIGlmICh1LnByb3RvY29sKCkgPT0gIm1haWx0byIpIHsKKyAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyBib2R5RW5jOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
Y29udGVudFR5cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikpCisgICAgICAgICAgICAvLyBGSVhN
RTogaXMgdGhpcyBjb3JyZWN0PyAgSSBzdXNwZWN0IG5vdAorICAgICAgICAgICAgYm9keUVuYyA9
IEtVUkw6OmVuY29kZV9zdHJpbmcoZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY29udGVudFR5
cGUsICJ0ZXh0L3BsYWluIikpIHsKKyAgICAgICAgICAgIC8vIENvbnZlbnRpb24gc2VlbXMgdG8g
YmUgdG8gZGVjb2RlLCBhbmQgcy8mL1xuLworICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0
bXBib2R5ID0gZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkuZGVwcmVjYXRlZFN0cmluZygpOwor
ICAgICAgICAgICAgdG1wYm9keS5yZXBsYWNlKCcmJywgJ1xuJyk7CisgICAgICAgICAgICB0bXBi
b2R5LnJlcGxhY2UoJysnLCAnICcpOworICAgICAgICAgICAgdG1wYm9keSA9IEtVUkw6OmRlY29k
ZV9zdHJpbmcodG1wYm9keSk7ICAvLyBEZWNvZGUgdGhlIHJlc3Qgb2YgaXQKKyAgICAgICAgICAg
IGJvZHlFbmMgPSBLVVJMOjplbmNvZGVfc3RyaW5nKHRtcGJvZHkpOyAgLy8gUmVjb2RlIGZvciB0
aGUgVVJMCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYm9keUVuYyA9IEtVUkw6OmVuY29k
ZV9zdHJpbmcoZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkuZGVwcmVjYXRlZFN0cmluZygpKTsK
KworICAgICAgICBTdHJpbmcgcXVlcnkgPSB1LnF1ZXJ5KCk7CisgICAgICAgIGlmICghcXVlcnku
ZW5kc1dpdGgoIiYiKSkKKyAgICAgICAgICAgIHF1ZXJ5LmFwcGVuZCgnJicpOworICAgICAgICB1
LnNldFF1ZXJ5KChxdWVyeSArICJib2R5PSIgKyBib2R5RW5jKS5kZXByZWNhdGVkU3RyaW5nKCkp
OworICAgIH0gCiAKLSAgICAgIC8vIDIpICBBcHBlbmQgYm9keT0KLSAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgYm9keUVuYzsKLSAgICAgIGlmIChjb250ZW50VHlwZS5sb3dlcigpID09ICJtdWx0aXBh
cnQvZm9ybS1kYXRhIikKLSAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3Q/ICBJIHN1
c3BlY3Qgbm90Ci0gICAgICAgICBib2R5RW5jID0gS1VSTDo6ZW5jb2RlX3N0cmluZyhmb3JtRGF0
YS5mbGF0dGVuVG9TdHJpbmcoKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgZWxzZSBpZiAo
Y29udGVudFR5cGUubG93ZXIoKSA9PSAidGV4dC9wbGFpbiIpIHsKLSAgICAgICAgIC8vIENvbnZl
bnRpb24gc2VlbXMgdG8gYmUgdG8gZGVjb2RlLCBhbmQgcy8mL1xuLwotICAgICAgICAgRGVwcmVj
YXRlZFN0cmluZyB0bXBib2R5ID0gZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkuZGVwcmVjYXRl
ZFN0cmluZygpOwotICAgICAgICAgdG1wYm9keS5yZXBsYWNlKCcmJywgJ1xuJyk7Ci0gICAgICAg
ICB0bXBib2R5LnJlcGxhY2UoJysnLCAnICcpOwotICAgICAgICAgdG1wYm9keSA9IEtVUkw6OmRl
Y29kZV9zdHJpbmcodG1wYm9keSk7ICAvLyBEZWNvZGUgdGhlIHJlc3Qgb2YgaXQKLSAgICAgICAg
IGJvZHlFbmMgPSBLVVJMOjplbmNvZGVfc3RyaW5nKHRtcGJvZHkpOyAgLy8gUmVjb2RlIGZvciB0
aGUgVVJMCi0gICAgICB9IGVsc2UKLSAgICAgICAgIGJvZHlFbmMgPSBLVVJMOjplbmNvZGVfc3Ry
aW5nKGZvcm1EYXRhLmZsYXR0ZW5Ub1N0cmluZygpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0KLSAg
ICAgIG52cHMuYXBwZW5kKFN0cmluZzo6c3ByaW50ZigiYm9keT0lcyIsIGJvZHlFbmMubGF0aW4x
KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgICBxID0gbnZwcy5qb2luKCImIik7Ci0gICAg
ICB1LnNldFF1ZXJ5KHEpOwotICB9IAotCi0gIGlmIChzdHJjbXAoYWN0aW9uLCAiZ2V0IikgPT0g
MCkgewotICAgIGlmICh1LnByb3RvY29sKCkgIT0gIm1haWx0byIpCi0gICAgICAgdS5zZXRRdWVy
eShmb3JtRGF0YS5mbGF0dGVuVG9TdHJpbmcoKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIHJl
cXVlc3Quc2V0RG9Qb3N0KGZhbHNlKTsKLSAgfSBlbHNlIHsKLSAgICByZXF1ZXN0LnBvc3REYXRh
ID0gZm9ybURhdGE7Ci0gICAgcmVxdWVzdC5zZXREb1Bvc3QodHJ1ZSk7CisgICAgaWYgKHN0cmNt
cChhY3Rpb24sICJnZXQiKSA9PSAwKSB7CisgICAgICAgIGlmICh1LnByb3RvY29sKCkgIT0gIm1h
aWx0byIpCisgICAgICAgICAgICB1LnNldFF1ZXJ5KGZvcm1EYXRhLmZsYXR0ZW5Ub1N0cmluZygp
LmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHJlcXVlc3Quc2V0RG9Qb3N0KGZhbHNlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICByZXF1ZXN0LnBvc3REYXRhID0gZm9ybURhdGE7CisgICAg
ICAgIHJlcXVlc3Quc2V0RG9Qb3N0KHRydWUpOwogCi0gICAgLy8gY29uc3RydWN0IHNvbWUgdXNl
ciBoZWFkZXJzIGlmIG5lY2Vzc2FyeQotICAgIGlmIChjb250ZW50VHlwZS5pc051bGwoKSB8fCBj
b250ZW50VHlwZSA9PSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikKLSAgICAg
IHJlcXVlc3Quc2V0Q29udGVudFR5cGUoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkIik7Ci0gICAgZWxzZSAvLyBjb250ZW50VHlwZSBtdXN0IGJlICJtdWx0
aXBhcnQvZm9ybS1kYXRhIgotICAgICAgcmVxdWVzdC5zZXRDb250ZW50VHlwZSgiQ29udGVudC1U
eXBlOiAiICsgY29udGVudFR5cGUgKyAiOyBib3VuZGFyeT0iICsgYm91bmRhcnkpOwotICB9Cisg
ICAgICAgIC8vIGNvbnN0cnVjdCBzb21lIHVzZXIgaGVhZGVycyBpZiBuZWNlc3NhcnkKKyAgICAg
ICAgaWYgKGNvbnRlbnRUeXBlLmlzTnVsbCgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGNvbnRlbnRU
eXBlLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikpCisgICAgICAgICAgICBy
ZXF1ZXN0LnNldENvbnRlbnRUeXBlKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZCIpOworICAgICAgICBlbHNlIC8vIGNvbnRlbnRUeXBlIG11c3QgYmUgIm11
bHRpcGFydC9mb3JtLWRhdGEiCisgICAgICAgICAgICByZXF1ZXN0LnNldENvbnRlbnRUeXBlKCJD
b250ZW50LVR5cGU6ICIgKyBjb250ZW50VHlwZSArICI7IGJvdW5kYXJ5PSIgKyBib3VuZGFyeSk7
CisgICAgfQogCi0gIGlmIChkLT5tX3J1bm5pbmdTY3JpcHRzID4gMCkgewotICAgIGlmIChkLT5t
X3N1Ym1pdEZvcm0pCi0gICAgICAgIHJldHVybjsKLSAgICBkLT5tX3N1Ym1pdEZvcm0gPSBuZXcg
RnJhbWVQcml2YXRlOjpTdWJtaXRGb3JtOwotICAgIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0QWN0
aW9uID0gYWN0aW9uOwotICAgIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0VXJsID0gdXJsOwotICAg
IGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0Rm9ybURhdGEgPSBmb3JtRGF0YTsKLSAgICBkLT5tX3N1
Ym1pdEZvcm0tPnRhcmdldCA9IF90YXJnZXQ7Ci0gICAgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRD
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwotICAgIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0Qm91
bmRhcnkgPSBib3VuZGFyeTsKLSAgfSBlbHNlIHsKLSAgICAgIHJlcXVlc3Quc2V0VVJMKHUpOwot
ICAgICAgc3VibWl0Rm9ybShyZXF1ZXN0KTsKLSAgfQorICAgIGlmIChkLT5tX3J1bm5pbmdTY3Jp
cHRzID4gMCkgeworICAgICAgICBpZiAoZC0+bV9zdWJtaXRGb3JtKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBkLT5tX3N1Ym1pdEZvcm0gPSBuZXcgRnJhbWVQcml2YXRlOjpTdWJtaXRG
b3JtOworICAgICAgICBkLT5tX3N1Ym1pdEZvcm0tPnN1Ym1pdEFjdGlvbiA9IGFjdGlvbjsKKyAg
ICAgICAgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRVcmwgPSB1cmw7CisgICAgICAgIGQtPm1fc3Vi
bWl0Rm9ybS0+c3VibWl0Rm9ybURhdGEgPSBmb3JtRGF0YTsKKyAgICAgICAgZC0+bV9zdWJtaXRG
b3JtLT50YXJnZXQgPSB0YXJnZXRGcmFtZU5hbWU7CisgICAgICAgIGQtPm1fc3VibWl0Rm9ybS0+
c3VibWl0Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKKyAgICAgICAgZC0+bV9zdWJtaXRGb3Jt
LT5zdWJtaXRCb3VuZGFyeSA9IGJvdW5kYXJ5OworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcXVl
c3Quc2V0VVJMKHUpOworICAgICAgICBzdWJtaXRGb3JtKHJlcXVlc3QpOworICAgIH0KIH0KIAog
dm9pZCBGcmFtZTo6cGFyZW50Q29tcGxldGVkKCkKSW5kZXg6IHBsYXRmb3JtL0RlcHJlY2F0ZWRT
dHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nTGlz
dC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1EZXByZWNhdGVkU3RyaW5nTGlzdCBEZXByZWNhdGVkU3Ry
aW5nTGlzdDo6c3BsaXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc2VwYXJhdG9yLCBjb25zdCBE
ZXByZWNhdGVkU3RyaW5nICZzLCBib29sIGFsbG93RW1wdHlFbnRyaWVzKQotewotICAgIERlcHJl
Y2F0ZWRTdHJpbmdMaXN0IHJlc3VsdDsKLQotICAgIGludCBzdGFydFBvcyA9IDA7Ci0gICAgaW50
IGVuZFBvczsKLSAgICB3aGlsZSAoKGVuZFBvcyA9IHMuZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9z
KSkgIT0gLTEpIHsKLSAgICAgICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9
IGVuZFBvcykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocy5taWQoc3RhcnRQb3MsIGVuZFBv
cyAtIHN0YXJ0UG9zKSk7Ci0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgc2VwYXJhdG9yLmxl
bmd0aCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0g
KGludClzLmxlbmd0aCgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHMubWlkKHN0YXJ0UG9zKSk7
Ci0gICAgICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotIAotRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KGNvbnN0IERlcHJlY2F0ZWRDaGFyICZz
ZXBhcmF0b3IsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMsIGJvb2wgYWxsb3dFbXB0eUVudHJp
ZXMpCi17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdChEZXByZWNhdGVk
U3RyaW5nKHNlcGFyYXRvciksIHMsIGFsbG93RW1wdHlFbnRyaWVzKTsKLX0KLQotRGVwcmVjYXRl
ZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nTGlzdDo6am9pbihjb25zdCBEZXByZWNhdGVkU3RyaW5n
ICZzZXBhcmF0b3IpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7Ci0gICAg
Ci0gICAgZm9yIChDb25zdEl0ZXJhdG9yIGkgPSBiZWdpbigpLCBqID0gKytiZWdpbigpOyBpICE9
IGVuZCgpOyArK2ksICsraikgewotICAgICAgICByZXN1bHQgKz0gKmk7Ci0gICAgICAgIGlmIChq
ICE9IGVuZCgpKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gc2VwYXJhdG9yOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXBy
ZWNhdGVkU3RyaW5nTGlzdDo6cG9wX2Zyb250KCkKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGZy
b250ID0gZmlyc3QoKTsKLSAgICByZW1vdmUoYmVnaW4oKSk7Ci0gICAgcmV0dXJuIGZyb250Owot
fQotCi19CisvKiBlbXB0eSAqLwpJbmRleDogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nTGlzdC5oCShyZXZpc2lv
biAxNjg4NykKKysrIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTggKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVwcmVjYXRl
ZFN0cmluZ0xpc3RfaAotI2RlZmluZSBEZXByZWNhdGVkU3RyaW5nTGlzdF9oCi0KLSNpbmNsdWRl
ICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgot
Ci0jaWZkZWYgX19BUFBMRV9fCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0FycmF5OwotI2Vs
c2UKLWNsYXNzIE5TQXJyYXk7Ci0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIERlcHJlY2F0ZWRTdHJpbmdMaXN0IDogcHVibGljIERlcHJlY2F0ZWRWYWx1ZUxp
c3Q8RGVwcmVjYXRlZFN0cmluZz4gewotcHVibGljOgotICAgIHN0YXRpYyBEZXByZWNhdGVkU3Ry
aW5nTGlzdCBzcGxpdChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYsIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJiwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IGZhbHNlKTsKLSAgICBzdGF0aWMgRGVw
cmVjYXRlZFN0cmluZ0xpc3Qgc3BsaXQoY29uc3QgRGVwcmVjYXRlZENoYXIgJiwgY29uc3QgRGVw
cmVjYXRlZFN0cmluZyAmLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gZmFsc2UpOwotCi0gICAg
RGVwcmVjYXRlZFN0cmluZyBqb2luKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJikgY29uc3Q7Ci0g
ICAgCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwb3BfZnJvbnQoKTsKLSAgICAKLSNpZmRlZiBfX0FQ
UExFX18KLSAgICBOU0FycmF5ICpnZXROU0FycmF5KCkgY29uc3Q7Ci0jZW5kaWYKLX07Ci0KLX0K
LQotI2VuZGlmCisjZXJyb3IKSW5kZXg6IHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gMTY4ODcpCisrKyBw
bGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNiArNTIsMTcg
QEAgY2xhc3MgU3RyaW5nIHsKIHB1YmxpYzoKICAgICBTdHJpbmcoKSB7IH0gLy8gZ2l2ZXMgbnVs
bCBzdHJpbmcsIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGVtcHR5IHN0cmluZwogICAgIFN0cmlu
Zyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgZXhwbGljaXQgU3RyaW5nKGNv
bnN0IFVDaGFyKik7IC8vIFNwZWNpZmljYWxseSBhbmQgZXhwbGljaXRseSBmb3IgbnVsbCB0ZXJt
aW5hdGVkIFVURi0xNgotICAgIFN0cmluZyhjb25zdCBLSlM6OklkZW50aWZpZXImKTsKLSAgICBT
dHJpbmcoY29uc3QgS0pTOjpVU3RyaW5nJik7Ci0gICAgU3RyaW5nKGNvbnN0IGNoYXIqKTsKICAg
ICBTdHJpbmcoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgU3RyaW5nKFN0cmlu
Z0ltcGwqIGkpIDogbV9pbXBsKGkpIHsgfQogCisgICAgU3RyaW5nKGNvbnN0IFVDaGFyKik7IC8v
IGZvciBudWxsLXRlcm1pbmF0ZWQgVVRGLTE2CisgICAgU3RyaW5nKGNvbnN0IGNoYXIqKTsgLy8g
Zm9yIG51bGwtdGVybWluYXRlZCBVVEYtOAorCiAgICAgc3RhdGljIFN0cmluZyBuZXdVbmluaXRp
YWxpemVkKHNpemVfdCBsZW5ndGgsIFVDaGFyKiYgY2hhcmFjdGVyQnVmZmVyKTsKICAgICBzdGF0
aWMgU3RyaW5nIGFkb3B0KFZlY3RvcjxVQ2hhcj4mKTsKIAorICAgIFN0cmluZyhjb25zdCBLSlM6
OklkZW50aWZpZXImKTsKKyAgICBTdHJpbmcoY29uc3QgS0pTOjpVU3RyaW5nJik7CiAgICAgb3Bl
cmF0b3IgS0pTOjpJZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgb3BlcmF0b3IgS0pTOjpVU3RyaW5n
KCkgY29uc3Q7CiAKQEAgLTcwLDUwICs3MSw2OSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CiAgICAgCiAgICAgVUNoYXIgb3BlcmF0
b3JbXSh1bnNpZ25lZCBpKSBjb25zdDsgLy8gaWYgaSA+PSBsZW5ndGgoKSwgcmV0dXJucyAwCi0g
ICAgCi0gICAgYm9vbCBjb250YWlucyhVQ2hhciBjKSBjb25zdCB7IHJldHVybiBmaW5kKGMpICE9
IC0xOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBjaGFyKiBzdHIsIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZlKSAh
PSAtMTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzdHIsIGJvb2wgY2FzZVNl
bnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZl
KSAhPSAtMTsgfQotCi0gICAgaW50IGZpbmQoVUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QK
LSAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKGMsIHN0YXJ0KSA6IC0xOyB9
Ci0gICAgaW50IGZpbmQoY29uc3QgY2hhciogc3RyLCBpbnQgc3RhcnQgPSAwLCBib29sIGNhc2VT
ZW5zaXRpdmUgPSB0cnVlKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwt
PmZpbmQoc3RyLCBzdGFydCwgY2FzZVNlbnNpdGl2ZSkgOiAtMTsgfQotICAgIGludCBmaW5kKGNv
bnN0IFN0cmluZyYgc3RyLCBpbnQgc3RhcnQgPSAwLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVl
KSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyLmltcGwo
KSwgc3RhcnQsIGNhc2VTZW5zaXRpdmUpIDogLTE7IH0KLSAgICAKLSAgICBib29sIHN0YXJ0c1dp
dGgoY29uc3QgU3RyaW5nJiBzLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAotICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnN0YXJ0c1dpdGgocy5pbXBsKCksIGNhc2VT
ZW5zaXRpdmUpIDogcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIGVuZHNXaXRoKGNvbnN0IFN0cmlu
ZyYgcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4g
bV9pbXBsID8gbV9pbXBsLT5lbmRzV2l0aChzLmltcGwoKSwgY2FzZVNlbnNpdGl2ZSkgOiBzLmlz
RW1wdHkoKTsgfQogCisgICAgYm9vbCBjb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7CisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBTdHJpbmcmLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAgICBi
b29sIGNvbnRhaW5zKFVDaGFyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBj
b25zdDsKKworICAgIGludCBmaW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBpbnQg
c3RhcnQgPSAwLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAgICBpbnQgZmlu
ZChjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnQgPSAwLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVl
KSBjb25zdDsKKyAgICBpbnQgZmluZChVQ2hhciwgaW50IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2Vu
c2l0aXZlID0gdHJ1ZSkgY29uc3Q7CisgICAgaW50IGZpbmQoY29uc3QgY2hhciosIGludCBzdGFy
dCA9IDAsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OworCisgICAgYm9vbCBzdGFy
dHNXaXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGNhc2VTZW5zaXRpdmUg
PSB0cnVlKSBjb25zdDsKKyAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nJiwgYm9vbCBj
YXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7CisgICAgYm9vbCBzdGFydHNXaXRoKFVDaGFyLCBi
b29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAgICBib29sIHN0YXJ0c1dpdGgoY29u
c3QgY2hhciosIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OworCisgICAgYm9vbCBl
bmRzV2l0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZl
ID0gdHJ1ZSkgY29uc3Q7CisgICAgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmcmLCBib29sIGNh
c2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAgICBib29sIGVuZHNXaXRoKFVDaGFyLCBib29s
IGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAgICBib29sIGVuZHNXaXRoKGNvbnN0IGNo
YXIqLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZChjaGFyKTsKICAgICB2b2lkIGFwcGVuZChVQ2hhcik7
Ci0gICAgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgcG9zKTsKKyAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyKik7CisKICAgICB2b2lkIGluc2VydChjb25zdCBVQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zKTsKKyAgICB2b2lkIGluc2VydChjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBwb3MpOworICAgIHZvaWQgaW5zZXJ0KFVDaGFyLCB1bnNpZ25lZCBwb3Mp
OworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBwb3MpOwogCi0gICAgU3Ry
aW5nJiByZXBsYWNlKFVDaGFyIGEsIFVDaGFyIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9p
bXBsLT5yZXBsYWNlKGEsIGIpOyByZXR1cm4gKnRoaXM7IH0KLSAgICBTdHJpbmcmIHJlcGxhY2Uo
VUNoYXIgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+
cmVwbGFjZShhLCBiLmltcGwoKSk7IHJldHVybiAqdGhpczsgfQotICAgIFN0cmluZyYgcmVwbGFj
ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYgKG1f
aW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGluZGV4LCBsZW4sIGIuaW1wbCgpKTsgcmV0
dXJuICp0aGlzOyB9Ci0KLSAgICB2b2lkIHRydW5jYXRlKHVuc2lnbmVkIGxlbik7Ci0gICAgdm9p
ZCByZW1vdmUodW5zaWduZWQgcG9zLCBpbnQgbGVuID0gMSk7Ci0KLSAgICBTdHJpbmcgc3Vic3Ry
aW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpIGNvbnN0OwotICAgIFN0
cmluZyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDAsIGxlbik7
IH0KLSAgICBTdHJpbmcgcmlnaHQodW5zaWduZWQgbGVuKSBjb25zdCB7IHJldHVybiBzdWJzdHJp
bmcobGVuZ3RoKCkgLSBsZW4sIGxlbik7IH0KKyAgICB2b2lkIHJlcGxhY2UodW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHZvaWQgcmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgY2hhciopOworCisgICAgdm9pZCByZXBsYWNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgcmVwbGFjZShjb25zdCBTdHJpbmcmLCBVQ2hhcik7CisgICAgdm9p
ZCByZXBsYWNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IGNoYXIqKTsKKyAgICB2b2lkIHJlcGxhY2Uo
VUNoYXIsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVwbGFjZShVQ2hhciwgVUNoYXIpOwor
ICAgIHZvaWQgcmVwbGFjZShVQ2hhciwgY29uc3QgY2hhciopOworICAgIHZvaWQgcmVwbGFjZShj
b25zdCBjaGFyKiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCByZXBsYWNlKGNvbnN0IGNoYXIq
LCBVQ2hhcik7CisgICAgdm9pZCByZXBsYWNlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CisK
KyAgICB2b2lkIHRydW5jYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICB2b2lkIHJlbW92ZSh1
bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbmd0aCA9IDEpOworCisgICAgU3RyaW5nIHN1YnN0cmlu
Zyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbmd0aCA9IFVJTlRfTUFYKSBjb25zdDsKKyAgICBT
dHJpbmcgbGVmdCh1bnNpZ25lZCBsZW5ndGgpIGNvbnN0IHsgcmV0dXJuIHN1YnN0cmluZygwLCBs
ZW5ndGgpOyB9CisgICAgU3RyaW5nIHJpZ2h0KHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKLSAg
ICAvLyBSZXR1cm5zIGEgbG93ZXJjYXNlL3VwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcK
KyAgICAvLyBSZXR1cm4gdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIG9yIHVwcGVy
Y2FzZS4KICAgICBTdHJpbmcgbG93ZXIoKSBjb25zdDsKICAgICBTdHJpbmcgdXBwZXIoKSBjb25z
dDsKIAotICAgIFN0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKLSAgICBTdHJpbmcgc2lt
cGxpZnlXaGl0ZVNwYWNlKCkgY29uc3Q7Ci0gICAgCiAgICAgLy8gUmV0dXJuIHRoZSBzdHJpbmcg
d2l0aCBjYXNlIGZvbGRlZCBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uLgogICAgIFN0
cmluZyBmb2xkQ2FzZSgpIGNvbnN0OwogCisgICAgU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNv
bnN0OworICAgIFN0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdDsKKyAgICAKICAgICBz
dGF0aWMgU3RyaW5nIG51bWJlcihpbnQpOwogICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2ln
bmVkKTsKICAgICBzdGF0aWMgU3RyaW5nIG51bWJlcihsb25nKTsKSW5kZXg6IHBsYXRmb3JtL1N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU3RyaW5nLmNwcAkocmV2aXNpb24gMTY4
ODcpCisrKyBwbGF0Zm9ybS9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTYgKzEw
OCw2IEBAIHZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgU3RyaW5nICZzdHIpCiAgICAgfQogfQog
Ci12b2lkIFN0cmluZzo6YXBwZW5kKGNoYXIgYykKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAg
ICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoJmMsIDEpOwotICAgIGVsc2UgewotICAgICAgICBt
X2ltcGwgPSBtX2ltcGwtPmNvcHkoKTsKLSAgICAgICAgbV9pbXBsLT5hcHBlbmQoYyk7Ci0gICAg
fQotfQotCiB2b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiB7CiAgICAgaWYgKCFtX2ltcGwp
CkBAIC0xODUsNyArMTc1LDcgQEAgdm9pZCBTdHJpbmc6OnRydW5jYXRlKHVuc2lnbmVkIGxlbikK
ICAgICAgICAgbV9pbXBsLT50cnVuY2F0ZShsZW4pOwogfQogCi12b2lkIFN0cmluZzo6cmVtb3Zl
KHVuc2lnbmVkIHBvcywgaW50IGxlbikKK3ZvaWQgU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgcG9z
LCB1bnNpZ25lZCBsZW4pCiB7CiAgICAgaWYgKG1faW1wbCkKICAgICAgICAgbV9pbXBsLT5yZW1v
dmUocG9zLCBsZW4pOwpAQCAtNDE0LDExICs0MDQsMTMzIEBAIFZlY3RvcjxTdHJpbmc+IFN0cmlu
Zzo6c3BsaXQoY29uc3QgU3RyaW4KIAogVmVjdG9yPFN0cmluZz4gU3RyaW5nOjpzcGxpdChVQ2hh
ciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpIGNvbnN0CiB7Ci0gICAgVmVjdG9y
PFN0cmluZz4gcmVzdWx0OwotICAKICAgICByZXR1cm4gc3BsaXQoU3RyaW5nKCZzZXBhcmF0b3Is
IDEpLCBhbGxvd0VtcHR5RW50cmllcyk7CiB9CiAKK3ZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3Qg
Y2hhciogc3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBDcmVhdGluZyBhIHN0cmluZyBvYmplY3Qg
aGVyZSBpcyBpbmVmZmljaWVudC4KKyAgICBhcHBlbmQoU3RyaW5nKHN0cmluZykpOworfQorCiti
b29sIFN0cmluZzo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgY2FzZVNlbnNp
dGl2ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZChzdHJpbmcsIDAsIGNhc2VTZW5zaXRpdmUp
ICE9IC0xOworfQorCitib29sIFN0cmluZzo6Y29udGFpbnMoY29uc3QgY2hhciogc3RyaW5nLCBi
b29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmQoc3RyaW5nLCAwLCBj
YXNlU2Vuc2l0aXZlKSAhPSAtMTsKK30KKworYm9vbCBTdHJpbmc6OmNvbnRhaW5zKFVDaGFyIGNo
YXJhY3RlciwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAoreworICAgIHJldHVybiBmaW5kKGNo
YXJhY3RlciwgMCwgY2FzZVNlbnNpdGl2ZSkgIT0gLTE7Cit9CisKK2Jvb2wgU3RyaW5nOjpzdGFy
dHNXaXRoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Cit7
CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8v
IEZJWE1FOiBTZWFyY2hpbmcgdGhlIHdob2xlIHN0cmluZyBoZXJlIGlzIGluZWZmaWNpZW50Lgor
ICAgIHJldHVybiBtX2ltcGwgJiYgbV9pbXBsLT5maW5kKHN0cmluZy5tX2ltcGwuZ2V0KCksIDAs
IGNhc2VTZW5zaXRpdmUpID09IDA7Cit9CisKK2Jvb2wgU3RyaW5nOjpzdGFydHNXaXRoKGNvbnN0
IGNoYXIqIHN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBDcmVhdGluZyBhIHN0cmluZyBvYmplY3QgaGVyZSBpcyBpbmVmZmljaWVudC4KKyAgICByZXR1
cm4gc3RhcnRzV2l0aChTdHJpbmcoc3RyaW5nKSwgY2FzZVNlbnNpdGl2ZSk7Cit9CisKK2Jvb2wg
U3RyaW5nOjplbmRzV2l0aChjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZl
KSBjb25zdAoreworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gbV9pbXBsICYmIG1faW1wbC0+ZW5kc1dpdGgoc3RyaW5nLm1faW1wbC5n
ZXQoKSwgY2FzZVNlbnNpdGl2ZSk7Cit9CisKK2Jvb2wgU3RyaW5nOjplbmRzV2l0aChjb25zdCBj
aGFyKiBzdHJpbmcsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
Q3JlYXRpbmcgYSBzdHJpbmcgb2JqZWN0IGhlcmUgaXMgaW5lZmZpY2llbnQuCisgICAgcmV0dXJu
IGVuZHNXaXRoKFN0cmluZyhzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlKTsKK30KKworYm9vbCBTdHJp
bmc6OmVuZHNXaXRoKFVDaGFyIGNoYXJhY3RlciwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBDcmVhdGluZyBhIHN0cmluZyBvYmplY3QgaGVyZSBpcyBpbmVmZmlj
aWVudC4KKyAgICByZXR1cm4gZW5kc1dpdGgoU3RyaW5nKCZjaGFyYWN0ZXIsIDEpLCBjYXNlU2Vu
c2l0aXZlKTsKK30KKworaW50IFN0cmluZzo6ZmluZChjb25zdCBTdHJpbmcmIHN0cmluZywgaW50
IHBvc2l0aW9uLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Cit7CisgICAgaWYgKHN0cmluZy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9pbXBsKQorICAgICAg
ICByZXR1cm4gLTE7CisgICAgcmV0dXJuIG1faW1wbC0+ZmluZChzdHJpbmcubV9pbXBsLmdldCgp
LCBwb3NpdGlvbiwgY2FzZVNlbnNpdGl2ZSk7Cit9CisKK2ludCBTdHJpbmc6OmZpbmQoY29uc3Qg
Y2hhciogc3RyaW5nLCBpbnQgcG9zaXRpb24sIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogQ3JlYXRpbmcgYSBzdHJpbmcgb2JqZWN0IGhlcmUgaXMgaW5lZmZpY2ll
bnQuCisgICAgcmV0dXJuIGZpbmQoU3RyaW5nKHN0cmluZyksIHBvc2l0aW9uLCBjYXNlU2Vuc2l0
aXZlKTsKK30KKworaW50IFN0cmluZzo6ZmluZChVQ2hhciBjaGFyYWN0ZXIsIGludCBwb3NpdGlv
biwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBDcmVhdGluZyBh
IHN0cmluZyBvYmplY3QgaGVyZSBpcyBpbmVmZmljaWVudC4KKyAgICByZXR1cm4gZmluZChTdHJp
bmcoJmNoYXJhY3RlciwgMSksIHBvc2l0aW9uLCBjYXNlU2Vuc2l0aXZlKTsKK30KKwordm9pZCBT
dHJpbmc6OnJlcGxhY2UodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoZSBzZW1hbnRp
YyBiZSBmb3IgcmVwbGFjZW1lbnQgaW4gYSBudWxsIHN0cmluZz8KKyAgICBpZiAoIW1faW1wbCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShwb3NpdGlvbiwg
bGVuZ3RoLCBzdHJpbmcubV9pbXBsLmdldCgpKTsKK30KKwordm9pZCBTdHJpbmc6OnJlcGxhY2Uo
Y29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBl
eHRyZW1lbHkgaW5lZmZpY2llbnQuCisgICAgaW50IG1hdGNoID0gZmluZChhKTsKKyAgICBpZiAo
bWF0Y2ggPT0gLTEpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgcG9zaXRpb24gPSAwOworICAg
IHNpemVfdCBhTGVuZ3RoID0gc3RybGVuKGEpOworICAgIFN0cmluZyBiU3RyaW5nID0gU3RyaW5n
KGIpOworICAgIGRvIHsKKyAgICAgICAgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKHBvc2l0aW9u
LCBhTGVuZ3RoLCBiU3RyaW5nLm1faW1wbC5nZXQoKSk7CisgICAgICAgIHBvc2l0aW9uID0gbWF0
Y2ggKyBiU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBtYXRjaCA9IG1faW1wbC0+ZmluZChhLCBw
b3NpdGlvbik7CisgICAgfSB3aGlsZSAobWF0Y2ggIT0gLTEpOworfQorCit2b2lkIFN0cmluZzo6
cmVwbGFjZShVQ2hhciBhLCBjb25zdCBjaGFyKiBiKQoreworICAgIC8vIEZJWE1FOiBXaGF0IHNo
b3VsZCB0aGUgc2VtYW50aWMgYmUgZm9yIHJlcGxhY2VtZW50IGluIGEgbnVsbCBzdHJpbmc/Cisg
ICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogQ3JlYXRpbmcg
YSBzdHJpbmcgb2JqZWN0IGhlcmUgaXMgaW5lZmZpY2llbnQuCisgICAgbV9pbXBsID0gbV9pbXBs
LT5yZXBsYWNlKGEsIFN0cmluZyhiKS5tX2ltcGwuZ2V0KCkpOworfQorCit2b2lkIFN0cmluZzo6
cmVwbGFjZShVQ2hhciBhLCBVQ2hhciBiKQoreworICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB0
aGUgc2VtYW50aWMgYmUgZm9yIHJlcGxhY2VtZW50IGluIGEgbnVsbCBzdHJpbmc/CisgICAgaWYg
KCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2Uo
YSwgYik7Cit9CisKK1N0cmluZyBTdHJpbmc6OnJpZ2h0KHVuc2lnbmVkIGxlbikgY29uc3QKK3sK
KyAgICB1bnNpZ25lZCBzdHJMZW5ndGggPSBsZW5ndGgoKTsKKyAgICBpZiAobGVuID49IHN0ckxl
bmd0aCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBzdWJzdHJpbmcoc3RyTGVu
Z3RoIC0gbGVuLCBsZW4pOworfQorCiAjaWZuZGVmIE5ERUJVRwogVmVjdG9yPGNoYXI+IFN0cmlu
Zzo6YXNjaWkoKSBjb25zdAogewpJbmRleDogcGxhdGZvcm0vbWFjL0RlcHJlY2F0ZWRTdHJpbmdM
aXN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9EZXByZWNhdGVkU3RyaW5nTGlz
dE1hYy5tbQkocmV2aXNpb24gMTY4ODcpCisrKyBwbGF0Zm9ybS9tYWMvRGVwcmVjYXRlZFN0cmlu
Z0xpc3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2ltcG9ydCAiRGVwcmVjYXRlZFN0cmluZ0xp
c3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OU0FycmF5ICpEZXByZWNhdGVkU3RyaW5n
TGlzdDo6Z2V0TlNBcnJheSgpIGNvbnN0Ci17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0g
W05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKENvbnN0SXRlcmF0b3IgaXQgPSBiZWdp
bigpOyBpdCAhPSBlbmQoKTsgKytpdCkgewotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OigqaXQp
LmdldE5TU3RyaW5nKCldOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLX0KSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksOCArMjY5LDExIEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OnN1YnRyZWVIYXNDaGFuZ2UKIAogU3RyaW5nIFJlbmRlclRl
eHRDb250cm9sOjp0ZXh0KCkKIHsKLSAgICBpZiAobV9kaXYpCi0gICAgICAgIHJldHVybiBtX2Rp
di0+dGV4dENvbnRlbnQoKS5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wo
KSk7CisgICAgaWYgKG1fZGl2KSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBtX2Rpdi0+dGV4
dENvbnRlbnQoKTsKKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCkBAIC0zMTIsNyArMzE1LDggQEAgU3RyaW5nIFJlbmRlclRleHRDb250
cm9sOjp0ZXh0V2l0aEhhcmRMaQogICAgIHMuYXBwZW5kKHJhbmdlLT50b1N0cmluZyh0cnVlLCBl
YykpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKIAotICAgIHJldHVybiBzLnJlcGxhY2UoJ1xcJywg
YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICBzLnJlcGxhY2UoJ1xcJywgYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICByZXR1cm4gczsKIH0KIAogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbDo6Y2FsY0hlaWdodCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13205</attachid>
            <date>2007-02-16 14:08:31 -0800</date>
            <delta_ts>2007-02-18 05:46:10 -0800</delta_ts>
            <desc>first attempt</desc>
            <filename>11219.diff</filename>
            <type>text/plain</type>
            <size>28689</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTY2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDctMDItMTYgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE5CisgICAgICAgIGZpbmlzaCByZW1vdmlu
ZyBEZXByZWNhdGVkU3RyaW5nTGlzdAorCisgICAgICAgIFJlcGxhY2UgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgdXNhZ2UgYnkgVmVjdG9yIGFuZCByZW1vdmUgRGVwcmVjYXRlZFN0cmluZ0xpc3QuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbGxDb250YWluZXJGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZyYWdtZW50RnJvbVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6
CisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtX
ZWJDb3JlRnJhbWVCcmlkZ2UgbWFya3VwU3RyaW5nRnJvbU5vZGU6bm9kZXM6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBtYXJrdXBTdHJpbmdGcm9tUmFuZ2U6bm9kZXM6XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0RlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tOiBSZW1vdmVkLgorCiAy
MDA3LTAyLTE2ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNaXR6LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE5NjY0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw5ICszMzEsNiBAQAogCQk2NTE4
ODg4ODBBRkYzQkY3MDAxNjQ3MjAgLyogUmVzb3VyY2VFcnJvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE4ODg4NjBBRkYzQkY3MDAxNjQ3MjAg
LyogUmVzb3VyY2VFcnJvci5jcHAgKi87IH07CiAJCTY1MTg4ODg5MEFGRjNCRjcwMDE2NDcyMCAv
KiBSZXNvdXJjZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTE4ODg4NzBBRkYzQkY3MDAxNjQ3MjAgLyogUmVzb3VyY2VFcnJvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MTg4ODhCMEFG
RjNDMTQwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxODg4OEEwQUZGM0MxNDAwMTY0NzIwIC8qIFJl
c291cmNlRXJyb3JNYWMubW0gKi87IH07Ci0JCTY1MUI0RDg1MDlBQzgzMzcwMDI5RjFFRiAvKiBE
ZXByZWNhdGVkU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTFCNEQ4MzA5QUM4MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmlu
Z0xpc3QuY3BwICovOyB9OwotCQk2NTFCNEQ4NjA5QUM4MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRl
ZFN0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1MUI0RDg0MDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5oICov
OyB9OwotCQk2NTFCNEQ4RjA5QUM4NTlGMDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3RN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTFC
NEQ4RTA5QUM4NTlGMDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0gKi87IH07
CiAJCTY1MjJCQ0RGMDlDOURBQTgwMEM5QkE3QSAvKiBSZXNvdXJjZVJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MjJCQ0RFMDlDOURBQTgw
MEM5QkE3QSAvKiBSZXNvdXJjZVJlcXVlc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTRFQzYxMTA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29y
ZUZyYW1lQnJpZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTRFQzYwRjA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU0RUM2MTIw
OTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NEVDNjEwMDk3Nzc4RjUwMERBQjUyQyAv
KiBXZWJDb3JlRnJhbWVCcmlkZ2UubW0gKi87IH07CkBAIC0zNDE5LDkgKzM0MTYsNiBAQAogCQk2
NTE4ODg4NjBBRkYzQkY3MDAxNjQ3MjAgLyogUmVzb3VyY2VFcnJvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VFcnJvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1MTg4ODg3MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVy
cm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUVycm9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTg4ODhBMEFGRjNDMTQwMDE2NDcyMCAv
KiBSZXNvdXJjZUVycm9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFJlc291cmNlRXJyb3JNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTY1MUI0RDgzMDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NTFCNEQ4NDA5QUM4MzM3MDAyOUYx
RUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTY1MUI0RDhFMDlBQzg1OUYwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdE1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEZXByZWNhdGVkU3Ry
aW5nTGlzdE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUyMkJDREUwOUM5
REFBODAwQzlCQTdBIC8qIFJlc291cmNlUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1NDhFMjQ4MDlFMUUwNEQwMEFGODAyMCAvKiBEb2N1bWVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IERvY3VtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU0RUM2MEYwOTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZyYW1lQnJpZGdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODEwLDcgKzY4MDQsNiBAQAogCQkJCTkzQjZBMEU5MEIw
QkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSAqLywKIAkJCQk5MzUyMDg3NjA5QkQ0
NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovLAogCQkJCUY1ODc4NEYwMDJERTM3NTkwMUVB
NDEyMiAvKiBDdXJzb3JNYWMubW0gKi8sCi0JCQkJNjUxQjREOEUwOUFDODU5RjAwMjlGMUVGIC8q
IERlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tICovLAogCQkJCTY1ODJBMTc3MDk5OTlFQTAwMEJF
RUI2RCAvKiBEZXByZWNhdGVkU3RyaW5nTWFjLm1tICovLAogCQkJCTA2NkM3NzJDMEFCNjAzRDIw
MDIzOENDNCAvKiBGaWxlQ2hvb3Nlck1hYy5tbSAqLywKIAkJCQlCQ0Y3QzIzMzBBMTZCNUY4MDAz
MkY3NUIgLyogRm9udENhY2hlTWFjLm1tICovLApAQCAtOTA0Niw4ICs5MDM5LDYgQEAKIAkJCQlG
NTg3ODZBRDAyREUzQjg2MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0clF1ZXVlLmggKi8sCiAJCQkJ
NjU4MkExM0QwOTk5OUNENjAwQkVFQjZEIC8qIERlcHJlY2F0ZWRTdHJpbmcuY3BwICovLAogCQkJ
CTY1ODJBMTNFMDk5OTlDRDYwMEJFRUI2RCAvKiBEZXByZWNhdGVkU3RyaW5nLmggKi8sCi0JCQkJ
NjUxQjREODMwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCAqLywK
LQkJCQk2NTFCNEQ4NDA5QUM4MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCAq
LywKIAkJCQlGNTg3ODZDMjAyREUzQjg2MDFFQTQxMjIgLyogRGVwcmVjYXRlZFZhbHVlTGlzdC5o
ICovLAogCQkJCUY1ODc4NTNDMDJERTM3NTkwMUVBNDEyMiAvKiBEZXByZWNhdGVkVmFsdWVMaXN0
SW1wbC5jcHAgKi8sCiAJCQkJRjU4Nzg1M0IwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRW
YWx1ZUxpc3RJbXBsLmggKi8sCkBAIC05OTY3LDcgKzk5NTgsNiBAQAogCQkJCTkzNUM0NzZCMDlB
QzRENEYwMEE2QUFCNCAvKiBQbGF0Zm9ybVdoZWVsRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzNUM0NzZEMDlBQzRENjMwMEE2QUFCNCAvKiBGb3VuZGF0aW9uRXh0cmFzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzVDNDc3NTA5QUM0RDhFMDBBNkFBQjQgLyogR2FwUmVjdHMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTY1MUI0RDg2MDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5n
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU5MzkyMzgwOUFFNDM0NjAwMkM1MzFGIC8qIEtV
UkwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkQ2REQzMDlBRjkwNjYwMEY1OTc1OSAvKiBGb250
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzUzNjg2QjA5QUY3OEY2MDBEMzVDRDYgLyogVGV4dERp
cmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTU2OCw4ICsxMTU1OCw2IEBACiAJCQkJOTM1
QzQ3NzAwOUFDNEQ3MzAwQTZBQUI0IC8qIEtleUV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTM1QzQ3NzEwOUFDNEQ3MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudE1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzNUM0NzczMDlBQzRENzcwMEE2QUFCNCAvKiBXaGVlbEV2ZW50
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNjUxQjREODUwOUFDODMzNzAwMjlGMUVGIC8qIERl
cHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTY1MUI0RDhGMDlBQzg1
OUYwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdE1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTY1OTM5MjM3MDlBRTQzNDYwMDJDNTMxRiAvKiBLVVJMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTY1OTM5MjNBMDlBRTQzNUMwMDJDNTMxRiAvKiBLVVJMTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM2RDZERDIwOUFGOTA2NjAwRjU5NzU5IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTk2NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgImNz
c3N0eWxlc2VsZWN0b3IuaCIKICNpbmNsdWRlICJDb21tZW50LmgiCiAjaW5jbHVkZSAiRGVsZXRl
QnV0dG9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC0zNTEsNyArMzUwLDcgQEAgc3RhdGljIGJvb2wgbmVl
ZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKAogCiAvLyBGSVhNRTogU2hvdWxkbid0IHdlIG9taXQg
c3R5bGUgaW5mbyB3aGVuIGFubm90YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZT8g
CiAvLyBGSVhNRTogQXQgbGVhc3QsIGFubm90YXRpb24gYW5kIHN0eWxlIGluZm8gc2hvdWxkIHBy
b2JhYmx5IG5vdCBiZSBpbmNsdWRlZCBpbiByYW5nZS5tYXJrdXBTdHJpbmcoKQotRGVwcmVjYXRl
ZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBu
b2RlcywgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUpCitTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IFJhbmdlICpyYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBbm5vdGF0ZUZv
ckludGVyY2hhbmdlIGFubm90YXRlKQogewogICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmlzRGV0
YWNoZWQoKSkKICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKQEAgLTM2NSwxMiAr
MzY0LDEyIEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICBO
b2RlICpjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7
CiAgICAgQVNTRVJUKGVjID09IDApOwogCi0gICAgRG9jdW1lbnQgKmRvYyA9IGNvbW1vbkFuY2Vz
dG9yLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2MgPSBjb21tb25BbmNlc3Rvci0+ZG9j
dW1lbnQoKTsKICAgICAvLyBkaXNhYmxlIHRoZSBkZWxldGUgYnV0dG9uIHNvIGl0J3MgZWxlbWVu
dHMgYXJlIG5vdCBzZXJpYWxpemVkIGludG8gdGhlIG1hcmt1cAogICAgIGRvYy0+ZnJhbWUoKS0+
ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+ZGlzYWJsZSgpOwogICAgIGRvYy0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBOb2RlICpjb21t
b25BbmNlc3RvckJsb2NrID0gMDsKKyAgICBOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrID0gMDsK
ICAgICBpZiAoY29tbW9uQW5jZXN0b3IpIHsKICAgICAgICAgY29tbW9uQW5jZXN0b3JCbG9jayA9
IGVuY2xvc2luZ0Jsb2NrKGNvbW1vbkFuY2VzdG9yKTsKICAgICAgICAgaWYgKGNvbW1vbkFuY2Vz
dG9yQmxvY2sgJiYgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZSh0Ym9keVRhZykpIHsK
QEAgLTM4Miw3ICszODEsOCBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBS
YW5nCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBtYXJrdXBz
OworICAgIFZlY3RvcjxTdHJpbmc+IHByZWZpeGVzOworICAgIFZlY3RvcjxTdHJpbmc+IHN1ZmZp
eGVzOwogICAgIE5vZGUgKnBhc3RFbmQgPSByYW5nZS0+cGFzdEVuZE5vZGUoKTsKICAgICBOb2Rl
ICpsYXN0Q2xvc2VkID0gMDsKICAgICBWZWN0b3I8Tm9kZSo+IGFuY2VzdG9yc1RvQ2xvc2U7CkBA
IC00MTEsNyArNDExLDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFu
ZwogICAgICAgICAgICAgcmV0dXJuIGludGVyY2hhbmdlTmV3bGluZVN0cmluZzsKICAgICAgICAg
fQogCi0gICAgICAgIG1hcmt1cHMuYXBwZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZyk7Cisg
ICAgICAgIHN1ZmZpeGVzLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOwogICAgICAg
ICBzdGFydE5vZGUgPSB2aXNpYmxlU3RhcnQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
OwogICAgIH0KIApAQCAtNDM2LDcgKzQzNiw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IFJhbmcKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUg
bWFya3VwLgogICAgICAgICBpZiAoYWRkTWFya3VwRm9yTm9kZSkgewotICAgICAgICAgICAgbWFy
a3Vwcy5hcHBlbmQoc3RhcnRNYXJrdXAobiwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUu
Z2V0KCkpKTsKKyAgICAgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChzdGFydE1hcmt1cChuLCByYW5n
ZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAgaWYgKG5vZGVz
KQogICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQobik7CiAgICAgICAgIH0KQEAgLTQ0NCw3
ICs0NDQsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAg
ICAgIGlmIChuLT5maXJzdENoaWxkKCkgPT0gMCB8fCBza2lwRGVzY2VuZGFudHMpIHsKICAgICAg
ICAgICAgIC8vIE5vZGUgaGFzIG5vIGNoaWxkcmVuLCBvciB3ZSBhcmUgc2tpcHBpbmcgaXQncyBk
ZXNjZW5kYW50cywgYWRkIGl0cyBjbG9zZSB0YWcgbm93LgogICAgICAgICAgICAgaWYgKGFkZE1h
cmt1cEZvck5vZGUpIHsKLSAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChlbmRNYXJrdXAo
bikpOworICAgICAgICAgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChlbmRNYXJrdXAobikpOwogICAg
ICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC00NTcsNyArNDU3LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3Qg
UmFuZwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT0gcGFzdEVuZCAmJiBuZXh0
LT5pc0Rlc2NlbmRhbnRPZihhbmNlc3RvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYXQgdGhlIGVuZCBvZiB0aGUg
cmFuZ2UsIGNsb3NlIGFuY2VzdG9ycyB1cCB0byBzaWJsaW5nIG9mIG5leHQgbm9kZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3Rv
cikpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IGFuY2VzdG9yOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3JzVG9DbG9zZS5yZW1vdmVMYXN0KCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFhbmNlc3RvcnNUb0Nsb3NlLmlzRW1wdHkoKSk7CkBA
IC00NzMsOCArNDczLDggQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFu
ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gb3IgYikgYW5jZXN0b3JzIHRoYXQgd2UgbmV2ZXIgZW5jb3VudGVyZWQgZHVy
aW5nIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBzdGFydGluZyBhdCBzdGFydE5vZGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJlbnQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChw
YXJlbnQsIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChlbmRNYXJrdXAocGFyZW50KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVmaXhlcy5hcHBlbmQoc3RhcnRNYXJrdXAocGFyZW50LCByYW5n
ZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3VmZml4ZXMuYXBwZW5kKGVuZE1hcmt1cChwYXJlbnQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy0+YXBw
ZW5kKHBhcmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gcGFyZW50
OwpAQCAtNTExLDggKzUxMSw4IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmcKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAo
YW5jZXN0b3IsIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7Ci0gICAgICAg
ICAgICBtYXJrdXBzLmFwcGVuZChlbmRNYXJrdXAoYW5jZXN0b3IpKTsKKyAgICAgICAgICAgIHBy
ZWZpeGVzLmFwcGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90YXRlLCBkZWZh
dWx0U3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChlbmRNYXJrdXAo
YW5jZXN0b3IpKTsKICAgICAgICAgICAgIGlmIChub2RlcykgewogICAgICAgICAgICAgICAgIG5v
ZGVzLT5hcHBlbmQoYW5jZXN0b3IpOwogICAgICAgICAgICAgfSAgICAgICAgCkBAIC01MjIsMTQg
KzUyMiwxNCBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAg
fQogCiAgICAgaWYgKGFubm90YXRlICYmIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcih2aXNp
YmxlRW5kLnByZXZpb3VzKCkpKQotICAgICAgICBtYXJrdXBzLmFwcGVuZChpbnRlcmNoYW5nZU5l
d2xpbmVTdHJpbmcpOworICAgICAgICBzdWZmaXhlcy5hcHBlbmQoaW50ZXJjaGFuZ2VOZXdsaW5l
U3RyaW5nKTsKIAogICAgIC8vIFJldGFpbiB0aGUgTWFpbCBxdW90ZSBsZXZlbCBieSBpbmNsdWRp
bmcgYWxsIGFuY2VzdG9yIG1haWwgYmxvY2sgcXVvdGVzLgogICAgIGlmIChhbm5vdGF0ZSkgewog
ICAgICAgICBmb3IgKE5vZGUgKmFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3JCbG9jazsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICAgICAgaWYg
KGlzTWFpbEJsb2NrcXVvdGUoYW5jZXN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5w
cmVwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHls
ZS5nZXQoKSkpOwotICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNl
c3RvcikpOworICAgICAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChzdGFydE1hcmt1cChhbmNl
c3RvciwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICBzdWZmaXhlcy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CkBAIC01NTAsMTggKzU1MCw0MCBAQCBEZXByZWNhdGVkU3RyaW5n
IGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgIGlmICghc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KHJvb3QpLT5oYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKQogICAgICAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsICJ1cmwoJyIgKyBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4ocm9vdCktPmdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikgKyAi
JykiKTsKICAgICAgICAgCi0gICAgICAgIG1hcmt1cHMucHJlcGVuZCgiPGRpdiBzdHlsZT0nIiAr
IHN0eWxlLT5jc3NUZXh0KCkuZGVwcmVjYXRlZFN0cmluZygpICsgIic+Iik7Ci0gICAgICAgIG1h
cmt1cHMuYXBwZW5kKCI8L2Rpdj4iKTsKKyAgICAgICAgcHJlZml4ZXMuYXBwZW5kKCI8ZGl2IHN0
eWxlPSciICsgc3R5bGUtPmNzc1RleHQoKS5kZXByZWNhdGVkU3RyaW5nKCkgKyAiJz4iKTsKKyAg
ICAgICAgc3VmZml4ZXMuYXBwZW5kKCI8L2Rpdj4iKTsKICAgICB9CiAgICAgCiAgICAgLy8gYWRk
IGluIHRoZSAiZGVmYXVsdCBzdHlsZSIgZm9yIHRoaXMgbWFya3VwCiAgICAgLy8gRklYTUU6IEhh
bmRsZSBjYXNlIHdoZXJlIHZhbHVlIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXQsIGxpa2Ug
IgogICAgIERlcHJlY2F0ZWRTdHJpbmcgb3BlblRhZyA9IERlcHJlY2F0ZWRTdHJpbmcoIjxzcGFu
IGNsYXNzPVwiIikgKyBBcHBsZVN0eWxlU3BhbkNsYXNzICsgIlwiIHN0eWxlPVwiIiArIGRlZmF1
bHRTdHlsZS0+Y3NzVGV4dCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSArICJcIj4iOwotICAgIG1hcmt1
cHMucHJlcGVuZChvcGVuVGFnKTsKLSAgICBtYXJrdXBzLmFwcGVuZCgiPC9zcGFuPiIpOworICAg
IHByZWZpeGVzLmFwcGVuZChvcGVuVGFnKTsKKyAgICBzdWZmaXhlcy5hcHBlbmQoIjwvc3Bhbj4i
KTsKIAogICAgIGRvYy0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIo
KS0+ZW5hYmxlKCk7Ci0gICAgcmV0dXJuIG1hcmt1cHMuam9pbigiIik7CisgICAgdW5zaWduZWQg
bnVtUHJlZml4ZXMgPSBwcmVmaXhlcy5zaXplKCk7CisgICAgdW5zaWduZWQgbnVtU3VmZml4ZXMg
PSBzdWZmaXhlcy5zaXplKCk7CisgICAgdW5zaWduZWQgdG90YWxMZW5ndGggPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QcmVmaXhlczsgKytpKQorICAgICAgICB0b3RhbExl
bmd0aCArPSBwcmVmaXhlc1tpXS5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtU3VmZml4ZXM7ICsraSkKKyAgICAgICAgdG90YWxMZW5ndGggKz0gc3VmZml4ZXNbaV0u
bGVuZ3RoKCk7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQodG90YWxMZW5ndGgpOworICAgIHVu
c2lnbmVkIG9mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVByZWZp
eGVzOyArK2kpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBwcmVmaXggPSBwcmVmaXhlc1tudW1Q
cmVmaXhlcyAtIDEgLSBpXTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gcHJlZml4Lmxlbmd0
aCgpOworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSArIG9mZnNldCwgcHJlZml4LmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG9mZnNldCArPSBsZW5n
dGg7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdWZmaXhlczsgKytp
KSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3VmZml4ID0gc3VmZml4ZXNbaV07CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgbWVtY3B5KHJlc3Vs
dC5kYXRhKCkgKyBvZmZzZXQsIHN1ZmZpeC5jaGFyYWN0ZXJzKCksIGxlbmd0aCAqIHNpemVvZihV
Q2hhcikpOworICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoOworICAgIH0KKyAgICBBU1NFUlQob2Zm
c2V0ID09IHRvdGFsTGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwog
fQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcm
IGJhc2VVUkwpCkBAIC01NzksNyArNjAxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbQogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKLURlcHJl
Y2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9ubHkg
aW5jbHVkZUNoaWxkcmVuLAorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBF
Q2hpbGRyZW5Pbmx5IGluY2x1ZGVDaGlsZHJlbiwKICAgICBWZWN0b3I8Tm9kZSo+KiBub2Rlcywg
RUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUpCiB7CiAgICAgQVNTRVJUKGFubm90YXRl
ID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7IC8vIGFubm90YXRpb24gbm90IHlldCBp
bXBsZW1lbnRlZCBmb3IgdGhpcyBjb2RlIHBhdGgKQEAgLTU5Myw0NyArNjE1LDQ5IEBAIERlcHJl
Y2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgdm9pZCBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhDb250YWluZXJOb2RlKiBw
YXJhZ3JhcGgsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKK3N0YXRpYyB2b2lkIGZp
bGxDb250YWluZXJGcm9tU3RyaW5nKENvbnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGludCBwYXJhZ3JhcGhTdGFydCwgaW50IHBhcmFncmFwaEVuZCkKIHsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBwYXJhZ3JhcGgtPmRvY3VtZW50KCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkgeworICAgIGlmIChw
YXJhZ3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQpIHsKICAgICAgICAgcGFyYWdyYXBoLT5hcHBl
bmRDaGlsZChjcmVhdGVCbG9ja1BsYWNlaG9sZGVyRWxlbWVudChkb2N1bWVudCksIGVjKTsKICAg
ICAgICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNz
ZXJ0KHN0cmluZy5maW5kKCdcbicpID09IC0xKTsKKyAgICBBU1NFUlQoc3RyaW5nLmZpbmQoJ1xu
JywgcGFyYWdyYXBoU3RhcnQpID09IC0xIHx8IHN0cmluZy5maW5kKCdcbicsIHBhcmFncmFwaFN0
YXJ0KSA+PSBwYXJhZ3JhcGhFbmQpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgdGFiTGlz
dCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnXHQnLCBzdHJpbmcsIHRydWUpOwotICAg
IERlcHJlY2F0ZWRTdHJpbmcgdGFiVGV4dCA9ICIiOworICAgIGludCBzdGFydCA9IHBhcmFncmFw
aFN0YXJ0OworICAgIFN0cmluZyB0YWJUZXh0ID0gIiI7CiAgICAgYm9vbCBmaXJzdCA9IHRydWU7
Ci0gICAgd2hpbGUgKCF0YWJMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nIHMgPSB0YWJMaXN0LmZpcnN0KCk7Ci0gICAgICAgIHRhYkxpc3QucG9wX2Zyb250KCk7Cisg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaW50IG5leHRUYWIgPSBzdHJpbmcuZmluZCgnXHQnLCBz
dGFydCk7CisgICAgICAgIGJvb2wgYXRQYXJhZ3JhcGhFbmQgPSBuZXh0VGFiID09IC0xIHx8IG5l
eHRUYWIgPiBwYXJhZ3JhcGhFbmQ7CisgICAgICAgIGludCBlbmQgPSBhdFBhcmFncmFwaEVuZCA/
IHBhcmFncmFwaEVuZCA6IG5leHRUYWI7CiAKICAgICAgICAgLy8gYXBwZW5kIHRoZSBub24tdGFi
IHRleHR1YWwgcGFydAotICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChz
dGFydCAhPSBlbmQpIHsKICAgICAgICAgICAgIGlmICghdGFiVGV4dC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICBwYXJhZ3JhcGgtPmFwcGVuZENoaWxkKGNyZWF0ZVRhYlNwYW5FbGVtZW50
KGRvY3VtZW50LCB0YWJUZXh0KSwgZWMpOwogICAgICAgICAgICAgICAgIEFTU0VSVChlYyA9PSAw
KTsKICAgICAgICAgICAgICAgICB0YWJUZXh0ID0gIiI7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZWZQdHI8Tm9kZT4gdGV4dE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoc3Ry
aW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKHMsIGZpcnN0LCB0YWJMaXN0LmlzRW1wdHkoKSkp
OworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHRleHROb2RlID0gZG9jdW1lbnQtPmNyZWF0ZVRl
eHROb2RlKHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShzdHJpbmcuc3Vic3RyaW5nKHN0
YXJ0LCBlbmQgLSBzdGFydCksIGZpcnN0LCBhdFBhcmFncmFwaEVuZCkpOwogICAgICAgICAgICAg
cGFyYWdyYXBoLT5hcHBlbmRDaGlsZCh0ZXh0Tm9kZS5yZWxlYXNlKCksIGVjKTsKICAgICAgICAg
ICAgIEFTU0VSVChlYyA9PSAwKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIHRoZXJlIGlzIGEg
dGFiIGFmdGVyIGV2ZXJ5IGVudHJ5LCBleGNlcHQgdGhlIGxhc3QgZW50cnkKLSAgICAgICAgLy8g
KGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpcyBhIHRhYiwgdGhlIGxpc3QgZ2V0cyBhbiBleHRyYSBl
bXB0eSBlbnRyeSkKLSAgICAgICAgaWYgKCF0YWJMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHRhYlRleHQgKz0gJ1x0JzsKKyAgICAgICAgaWYgKCFhdFBhcmFncmFwaEVuZCkKKyAgICAgICAg
ICAgIHRhYlRleHQuYXBwZW5kKCdcdCcpOwogICAgICAgICBlbHNlIGlmICghdGFiVGV4dC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hpbGQoY3JlYXRlVGFiU3Bh
bkVsZW1lbnQoZG9jdW1lbnQsIHRhYlRleHQpLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQoZWMg
PT0gMCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgaWYgKGF0UGFyYWdyYXBoRW5k
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0YXJ0ID0gZW5kICsgMTsKICAgICAgICAg
Zmlyc3QgPSBmYWxzZTsKICAgICB9CiB9CkBAIC02NTYsNyArNjgwLDcgQEAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcg
c3RyaW5nID0gdGV4dC5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3RyaW5nIHN0cmluZyA9IHRl
eHQuY29weSgpOwogICAgIHN0cmluZy5yZXBsYWNlKCJcclxuIiwgIlxuIik7CiAgICAgc3RyaW5n
LnJlcGxhY2UoJ1xyJywgJ1xuJyk7CiAKQEAgLTY3OCwyOCArNzAyLDMyIEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KIAogICAgIC8vIEEgc3RyaW5nIHdpdGggbm8g
bmV3bGluZXMgZ2V0cyBhZGRlZCBpbmxpbmUsIHJhdGhlciB0aGFuIGJlaW5nIHB1dCBpbnRvIGEg
cGFyYWdyYXBoLgogICAgIGlmIChzdHJpbmcuZmluZCgnXG4nKSA9PSAtMSkgewotICAgICAgICBm
aWxsQ29udGFpbmVyRnJvbVN0cmluZyhmcmFnbWVudC5nZXQoKSwgc3RyaW5nKTsKKyAgICAgICAg
ZmlsbENvbnRhaW5lckZyb21TdHJpbmcoZnJhZ21lbnQuZ2V0KCksIHN0cmluZywgMCwgc3RyaW5n
Lmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CiAK
ICAgICAvLyBCcmVhayBzdHJpbmcgaW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5lIGJyZWFrcyB0
dXJuIGludG8gZW1wdHkgcGFyYWdyYXBocy4KLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsaXN0
ID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCdcbicsIHN0cmluZywgdHJ1ZSk7IC8vIHRy
dWUgZ2V0cyB1cyBlbXB0eSBzdHJpbmdzIGluIHRoZSBsaXN0Ci0gICAgd2hpbGUgKCFsaXN0Lmlz
RW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBsaXN0LmZpcnN0KCk7Ci0g
ICAgICAgIGxpc3QucG9wX2Zyb250KCk7CisgICAgaW50IHN0YXJ0ID0gMDsKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBpbnQgbmV4dExpbmVCcmVhayA9IHN0cmluZy5maW5kKCdcbicsIHN0YXJ0
KTsKKyAgICAgICAgaW50IGVuZCA9IG5leHRMaW5lQnJlYWsgIT0gLTEgPyBuZXh0TGluZUJyZWFr
IDogc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50Owot
ICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KHN0YXJ0ID09IGVuZCAmJiBuZXh0TGluZUJyZWFrID09IC0xKSB7CiAgICAgICAgICAgICAvLyBG
b3IgbGFzdCBsaW5lLCB1c2UgdGhlICJtYWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQLgogICAgICAg
ICAgICAgZWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoeGh0bWxOYW1lc3BhY2VV
UkksICJiciIsIGVjKTsKICAgICAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKICAgICAgICAgICAg
IGVsZW1lbnQtPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5l
KTsgICAgICAgICAgICAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVsZW1lbnQgPSBj
cmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCk7Ci0gICAgICAgICAgICBmaWxs
Q29udGFpbmVyRnJvbVN0cmluZyhlbGVtZW50LmdldCgpLCBzKTsKKyAgICAgICAgICAgIGZpbGxD
b250YWluZXJGcm9tU3RyaW5nKGVsZW1lbnQuZ2V0KCksIHN0cmluZywgc3RhcnQsIGVuZCk7CiAg
ICAgICAgIH0KICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQucmVsZWFzZSgp
LCBlYyk7CiAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKworICAgICAgICAgaWYgKG5leHRMaW5l
QnJlYWsgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RhcnQgPSBlbmQgKyAx
OwogICAgIH0KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAu
aAkocmV2aXNpb24gMTk2NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDkgKzQ0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50Kiwg
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCk7CiAgICAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCos
IGNvbnN0IFZlY3RvcjxOb2RlKj4mKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IFJhbmdlKiwKKyAgICBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiwK
ICAgICAgICAgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IERv
Tm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRlTm9kZSwKKyAgICBTdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqLCBFQ2hpbGRyZW5Pbmx5ID0gSW5jbHVkZU5vZGUs
CiAgICAgICAgIFZlY3RvcjxOb2RlKj4qID0gMCwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgPSBE
b05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTk2NjQpCisrKyBXZWJDb3JlL3BhZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3IEBA
IHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKIHsKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBuZXZlciAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8gU2VlIHRo
ZSBuZXh0IG1ldGhvZC4KICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIE5TU3RyaW5n
ICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25vZGUgX25vZGVdLCBJbmNsdWRlTm9kZSwg
bm9kZXMgPyAmbm9kZUxpc3QgOiAwKS5nZXROU1N0cmluZygpOworICAgIE5TU3RyaW5nICptYXJr
dXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25vZGUgX25vZGVdLCBJbmNsdWRlTm9kZSwgbm9kZXMg
PyAmbm9kZUxpc3QgOiAwKTsKICAgICBpZiAobm9kZXMpCiAgICAgICAgICpub2RlcyA9IFtzZWxm
IG5vZGVzRnJvbUxpc3Q6Jm5vZGVMaXN0XTsKIApAQCAtMzUxLDcgKzM1MSw3IEBAIHN0YXRpYyBp
bmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKIHsKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgcHJldmlv
dXMgbWV0aG9kLgogICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7Ci0gICAgTlNTdHJpbmcgKm1h
cmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1cChbcmFuZ2UgX3JhbmdlXSwgbm9kZXMgPyAmbm9kZUxp
c3QgOiAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKS5nZXROU1N0cmluZygpOworICAgIE5TU3Ry
aW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW3JhbmdlIF9yYW5nZV0sIG5vZGVzID8g
Jm5vZGVMaXN0IDogMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CiAgICAgaWYgKG5vZGVzKQog
ICAgICAgICAqbm9kZXMgPSBbc2VsZiBub2Rlc0Zyb21MaXN0OiZub2RlTGlzdF07CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwCShyZXZpc2lvbiAxOTY2
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nTGlzdC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLURlcHJlY2F0ZWRTdHJpbmdMaXN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpz
cGxpdChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzZXBhcmF0b3IsIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnMsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpCi17Ci0gICAgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgcmVzdWx0OwotCi0gICAgaW50IHN0YXJ0UG9zID0gMDsKLSAgICBpbnQgZW5kUG9zOwot
ICAgIHdoaWxlICgoZW5kUG9zID0gcy5maW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSAtMSkg
ewotICAgICAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzLm1pZChzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQ
b3MpKTsKLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyBzZXBhcmF0b3IubGVuZ3RoKCk7Ci0g
ICAgfQotICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAhPSAoaW50KXMubGVu
Z3RoKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocy5taWQoc3RhcnRQb3MpKTsKLSAgICAgICAg
ICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gCi1EZXByZWNhdGVkU3RyaW5nTGlzdCBEZXBy
ZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoY29uc3QgRGVwcmVjYXRlZENoYXIgJnNlcGFyYXRvciwg
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcywgYm9vbCBhbGxvd0VtcHR5RW50cmllcykKLXsKLSAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KERlcHJlY2F0ZWRTdHJpbmcoc2Vw
YXJhdG9yKSwgcywgYWxsb3dFbXB0eUVudHJpZXMpOwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERl
cHJlY2F0ZWRTdHJpbmdMaXN0Ojpqb2luKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnNlcGFyYXRv
cikgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdDsKLSAgICAKLSAgICBmb3Ig
KENvbnN0SXRlcmF0b3IgaSA9IGJlZ2luKCksIGogPSArK2JlZ2luKCk7IGkgIT0gZW5kKCk7ICsr
aSwgKytqKSB7Ci0gICAgICAgIHJlc3VsdCArPSAqaTsKLSAgICAgICAgaWYgKGogIT0gZW5kKCkp
IHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBzZXBhcmF0b3I7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJp
bmdMaXN0Ojpwb3BfZnJvbnQoKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcgZnJvbnQgPSBmaXJz
dCgpOwotICAgIHJlbW92ZShiZWdpbigpKTsKLSAgICByZXR1cm4gZnJvbnQ7Ci19Ci0KLX0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmgJKHJldmlzaW9uIDE5NjY0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVwcmVj
YXRlZFN0cmluZ0xpc3RfaAotI2RlZmluZSBEZXByZWNhdGVkU3RyaW5nTGlzdF9oCi0KLSNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5o
IgotCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0FycmF5OwotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRGVwcmVjYXRlZFN0cmluZ0xpc3QgOiBwdWJsaWMgRGVwcmVj
YXRlZFZhbHVlTGlzdDxEZXByZWNhdGVkU3RyaW5nPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIERl
cHJlY2F0ZWRTdHJpbmdMaXN0IHNwbGl0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJiwgY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gZmFsc2UpOwotICAg
IHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nTGlzdCBzcGxpdChjb25zdCBEZXByZWNhdGVkQ2hhciAm
LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICYsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBmYWxz
ZSk7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIGpvaW4oY29uc3QgRGVwcmVjYXRlZFN0cmluZyAm
KSBjb25zdDsKLSAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBvcF9mcm9udCgpOwotICAgIAot
I2lmZGVmIF9fT0JKQ19fCi0gICAgTlNBcnJheSAqZ2V0TlNBcnJheSgpIGNvbnN0OwotI2VuZGlm
Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGVwcmVjYXRl
ZFN0cmluZ0xpc3RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGVw
cmVjYXRlZFN0cmluZ0xpc3RNYWMubW0JKHJldmlzaW9uIDE5NjY0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lt
cG9ydCAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1O
U0FycmF5ICpEZXByZWNhdGVkU3RyaW5nTGlzdDo6Z2V0TlNBcnJheSgpIGNvbnN0Ci17Ci0gICAg
TlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3Ig
KENvbnN0SXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmQoKTsgKytpdCkgewotICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0OigqaXQpLmdldE5TU3RyaW5nKCldOwotICAgIH0KLSAgICByZXR1
cm4gYXJyYXk7Ci19Ci0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13215</attachid>
            <date>2007-02-17 13:48:18 -0800</date>
            <delta_ts>2007-02-18 05:46:10 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11219-2.diff</filename>
            <type>text/plain</type>
            <size>28749</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTY4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDctMDItMTYgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE5CisgICAgICAgIGZpbmlzaCByZW1vdmlu
ZyBEZXByZWNhdGVkU3RyaW5nTGlzdAorCisgICAgICAgIFJlcGxhY2UgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgdXNhZ2UgYnkgVmVjdG9yIGFuZCByZW1vdmUgRGVwcmVjYXRlZFN0cmluZ0xpc3QuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbGxDb250YWluZXJGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZyYWdtZW50RnJvbVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6
CisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtX
ZWJDb3JlRnJhbWVCcmlkZ2UgbWFya3VwU3RyaW5nRnJvbU5vZGU6bm9kZXM6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBtYXJrdXBTdHJpbmdGcm9tUmFuZ2U6bm9kZXM6XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0RlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tOiBSZW1vdmVkLgorCiAy
MDA3LTAyLTE3ICBEYXZlIEh5YXR0IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdl
IGhvdyB0ZXh0YXJlYSByZXNpemVycyBwYWludCB0byBtb3JlIGNsb3NlbHkgbWF0Y2ggdGhlIHdh
eSB0aGUgbWFpbiB3aW5kb3cgcmVzaXplciBwYWludHMuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2ODApCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMxLDkg
KzMzMSw2IEBACiAJCTY1MTg4ODg4MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTg4ODg2
MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9yLmNwcCAqLzsgfTsKIAkJNjUxODg4ODkw
QUZGM0JGNzAwMTY0NzIwIC8qIFJlc291cmNlRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTg4ODg3MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNv
dXJjZUVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNjUxODg4OEIwQUZGM0MxNDAwMTY0NzIwIC8qIFJlc291cmNlRXJyb3JNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE4ODg4QTBBRkYz
QzE0MDAxNjQ3MjAgLyogUmVzb3VyY2VFcnJvck1hYy5tbSAqLzsgfTsKLQkJNjUxQjREODUwOUFD
ODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUI0RDgzMDlBQzgzMzcwMDI5RjFFRiAv
KiBEZXByZWNhdGVkU3RyaW5nTGlzdC5jcHAgKi87IH07Ci0JCTY1MUI0RDg2MDlBQzgzMzcwMDI5
RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxQjREODQwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0
ZWRTdHJpbmdMaXN0LmggKi87IH07Ci0JCTY1MUI0RDhGMDlBQzg1OUYwMDI5RjFFRiAvKiBEZXBy
ZWNhdGVkU3RyaW5nTGlzdE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1MUI0RDhFMDlBQzg1OUYwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5n
TGlzdE1hYy5tbSAqLzsgfTsKIAkJNjUyMkJDREYwOUM5REFBODAwQzlCQTdBIC8qIFJlc291cmNl
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjUyMkJDREUwOUM5REFBODAwQzlCQTdBIC8qIFJlc291cmNlUmVxdWVzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NEVDNjExMDk3Nzc4RjUw
MERBQjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NEVDNjBGMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3Jl
RnJhbWVCcmlkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk2NTRFQzYxMjA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0RUM2MTAw
OTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5tbSAqLzsgfTsKQEAgLTM0MTks
OSArMzQxNiw2IEBACiAJCTY1MTg4ODg2MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUVycm9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxODg4ODcwQUZGM0JGNzAwMTY0
NzIwIC8qIFJlc291cmNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc291cmNlRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxODg4OEEw
QUZGM0MxNDAwMTY0NzIwIC8qIFJlc291cmNlRXJyb3JNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3VyY2VFcnJvck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNjUxQjREODMwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRT
dHJpbmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBy
ZWNhdGVkU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1MUI0
RDg0MDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFN0cmluZ0xpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjUxQjREOEUwOUFDODU5RjAwMjlGMUVGIC8qIERlcHJlY2F0
ZWRTdHJpbmdMaXN0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NTIyQkNERTA5QzlEQUE4MDBDOUJBN0EgLyogUmVzb3VyY2VSZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZVJlcXVlc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0OEUyNDgwOUUxRTA0RDAwQUY4MDIwIC8qIERvY3VtZW50
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2NTRFQzYwRjA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1l
QnJpZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnJhbWVC
cmlkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4MTAsNyArNjgwNCw2IEBA
CiAJCQkJOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tICovLAog
CQkJCTkzNTIwODc2MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29raWVKYXIubW0gKi8sCiAJCQkJRjU4
Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8qIEN1cnNvck1hYy5tbSAqLywKLQkJCQk2NTFCNEQ4RTA5
QUM4NTlGMDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0gKi8sCiAJCQkJNjU4
MkExNzcwOTk5OUVBMDAwQkVFQjZEIC8qIERlcHJlY2F0ZWRTdHJpbmdNYWMubW0gKi8sCiAJCQkJ
MDY2Qzc3MkMwQUI2MDNEMjAwMjM4Q0M0IC8qIEZpbGVDaG9vc2VyTWFjLm1tICovLAogCQkJCUJD
RjdDMjMzMEExNkI1RjgwMDMyRjc1QiAvKiBGb250Q2FjaGVNYWMubW0gKi8sCkBAIC05MDQ2LDgg
KzkwMzksNiBAQAogCQkJCUY1ODc4NkFEMDJERTNCODYwMUVBNDEyMiAvKiBEZXByZWNhdGVkUHRy
UXVldWUuaCAqLywKIAkJCQk2NTgyQTEzRDA5OTk5Q0Q2MDBCRUVCNkQgLyogRGVwcmVjYXRlZFN0
cmluZy5jcHAgKi8sCiAJCQkJNjU4MkExM0UwOTk5OUNENjAwQkVFQjZEIC8qIERlcHJlY2F0ZWRT
dHJpbmcuaCAqLywKLQkJCQk2NTFCNEQ4MzA5QUM4MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0
cmluZ0xpc3QuY3BwICovLAotCQkJCTY1MUI0RDg0MDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNh
dGVkU3RyaW5nTGlzdC5oICovLAogCQkJCUY1ODc4NkMyMDJERTNCODYwMUVBNDEyMiAvKiBEZXBy
ZWNhdGVkVmFsdWVMaXN0LmggKi8sCiAJCQkJRjU4Nzg1M0MwMkRFMzc1OTAxRUE0MTIyIC8qIERl
cHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmNwcCAqLywKIAkJCQlGNTg3ODUzQjAyREUzNzU5MDFFQTQx
MjIgLyogRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaCAqLywKQEAgLTk5NjcsNyArOTk1OCw2IEBA
CiAJCQkJOTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25F
eHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0Nzc1MDlBQzREOEUwMEE2QUFCNCAvKiBH
YXBSZWN0cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjUxQjREODYwOUFDODMzNzAwMjlGMUVGIC8q
IERlcHJlY2F0ZWRTdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTkzOTIzODA5QUU0
MzQ2MDAyQzUzMUYgLyogS1VSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RDZERDMwOUFGOTA2
NjAwRjU5NzU5IC8qIEZvbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTM2ODZCMDlBRjc4RjYw
MEQzNUNENiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTExNTY4LDggKzEx
NTU4LDYgQEAKIAkJCQk5MzVDNDc3MDA5QUM0RDczMDBBNkFBQjQgLyogS2V5RXZlbnRNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5MzVDNDc3MTA5QUM0RDczMDBBNkFBQjQgLyogUGxhdGZvcm1N
b3VzZUV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1QzQ3NzMwOUFDNEQ3NzAwQTZB
QUI0IC8qIFdoZWVsRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk2NTFCNEQ4NTA5QUM4
MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNjUxQjREOEYwOUFDODU5RjAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5MzkyMzcwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5MzkyM0EwOUFFNDM1QzAwMkM1MzFGIC8qIEtVUkxNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzZENkREMjA5QUY5MDY2MDBGNTk3NTkgLyogRm9udC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxOTY4MCkKKysr
IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2
IEBACiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbW1lbnQuaCIK
ICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRl
ZFN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKQEAgLTM1MSw3ICszNTAsNyBA
QCBzdGF0aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoCiAKIC8vIEZJWE1FOiBT
aG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RBbm5vdGF0
ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBhbmQgc3R5
bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1hcmt1cFN0
cmluZygpCi1EZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSAqcmFuZ2Us
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSkK
K1N0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBu
b2RlcywgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUpCiB7CiAgICAgaWYgKCFyYW5n
ZSB8fCByYW5nZS0+aXNEZXRhY2hlZCgpKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmlu
ZygpOwpAQCAtMzY1LDEyICszNjQsMTIgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAo
Y29uc3QgUmFuZwogICAgIE5vZGUgKmNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CiAKLSAgICBEb2N1bWVudCAq
ZG9jID0gY29tbW9uQW5jZXN0b3ItPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvYyA9IGNv
bW1vbkFuY2VzdG9yLT5kb2N1bWVudCgpOwogICAgIC8vIGRpc2FibGUgdGhlIGRlbGV0ZSBidXR0
b24gc28gaXQncyBlbGVtZW50cyBhcmUgbm90IHNlcmlhbGl6ZWQgaW50byB0aGUgbWFya3VwCiAg
ICAgZG9jLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLT5kaXNh
YmxlKCk7CiAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
IAotICAgIE5vZGUgKmNvbW1vbkFuY2VzdG9yQmxvY2sgPSAwOworICAgIE5vZGUqIGNvbW1vbkFu
Y2VzdG9yQmxvY2sgPSAwOwogICAgIGlmIChjb21tb25BbmNlc3RvcikgewogICAgICAgICBjb21t
b25BbmNlc3RvckJsb2NrID0gZW5jbG9zaW5nQmxvY2soY29tbW9uQW5jZXN0b3IpOwogICAgICAg
ICBpZiAoY29tbW9uQW5jZXN0b3JCbG9jayAmJiBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdO
YW1lKHRib2R5VGFnKSkgewpAQCAtMzgyLDcgKzM4MSw4IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgfQogICAgIH0KIAotICAgIERlcHJlY2F0ZWRT
dHJpbmdMaXN0IG1hcmt1cHM7CisgICAgVmVjdG9yPFN0cmluZz4gcHJlZml4ZXM7CisgICAgVmVj
dG9yPFN0cmluZz4gc3VmZml4ZXM7CiAgICAgTm9kZSAqcGFzdEVuZCA9IHJhbmdlLT5wYXN0RW5k
Tm9kZSgpOwogICAgIE5vZGUgKmxhc3RDbG9zZWQgPSAwOwogICAgIFZlY3RvcjxOb2RlKj4gYW5j
ZXN0b3JzVG9DbG9zZTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgICAgICByZXR1cm4gaW50ZXJjaGFuZ2VOZXdsaW5l
U3RyaW5nOwogICAgICAgICB9CiAKLSAgICAgICAgbWFya3Vwcy5hcHBlbmQoaW50ZXJjaGFuZ2VO
ZXdsaW5lU3RyaW5nKTsKKyAgICAgICAgc3VmZml4ZXMuYXBwZW5kKGludGVyY2hhbmdlTmV3bGlu
ZVN0cmluZyk7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IHZpc2libGVTdGFydC5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCk7CiAgICAgfQogCkBAIC00MzYsNyArNDM2LDcgQEAgRGVwcmVjYXRl
ZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgICAgICAKICAgICAgICAgLy8gQWRk
IHRoZSBub2RlIHRvIHRoZSBtYXJrdXAuCiAgICAgICAgIGlmIChhZGRNYXJrdXBGb3JOb2RlKSB7
Ci0gICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChzdGFydE1hcmt1cChuLCByYW5nZSwgYW5ub3Rh
dGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5kKHN0
YXJ0TWFya3VwKG4sIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7CiAgICAg
ICAgICAgICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChuKTsKICAg
ICAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3Vw
KGNvbnN0IFJhbmcKICAgICAgICAgaWYgKG4tPmZpcnN0Q2hpbGQoKSA9PSAwIHx8IHNraXBEZXNj
ZW5kYW50cykgewogICAgICAgICAgICAgLy8gTm9kZSBoYXMgbm8gY2hpbGRyZW4sIG9yIHdlIGFy
ZSBza2lwcGluZyBpdCdzIGRlc2NlbmRhbnRzLCBhZGQgaXRzIGNsb3NlIHRhZyBub3cuCiAgICAg
ICAgICAgICBpZiAoYWRkTWFya3VwRm9yTm9kZSkgewotICAgICAgICAgICAgICAgIG1hcmt1cHMu
YXBwZW5kKGVuZE1hcmt1cChuKSk7CisgICAgICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5kKGVu
ZE1hcmt1cChuKSk7CiAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IG47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTQ1Nyw3ICs0NTcsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAh
PSBwYXN0RW5kICYmIG5leHQtPmlzRGVzY2VuZGFudE9mKGFuY2VzdG9yKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBh
dCB0aGUgZW5kIG9mIHRoZSByYW5nZSwgY2xvc2UgYW5jZXN0b3JzIHVwIHRvIHNpYmxpbmcgb2Yg
bmV4dCBub2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFy
a3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXhlcy5hcHBlbmQo
ZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2xvc2Vk
ID0gYW5jZXN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcnNUb0Nsb3NlLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWFuY2VzdG9yc1RvQ2xv
c2UuaXNFbXB0eSgpKTsKQEAgLTQ3Myw4ICs0NzMsOCBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBiKSBhbmNlc3RvcnMgdGhhdCB3ZSBuZXZl
ciBlbmNvdW50ZXJlZCBkdXJpbmcgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIHN0YXJ0aW5nIGF0IHN0
YXJ0Tm9kZToKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGFydE5vZGUtPmlzRGVz
Y2VuZGFudE9mKHBhcmVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVw
ZW5kKHN0YXJ0TWFya3VwKHBhcmVudCwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChw
YXJlbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChzdGFydE1h
cmt1cChwYXJlbnQsIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdWZmaXhlcy5hcHBlbmQoZW5kTWFya3VwKHBhcmVudCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLT5hcHBlbmQocGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxh
c3RDbG9zZWQgPSBwYXJlbnQ7CkBAIC01MTEsOCArNTExLDggQEAgRGVwcmVjYXRlZFN0cmluZyBj
cmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmt1cHMucHJl
cGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUu
Z2V0KCkpKTsKLSAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3Rvcikp
OworICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5n
ZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgc3VmZml4ZXMu
YXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOwogICAgICAgICAgICAgaWYgKG5vZGVzKSB7CiAg
ICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChhbmNlc3Rvcik7CiAgICAgICAgICAgICB9ICAg
ICAgICAKQEAgLTUyMiwxNCArNTIyLDE0IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3Vw
KGNvbnN0IFJhbmcKICAgICB9CiAKICAgICBpZiAoYW5ub3RhdGUgJiYgbmVlZEludGVyY2hhbmdl
TmV3bGluZUFmdGVyKHZpc2libGVFbmQucHJldmlvdXMoKSkpCi0gICAgICAgIG1hcmt1cHMuYXBw
ZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZyk7CisgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChp
bnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOwogCiAgICAgLy8gUmV0YWluIHRoZSBNYWlsIHF1b3Rl
IGxldmVsIGJ5IGluY2x1ZGluZyBhbGwgYW5jZXN0b3IgbWFpbCBibG9jayBxdW90ZXMuCiAgICAg
aWYgKGFubm90YXRlKSB7CiAgICAgICAgIGZvciAoTm9kZSAqYW5jZXN0b3IgPSBjb21tb25BbmNl
c3RvckJsb2NrOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShhbmNlc3RvcikpIHsKLSAgICAgICAg
ICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAoYW5jZXN0b3IsIHJhbmdlLCBhbm5v
dGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBl
bmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5k
KHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQo
KSkpOworICAgICAgICAgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChlbmRNYXJrdXAoYW5jZXN0b3Ip
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU1MCwxOCArNTUwLDQwIEBA
IERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgaWYgKCFz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFKSAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4ocm9vdCktPmhhc0F0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikp
CiAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQkFDS0dST1VORF9JTUFH
RSwgInVybCgnIiArIHN0YXRpY19jYXN0PEVsZW1lbnQqPihyb290KS0+Z2V0QXR0cmlidXRlKGJh
Y2tncm91bmRBdHRyKSArICInKSIpOwogICAgICAgICAKLSAgICAgICAgbWFya3Vwcy5wcmVwZW5k
KCI8ZGl2IHN0eWxlPSciICsgc3R5bGUtPmNzc1RleHQoKS5kZXByZWNhdGVkU3RyaW5nKCkgKyAi
Jz4iKTsKLSAgICAgICAgbWFya3Vwcy5hcHBlbmQoIjwvZGl2PiIpOworICAgICAgICBwcmVmaXhl
cy5hcHBlbmQoIjxkaXYgc3R5bGU9JyIgKyBzdHlsZS0+Y3NzVGV4dCgpLmRlcHJlY2F0ZWRTdHJp
bmcoKSArICInPiIpOworICAgICAgICBzdWZmaXhlcy5hcHBlbmQoIjwvZGl2PiIpOwogICAgIH0K
ICAgICAKICAgICAvLyBhZGQgaW4gdGhlICJkZWZhdWx0IHN0eWxlIiBmb3IgdGhpcyBtYXJrdXAK
ICAgICAvLyBGSVhNRTogSGFuZGxlIGNhc2Ugd2hlcmUgdmFsdWUgaGFzIGlsbGVnYWwgY2hhcmFj
dGVycyBpbiBpdCwgbGlrZSAiCiAgICAgRGVwcmVjYXRlZFN0cmluZyBvcGVuVGFnID0gRGVwcmVj
YXRlZFN0cmluZygiPHNwYW4gY2xhc3M9XCIiKSArIEFwcGxlU3R5bGVTcGFuQ2xhc3MgKyAiXCIg
c3R5bGU9XCIiICsgZGVmYXVsdFN0eWxlLT5jc3NUZXh0KCkuZGVwcmVjYXRlZFN0cmluZygpICsg
IlwiPiI7Ci0gICAgbWFya3Vwcy5wcmVwZW5kKG9wZW5UYWcpOwotICAgIG1hcmt1cHMuYXBwZW5k
KCI8L3NwYW4+Iik7CisgICAgcHJlZml4ZXMuYXBwZW5kKG9wZW5UYWcpOworICAgIHN1ZmZpeGVz
LmFwcGVuZCgiPC9zcGFuPiIpOwogCiAgICAgZG9jLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRl
QnV0dG9uQ29udHJvbGxlcigpLT5lbmFibGUoKTsKLSAgICByZXR1cm4gbWFya3Vwcy5qb2luKCIi
KTsKKyAgICB1bnNpZ25lZCBudW1QcmVmaXhlcyA9IHByZWZpeGVzLnNpemUoKTsKKyAgICB1bnNp
Z25lZCBudW1TdWZmaXhlcyA9IHN1ZmZpeGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB0b3RhbExl
bmd0aCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVByZWZpeGVzOyArK2kp
CisgICAgICAgIHRvdGFsTGVuZ3RoICs9IHByZWZpeGVzW2ldLmxlbmd0aCgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdWZmaXhlczsgKytpKQorICAgICAgICB0b3RhbExlbmd0
aCArPSBzdWZmaXhlc1tpXS5sZW5ndGgoKTsKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdCh0b3Rh
bExlbmd0aCk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1QcmVmaXhlczsgaSA+IDA7IC0taSkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHByZWZp
eCA9IHByZWZpeGVzW2kgLSAxXTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gcHJlZml4Lmxl
bmd0aCgpOworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSArIG9mZnNldCwgcHJlZml4LmNo
YXJhY3RlcnMoKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG9mZnNldCArPSBs
ZW5ndGg7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdWZmaXhlczsg
KytpKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3VmZml4ID0gc3VmZml4ZXNbaV07CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgbWVtY3B5KHJl
c3VsdC5kYXRhKCkgKyBvZmZzZXQsIHN1ZmZpeC5jaGFyYWN0ZXJzKCksIGxlbmd0aCAqIHNpemVv
ZihVQ2hhcikpOworICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoOworICAgIH0KKyAgICBBU1NFUlQo
b2Zmc2V0ID09IHRvdGFsTGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQp
OwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJp
bmcmIGJhc2VVUkwpCkBAIC01NzksNyArNjAxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbQogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKLURl
cHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9u
bHkgaW5jbHVkZUNoaWxkcmVuLAorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2Rl
LCBFQ2hpbGRyZW5Pbmx5IGluY2x1ZGVDaGlsZHJlbiwKICAgICBWZWN0b3I8Tm9kZSo+KiBub2Rl
cywgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUpCiB7CiAgICAgQVNTRVJUKGFubm90
YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7IC8vIGFubm90YXRpb24gbm90IHll
dCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBjb2RlIHBhdGgKQEAgLTU5Myw0NyArNjE1LDQ5IEBAIERl
cHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgdm9pZCBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhDb250YWluZXJOb2Rl
KiBwYXJhZ3JhcGgsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKK3N0YXRpYyB2b2lk
IGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENvbnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGludCBwYXJhZ3JhcGhTdGFydCwgaW50IHBhcmFncmFwaEVuZCkKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwYXJhZ3JhcGgtPmRvY3VtZW50KCk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkgeworICAgIGlm
IChwYXJhZ3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQpIHsKICAgICAgICAgcGFyYWdyYXBoLT5h
cHBlbmRDaGlsZChjcmVhdGVCbG9ja1BsYWNlaG9sZGVyRWxlbWVudChkb2N1bWVudCksIGVjKTsK
ICAgICAgICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YXNzZXJ0KHN0cmluZy5maW5kKCdcbicpID09IC0xKTsKKyAgICBBU1NFUlQoc3RyaW5nLmZpbmQo
J1xuJywgcGFyYWdyYXBoU3RhcnQpID09IC0xIHx8IHN0cmluZy5maW5kKCdcbicsIHBhcmFncmFw
aFN0YXJ0KSA+PSBwYXJhZ3JhcGhFbmQpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgdGFi
TGlzdCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnXHQnLCBzdHJpbmcsIHRydWUpOwot
ICAgIERlcHJlY2F0ZWRTdHJpbmcgdGFiVGV4dCA9ICIiOworICAgIGludCBzdGFydCA9IHBhcmFn
cmFwaFN0YXJ0OworICAgIFN0cmluZyB0YWJUZXh0ID0gIiI7CiAgICAgYm9vbCBmaXJzdCA9IHRy
dWU7Ci0gICAgd2hpbGUgKCF0YWJMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVk
U3RyaW5nIHMgPSB0YWJMaXN0LmZpcnN0KCk7Ci0gICAgICAgIHRhYkxpc3QucG9wX2Zyb250KCk7
CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaW50IG5leHRUYWIgPSBzdHJpbmcuZmluZCgnXHQn
LCBzdGFydCk7CisgICAgICAgIGJvb2wgYXRQYXJhZ3JhcGhFbmQgPSBuZXh0VGFiID09IC0xIHx8
IG5leHRUYWIgPiBwYXJhZ3JhcGhFbmQ7CisgICAgICAgIGludCBlbmQgPSBhdFBhcmFncmFwaEVu
ZCA/IHBhcmFncmFwaEVuZCA6IG5leHRUYWI7CiAKICAgICAgICAgLy8gYXBwZW5kIHRoZSBub24t
dGFiIHRleHR1YWwgcGFydAotICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlm
IChzdGFydCAhPSBlbmQpIHsKICAgICAgICAgICAgIGlmICghdGFiVGV4dC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICBwYXJhZ3JhcGgtPmFwcGVuZENoaWxkKGNyZWF0ZVRhYlNwYW5FbGVt
ZW50KGRvY3VtZW50LCB0YWJUZXh0KSwgZWMpOwogICAgICAgICAgICAgICAgIEFTU0VSVChlYyA9
PSAwKTsKICAgICAgICAgICAgICAgICB0YWJUZXh0ID0gIiI7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gdGV4dE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUo
c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKHMsIGZpcnN0LCB0YWJMaXN0LmlzRW1wdHko
KSkpOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHRleHROb2RlID0gZG9jdW1lbnQtPmNyZWF0
ZVRleHROb2RlKHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShzdHJpbmcuc3Vic3RyaW5n
KHN0YXJ0LCBlbmQgLSBzdGFydCksIGZpcnN0LCBhdFBhcmFncmFwaEVuZCkpOwogICAgICAgICAg
ICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZCh0ZXh0Tm9kZS5yZWxlYXNlKCksIGVjKTsKICAgICAg
ICAgICAgIEFTU0VSVChlYyA9PSAwKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIHRoZXJlIGlz
IGEgdGFiIGFmdGVyIGV2ZXJ5IGVudHJ5LCBleGNlcHQgdGhlIGxhc3QgZW50cnkKLSAgICAgICAg
Ly8gKGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpcyBhIHRhYiwgdGhlIGxpc3QgZ2V0cyBhbiBleHRy
YSBlbXB0eSBlbnRyeSkKLSAgICAgICAgaWYgKCF0YWJMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHRhYlRleHQgKz0gJ1x0JzsKKyAgICAgICAgaWYgKCFhdFBhcmFncmFwaEVuZCkKKyAgICAg
ICAgICAgIHRhYlRleHQuYXBwZW5kKCdcdCcpOwogICAgICAgICBlbHNlIGlmICghdGFiVGV4dC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hpbGQoY3JlYXRlVGFi
U3BhbkVsZW1lbnQoZG9jdW1lbnQsIHRhYlRleHQpLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQo
ZWMgPT0gMCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgaWYgKGF0UGFyYWdyYXBo
RW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0YXJ0ID0gZW5kICsgMTsKICAgICAg
ICAgZmlyc3QgPSBmYWxzZTsKICAgICB9CiB9CkBAIC02NTYsNyArNjgwLDcgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIAotICAgIERlcHJlY2F0ZWRTdHJp
bmcgc3RyaW5nID0gdGV4dC5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3RyaW5nIHN0cmluZyA9
IHRleHQuY29weSgpOwogICAgIHN0cmluZy5yZXBsYWNlKCJcclxuIiwgIlxuIik7CiAgICAgc3Ry
aW5nLnJlcGxhY2UoJ1xyJywgJ1xuJyk7CiAKQEAgLTY3OCwyOCArNzAyLDMyIEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KIAogICAgIC8vIEEgc3RyaW5nIHdpdGgg
bm8gbmV3bGluZXMgZ2V0cyBhZGRlZCBpbmxpbmUsIHJhdGhlciB0aGFuIGJlaW5nIHB1dCBpbnRv
IGEgcGFyYWdyYXBoLgogICAgIGlmIChzdHJpbmcuZmluZCgnXG4nKSA9PSAtMSkgewotICAgICAg
ICBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhmcmFnbWVudC5nZXQoKSwgc3RyaW5nKTsKKyAgICAg
ICAgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoZnJhZ21lbnQuZ2V0KCksIHN0cmluZywgMCwgc3Ry
aW5nLmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9
CiAKICAgICAvLyBCcmVhayBzdHJpbmcgaW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5lIGJyZWFr
cyB0dXJuIGludG8gZW1wdHkgcGFyYWdyYXBocy4KLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBs
aXN0ID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCdcbicsIHN0cmluZywgdHJ1ZSk7IC8v
IHRydWUgZ2V0cyB1cyBlbXB0eSBzdHJpbmdzIGluIHRoZSBsaXN0Ci0gICAgd2hpbGUgKCFsaXN0
LmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBsaXN0LmZpcnN0KCk7
Ci0gICAgICAgIGxpc3QucG9wX2Zyb250KCk7CisgICAgaW50IHN0YXJ0ID0gMDsKKyAgICB3aGls
ZSAoMSkgeworICAgICAgICBpbnQgbmV4dExpbmVCcmVhayA9IHN0cmluZy5maW5kKCdcbicsIHN0
YXJ0KTsKKyAgICAgICAgaW50IGVuZCA9IG5leHRMaW5lQnJlYWsgIT0gLTEgPyBuZXh0TGluZUJy
ZWFrIDogc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
OwotICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKHN0YXJ0ID09IGVuZCAmJiBuZXh0TGluZUJyZWFrID09IC0xKSB7CiAgICAgICAgICAgICAv
LyBGb3IgbGFzdCBsaW5lLCB1c2UgdGhlICJtYWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQLgogICAg
ICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoeGh0bWxOYW1lc3Bh
Y2VVUkksICJiciIsIGVjKTsKICAgICAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKICAgICAgICAg
ICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIEFwcGxlSW50ZXJjaGFuZ2VOZXds
aW5lKTsgICAgICAgICAgICAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVsZW1lbnQg
PSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCk7Ci0gICAgICAgICAgICBm
aWxsQ29udGFpbmVyRnJvbVN0cmluZyhlbGVtZW50LmdldCgpLCBzKTsKKyAgICAgICAgICAgIGZp
bGxDb250YWluZXJGcm9tU3RyaW5nKGVsZW1lbnQuZ2V0KCksIHN0cmluZywgc3RhcnQsIGVuZCk7
CiAgICAgICAgIH0KICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQucmVsZWFz
ZSgpLCBlYyk7CiAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKworICAgICAgICAgaWYgKG5leHRM
aW5lQnJlYWsgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RhcnQgPSBlbmQg
KyAxOwogICAgIH0KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJr
dXAuaAkocmV2aXNpb24gMTk2ODApCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDkgKzQ0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50
KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCk7CiAgICAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVu
dCosIGNvbnN0IFZlY3RvcjxOb2RlKj4mKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRl
TWFya3VwKGNvbnN0IFJhbmdlKiwKKyAgICBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdl
KiwKICAgICAgICAgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9
IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBjcmVh
dGVNYXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRlTm9kZSwKKyAgICBT
dHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqLCBFQ2hpbGRyZW5Pbmx5ID0gSW5jbHVkZU5v
ZGUsCiAgICAgICAgIFZlY3RvcjxOb2RlKj4qID0gMCwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2Ug
PSBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTk2ODApCisrKyBXZWJDb3JlL3BhZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3
IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBuZXZlciAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8gU2Vl
IHRoZSBuZXh0IG1ldGhvZC4KICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIE5TU3Ry
aW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25vZGUgX25vZGVdLCBJbmNsdWRlTm9k
ZSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwKS5nZXROU1N0cmluZygpOworICAgIE5TU3RyaW5nICpt
YXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25vZGUgX25vZGVdLCBJbmNsdWRlTm9kZSwgbm9k
ZXMgPyAmbm9kZUxpc3QgOiAwKTsKICAgICBpZiAobm9kZXMpCiAgICAgICAgICpub2RlcyA9IFtz
ZWxmIG5vZGVzRnJvbUxpc3Q6Jm5vZGVMaXN0XTsKIApAQCAtMzUxLDcgKzM1MSw3IEBAIHN0YXRp
YyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgcHJl
dmlvdXMgbWV0aG9kLgogICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7Ci0gICAgTlNTdHJpbmcg
Km1hcmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1cChbcmFuZ2UgX3JhbmdlXSwgbm9kZXMgPyAmbm9k
ZUxpc3QgOiAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKS5nZXROU1N0cmluZygpOworICAgIE5T
U3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW3JhbmdlIF9yYW5nZV0sIG5vZGVz
ID8gJm5vZGVMaXN0IDogMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CiAgICAgaWYgKG5vZGVz
KQogICAgICAgICAqbm9kZXMgPSBbc2VsZiBub2Rlc0Zyb21MaXN0OiZub2RlTGlzdF07CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwCShyZXZpc2lvbiAx
OTY4MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nTGlzdC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLURlcHJlY2F0ZWRTdHJpbmdMaXN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0
OjpzcGxpdChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzZXBhcmF0b3IsIGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJnMsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpCi17Ci0gICAgRGVwcmVjYXRlZFN0
cmluZ0xpc3QgcmVzdWx0OwotCi0gICAgaW50IHN0YXJ0UG9zID0gMDsKLSAgICBpbnQgZW5kUG9z
OwotICAgIHdoaWxlICgoZW5kUG9zID0gcy5maW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSAt
MSkgewotICAgICAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9z
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzLm1pZChzdGFydFBvcywgZW5kUG9zIC0gc3Rh
cnRQb3MpKTsKLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyBzZXBhcmF0b3IubGVuZ3RoKCk7
Ci0gICAgfQotICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAhPSAoaW50KXMu
bGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocy5taWQoc3RhcnRQb3MpKTsKLSAgICAg
ICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gCi1EZXByZWNhdGVkU3RyaW5nTGlzdCBE
ZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoY29uc3QgRGVwcmVjYXRlZENoYXIgJnNlcGFyYXRv
ciwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcywgYm9vbCBhbGxvd0VtcHR5RW50cmllcykKLXsK
LSAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KERlcHJlY2F0ZWRTdHJpbmco
c2VwYXJhdG9yKSwgcywgYWxsb3dFbXB0eUVudHJpZXMpOwotfQotCi1EZXByZWNhdGVkU3RyaW5n
IERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpqb2luKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnNlcGFy
YXRvcikgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdDsKLSAgICAKLSAgICBm
b3IgKENvbnN0SXRlcmF0b3IgaSA9IGJlZ2luKCksIGogPSArK2JlZ2luKCk7IGkgIT0gZW5kKCk7
ICsraSwgKytqKSB7Ci0gICAgICAgIHJlc3VsdCArPSAqaTsKLSAgICAgICAgaWYgKGogIT0gZW5k
KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBzZXBhcmF0b3I7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRT
dHJpbmdMaXN0Ojpwb3BfZnJvbnQoKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcgZnJvbnQgPSBm
aXJzdCgpOwotICAgIHJlbW92ZShiZWdpbigpKTsKLSAgICByZXR1cm4gZnJvbnQ7Ci19Ci0KLX0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmgJKHJldmlzaW9uIDE5
NjgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVw
cmVjYXRlZFN0cmluZ0xpc3RfaAotI2RlZmluZSBEZXByZWNhdGVkU3RyaW5nTGlzdF9oCi0KLSNp
bmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlz
dC5oIgotCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0FycmF5OwotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGVwcmVjYXRlZFN0cmluZ0xpc3QgOiBwdWJsaWMgRGVw
cmVjYXRlZFZhbHVlTGlzdDxEZXByZWNhdGVkU3RyaW5nPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IERlcHJlY2F0ZWRTdHJpbmdMaXN0IHNwbGl0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJiwgY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gZmFsc2UpOwot
ICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nTGlzdCBzcGxpdChjb25zdCBEZXByZWNhdGVkQ2hh
ciAmLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICYsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBm
YWxzZSk7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIGpvaW4oY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyAmKSBjb25zdDsKLSAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBvcF9mcm9udCgpOwotICAg
IAotI2lmZGVmIF9fT0JKQ19fCi0gICAgTlNBcnJheSAqZ2V0TlNBcnJheSgpIGNvbnN0OwotI2Vu
ZGlmCi19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGVwcmVj
YXRlZFN0cmluZ0xpc3RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0JKHJldmlzaW9uIDE5NjgwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2ltcG9ydCAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1OU0FycmF5ICpEZXByZWNhdGVkU3RyaW5nTGlzdDo6Z2V0TlNBcnJheSgpIGNvbnN0Ci17Ci0g
ICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBm
b3IgKENvbnN0SXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmQoKTsgKytpdCkgewotICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OigqaXQpLmdldE5TU3RyaW5nKCldOwotICAgIH0KLSAgICBy
ZXR1cm4gYXJyYXk7Ci19Ci0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13224</attachid>
            <date>2007-02-18 05:46:10 -0800</date>
            <delta_ts>2007-02-27 19:57:59 -0800</delta_ts>
            <desc>Improved patch II</desc>
            <filename>11219-3.diff</filename>
            <type>text/plain</type>
            <size>28687</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTY5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDctMDItMTggIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE5CisgICAgICAgIGZpbmlzaCByZW1vdmlu
ZyBEZXByZWNhdGVkU3RyaW5nTGlzdAorCisgICAgICAgIFJlcGxhY2UgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgdXNhZ2UgYnkgVmVjdG9yIGFuZCByZW1vdmUgRGVwcmVjYXRlZFN0cmluZ0xpc3QuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbGxDb250YWluZXJGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZyYWdtZW50RnJvbVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6
CisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtX
ZWJDb3JlRnJhbWVCcmlkZ2UgbWFya3VwU3RyaW5nRnJvbU5vZGU6bm9kZXM6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBtYXJrdXBTdHJpbmdGcm9tUmFuZ2U6bm9kZXM6XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0RlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tOiBSZW1vdmVkLgorCiAy
MDA3LTAyLTE4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChCdWlsZGZpeCkuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2ODgpCisrKyBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMxLDkgKzMzMSw2
IEBACiAJCTY1MTg4ODg4MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTg4ODg2MEFGRjNC
RjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9yLmNwcCAqLzsgfTsKIAkJNjUxODg4ODkwQUZGM0JG
NzAwMTY0NzIwIC8qIFJlc291cmNlRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTg4ODg3MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVy
cm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NjUxODg4OEIwQUZGM0MxNDAwMTY0NzIwIC8qIFJlc291cmNlRXJyb3JNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE4ODg4QTBBRkYzQzE0MDAx
NjQ3MjAgLyogUmVzb3VyY2VFcnJvck1hYy5tbSAqLzsgfTsKLQkJNjUxQjREODUwOUFDODMzNzAw
MjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUI0RDgzMDlBQzgzMzcwMDI5RjFFRiAvKiBEZXBy
ZWNhdGVkU3RyaW5nTGlzdC5jcHAgKi87IH07Ci0JCTY1MUI0RDg2MDlBQzgzMzcwMDI5RjFFRiAv
KiBEZXByZWNhdGVkU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjUxQjREODQwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJp
bmdMaXN0LmggKi87IH07Ci0JCTY1MUI0RDhGMDlBQzg1OUYwMDI5RjFFRiAvKiBEZXByZWNhdGVk
U3RyaW5nTGlzdE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1MUI0RDhFMDlBQzg1OUYwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdE1h
Yy5tbSAqLzsgfTsKIAkJNjUyMkJDREYwOUM5REFBODAwQzlCQTdBIC8qIFJlc291cmNlUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyMkJD
REUwOUM5REFBODAwQzlCQTdBIC8qIFJlc291cmNlUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NEVDNjExMDk3Nzc4RjUwMERBQjUy
QyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1NEVDNjBGMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJhbWVC
cmlkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2NTRFQzYxMjA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0RUM2MTAwOTc3NzhG
NTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5tbSAqLzsgfTsKQEAgLTM0MTksOSArMzQx
Niw2IEBACiAJCTY1MTg4ODg2MEFGRjNCRjcwMDE2NDcyMCAvKiBSZXNvdXJjZUVycm9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUVycm9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxODg4ODcwQUZGM0JGNzAwMTY0NzIwIC8q
IFJlc291cmNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291
cmNlRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxODg4OEEwQUZGM0Mx
NDAwMTY0NzIwIC8qIFJlc291cmNlRXJyb3JNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUmVzb3VyY2VFcnJvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNjUxQjREODMwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXByZWNhdGVk
U3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1MUI0RDg0MDlB
QzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFN0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNjUxQjREOEUwOUFDODU5RjAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJp
bmdMaXN0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERl
cHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NTIyQkNERTA5QzlEQUE4MDBDOUJBN0EgLyogUmVzb3VyY2VSZXF1ZXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZVJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjU0OEUyNDgwOUUxRTA0RDAwQUY4MDIwIC8qIERvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTRFQzYwRjA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnJhbWVCcmlkZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4MTAsNyArNjgwNCw2IEBACiAJCQkJ
OTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tICovLAogCQkJCTkz
NTIwODc2MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29raWVKYXIubW0gKi8sCiAJCQkJRjU4Nzg0RjAw
MkRFMzc1OTAxRUE0MTIyIC8qIEN1cnNvck1hYy5tbSAqLywKLQkJCQk2NTFCNEQ4RTA5QUM4NTlG
MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3RNYWMubW0gKi8sCiAJCQkJNjU4MkExNzcw
OTk5OUVBMDAwQkVFQjZEIC8qIERlcHJlY2F0ZWRTdHJpbmdNYWMubW0gKi8sCiAJCQkJMDY2Qzc3
MkMwQUI2MDNEMjAwMjM4Q0M0IC8qIEZpbGVDaG9vc2VyTWFjLm1tICovLAogCQkJCUJDRjdDMjMz
MEExNkI1RjgwMDMyRjc1QiAvKiBGb250Q2FjaGVNYWMubW0gKi8sCkBAIC05MDQ2LDggKzkwMzks
NiBAQAogCQkJCUY1ODc4NkFEMDJERTNCODYwMUVBNDEyMiAvKiBEZXByZWNhdGVkUHRyUXVldWUu
aCAqLywKIAkJCQk2NTgyQTEzRDA5OTk5Q0Q2MDBCRUVCNkQgLyogRGVwcmVjYXRlZFN0cmluZy5j
cHAgKi8sCiAJCQkJNjU4MkExM0UwOTk5OUNENjAwQkVFQjZEIC8qIERlcHJlY2F0ZWRTdHJpbmcu
aCAqLywKLQkJCQk2NTFCNEQ4MzA5QUM4MzM3MDAyOUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xp
c3QuY3BwICovLAotCQkJCTY1MUI0RDg0MDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3Ry
aW5nTGlzdC5oICovLAogCQkJCUY1ODc4NkMyMDJERTNCODYwMUVBNDEyMiAvKiBEZXByZWNhdGVk
VmFsdWVMaXN0LmggKi8sCiAJCQkJRjU4Nzg1M0MwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0
ZWRWYWx1ZUxpc3RJbXBsLmNwcCAqLywKIAkJCQlGNTg3ODUzQjAyREUzNzU5MDFFQTQxMjIgLyog
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaCAqLywKQEAgLTk5NjcsNyArOTk1OCw2IEBACiAJCQkJ
OTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25FeHRyYXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0Nzc1MDlBQzREOEUwMEE2QUFCNCAvKiBHYXBSZWN0
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjUxQjREODYwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJl
Y2F0ZWRTdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTkzOTIzODA5QUU0MzQ2MDAy
QzUzMUYgLyogS1VSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RDZERDMwOUFGOTA2NjAwRjU5
NzU5IC8qIEZvbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTM2ODZCMDlBRjc4RjYwMEQzNUNE
NiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTExNTY4LDggKzExNTU4LDYg
QEAKIAkJCQk5MzVDNDc3MDA5QUM0RDczMDBBNkFBQjQgLyogS2V5RXZlbnRNYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5MzVDNDc3MTA5QUM0RDczMDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2
ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1QzQ3NzMwOUFDNEQ3NzAwQTZBQUI0IC8q
IFdoZWVsRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk2NTFCNEQ4NTA5QUM4MzM3MDAy
OUYxRUYgLyogRGVwcmVjYXRlZFN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNjUx
QjREOEYwOUFDODU5RjAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU5MzkyMzcwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU5MzkyM0EwOUFFNDM1QzAwMkM1MzFGIC8qIEtVUkxNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQzZENkREMjA5QUY5MDY2MDBGNTk3NTkgLyogRm9udC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxOTY4OCkKKysrIFdlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAj
aW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbW1lbnQuaCIKICNpbmNs
dWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmlu
Z0xpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKQEAgLTM1MSw3ICszNTAsNyBAQCBzdGF0
aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoCiAKIC8vIEZJWE1FOiBTaG91bGRu
J3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBhbmQgc3R5bGUgaW5m
byBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1hcmt1cFN0cmluZygp
Ci1EZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSAqcmFuZ2UsIFZlY3Rv
cjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSkKK1N0cmlu
ZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBub2Rlcywg
RUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUpCiB7CiAgICAgaWYgKCFyYW5nZSB8fCBy
YW5nZS0+aXNEZXRhY2hlZCgpKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwpA
QCAtMzY1LDEyICszNjQsMTIgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3Qg
UmFuZwogICAgIE5vZGUgKmNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CiAKLSAgICBEb2N1bWVudCAqZG9jID0g
Y29tbW9uQW5jZXN0b3ItPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvYyA9IGNvbW1vbkFu
Y2VzdG9yLT5kb2N1bWVudCgpOwogICAgIC8vIGRpc2FibGUgdGhlIGRlbGV0ZSBidXR0b24gc28g
aXQncyBlbGVtZW50cyBhcmUgbm90IHNlcmlhbGl6ZWQgaW50byB0aGUgbWFya3VwCiAgICAgZG9j
LT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLT5kaXNhYmxlKCk7
CiAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAg
IE5vZGUgKmNvbW1vbkFuY2VzdG9yQmxvY2sgPSAwOworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9y
QmxvY2sgPSAwOwogICAgIGlmIChjb21tb25BbmNlc3RvcikgewogICAgICAgICBjb21tb25BbmNl
c3RvckJsb2NrID0gZW5jbG9zaW5nQmxvY2soY29tbW9uQW5jZXN0b3IpOwogICAgICAgICBpZiAo
Y29tbW9uQW5jZXN0b3JCbG9jayAmJiBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKHRi
b2R5VGFnKSkgewpAQCAtMzgyLDcgKzM4MSw4IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IFJhbmcKICAgICAgICAgfQogICAgIH0KIAotICAgIERlcHJlY2F0ZWRTdHJpbmdM
aXN0IG1hcmt1cHM7CisgICAgVmVjdG9yPFN0cmluZz4gcHJlZml4ZXM7CisgICAgVmVjdG9yPFN0
cmluZz4gc3VmZml4ZXM7CiAgICAgTm9kZSAqcGFzdEVuZCA9IHJhbmdlLT5wYXN0RW5kTm9kZSgp
OwogICAgIE5vZGUgKmxhc3RDbG9zZWQgPSAwOwogICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3Jz
VG9DbG9zZTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1
cChjb25zdCBSYW5nCiAgICAgICAgICAgICByZXR1cm4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5n
OwogICAgICAgICB9CiAKLSAgICAgICAgbWFya3Vwcy5hcHBlbmQoaW50ZXJjaGFuZ2VOZXdsaW5l
U3RyaW5nKTsKKyAgICAgICAgc3VmZml4ZXMuYXBwZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmlu
Zyk7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IHZpc2libGVTdGFydC5uZXh0KCkuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCk7CiAgICAgfQogCkBAIC00MzYsNyArNDM2LDcgQEAgRGVwcmVjYXRlZFN0cmlu
ZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgICAgICAKICAgICAgICAgLy8gQWRkIHRoZSBu
b2RlIHRvIHRoZSBtYXJrdXAuCiAgICAgICAgIGlmIChhZGRNYXJrdXBGb3JOb2RlKSB7Ci0gICAg
ICAgICAgICBtYXJrdXBzLmFwcGVuZChzdGFydE1hcmt1cChuLCByYW5nZSwgYW5ub3RhdGUsIGRl
ZmF1bHRTdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5kKHN0YXJ0TWFy
a3VwKG4sIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7CiAgICAgICAgICAg
ICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChuKTsKICAgICAgICAg
fQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmcKICAgICAgICAgaWYgKG4tPmZpcnN0Q2hpbGQoKSA9PSAwIHx8IHNraXBEZXNjZW5kYW50
cykgewogICAgICAgICAgICAgLy8gTm9kZSBoYXMgbm8gY2hpbGRyZW4sIG9yIHdlIGFyZSBza2lw
cGluZyBpdCdzIGRlc2NlbmRhbnRzLCBhZGQgaXRzIGNsb3NlIHRhZyBub3cuCiAgICAgICAgICAg
ICBpZiAoYWRkTWFya3VwRm9yTm9kZSkgewotICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5k
KGVuZE1hcmt1cChuKSk7CisgICAgICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5kKGVuZE1hcmt1
cChuKSk7CiAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IG47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTQ1Nyw3ICs0NTcsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1h
cmt1cChjb25zdCBSYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBwYXN0
RW5kICYmIG5leHQtPmlzRGVzY2VuZGFudE9mKGFuY2VzdG9yKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhdCB0aGUg
ZW5kIG9mIHRoZSByYW5nZSwgY2xvc2UgYW5jZXN0b3JzIHVwIHRvIHNpYmxpbmcgb2YgbmV4dCBu
b2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKGFu
Y2VzdG9yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXhlcy5hcHBlbmQoZW5kTWFy
a3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gYW5j
ZXN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWFuY2VzdG9yc1RvQ2xvc2UuaXNF
bXB0eSgpKTsKQEAgLTQ3Myw4ICs0NzMsOCBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1
cChjb25zdCBSYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvciBiKSBhbmNlc3RvcnMgdGhhdCB3ZSBuZXZlciBlbmNv
dW50ZXJlZCBkdXJpbmcgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIHN0YXJ0aW5nIGF0IHN0YXJ0Tm9k
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGFydE5vZGUtPmlzRGVzY2VuZGFu
dE9mKHBhcmVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0
YXJ0TWFya3VwKHBhcmVudCwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChwYXJlbnQp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChzdGFydE1hcmt1cChw
YXJlbnQsIHJhbmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdWZmaXhlcy5hcHBlbmQoZW5kTWFya3VwKHBhcmVudCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVzLT5hcHBlbmQocGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDbG9z
ZWQgPSBwYXJlbnQ7CkBAIC01MTEsOCArNTExLDggQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChz
dGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkp
KTsKLSAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOworICAg
ICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5u
b3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgc3VmZml4ZXMuYXBwZW5k
KGVuZE1hcmt1cChhbmNlc3RvcikpOwogICAgICAgICAgICAgaWYgKG5vZGVzKSB7CiAgICAgICAg
ICAgICAgICAgbm9kZXMtPmFwcGVuZChhbmNlc3Rvcik7CiAgICAgICAgICAgICB9ICAgICAgICAK
QEAgLTUyMiwxNCArNTIyLDE0IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmcKICAgICB9CiAKICAgICBpZiAoYW5ub3RhdGUgJiYgbmVlZEludGVyY2hhbmdlTmV3bGlu
ZUFmdGVyKHZpc2libGVFbmQucHJldmlvdXMoKSkpCi0gICAgICAgIG1hcmt1cHMuYXBwZW5kKGlu
dGVyY2hhbmdlTmV3bGluZVN0cmluZyk7CisgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChpbnRlcmNo
YW5nZU5ld2xpbmVTdHJpbmcpOwogCiAgICAgLy8gUmV0YWluIHRoZSBNYWlsIHF1b3RlIGxldmVs
IGJ5IGluY2x1ZGluZyBhbGwgYW5jZXN0b3IgbWFpbCBibG9jayBxdW90ZXMuCiAgICAgaWYgKGFu
bm90YXRlKSB7CiAgICAgICAgIGZvciAoTm9kZSAqYW5jZXN0b3IgPSBjb21tb25BbmNlc3RvckJs
b2NrOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CiAgICAg
ICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShhbmNlc3RvcikpIHsKLSAgICAgICAgICAgICAg
ICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAoYW5jZXN0b3IsIHJhbmdlLCBhbm5vdGF0ZSwg
ZGVmYXVsdFN0eWxlLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5k
TWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKHN0YXJ0
TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgIHN1ZmZpeGVzLmFwcGVuZChlbmRNYXJrdXAoYW5jZXN0b3IpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU1MCwxOCArNTUwLDQwIEBAIERlcHJl
Y2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgaWYgKCFzdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFKSAmJiBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4ocm9vdCktPmhhc0F0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpCiAgICAg
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgInVy
bCgnIiArIHN0YXRpY19jYXN0PEVsZW1lbnQqPihyb290KS0+Z2V0QXR0cmlidXRlKGJhY2tncm91
bmRBdHRyKSArICInKSIpOwogICAgICAgICAKLSAgICAgICAgbWFya3Vwcy5wcmVwZW5kKCI8ZGl2
IHN0eWxlPSciICsgc3R5bGUtPmNzc1RleHQoKS5kZXByZWNhdGVkU3RyaW5nKCkgKyAiJz4iKTsK
LSAgICAgICAgbWFya3Vwcy5hcHBlbmQoIjwvZGl2PiIpOworICAgICAgICBwcmVmaXhlcy5hcHBl
bmQoIjxkaXYgc3R5bGU9JyIgKyBzdHlsZS0+Y3NzVGV4dCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSAr
ICInPiIpOworICAgICAgICBzdWZmaXhlcy5hcHBlbmQoIjwvZGl2PiIpOwogICAgIH0KICAgICAK
ICAgICAvLyBhZGQgaW4gdGhlICJkZWZhdWx0IHN0eWxlIiBmb3IgdGhpcyBtYXJrdXAKICAgICAv
LyBGSVhNRTogSGFuZGxlIGNhc2Ugd2hlcmUgdmFsdWUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBp
biBpdCwgbGlrZSAiCiAgICAgRGVwcmVjYXRlZFN0cmluZyBvcGVuVGFnID0gRGVwcmVjYXRlZFN0
cmluZygiPHNwYW4gY2xhc3M9XCIiKSArIEFwcGxlU3R5bGVTcGFuQ2xhc3MgKyAiXCIgc3R5bGU9
XCIiICsgZGVmYXVsdFN0eWxlLT5jc3NUZXh0KCkuZGVwcmVjYXRlZFN0cmluZygpICsgIlwiPiI7
Ci0gICAgbWFya3Vwcy5wcmVwZW5kKG9wZW5UYWcpOwotICAgIG1hcmt1cHMuYXBwZW5kKCI8L3Nw
YW4+Iik7CisgICAgcHJlZml4ZXMuYXBwZW5kKG9wZW5UYWcpOworICAgIHN1ZmZpeGVzLmFwcGVu
ZCgiPC9zcGFuPiIpOwogCiAgICAgZG9jLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9u
Q29udHJvbGxlcigpLT5lbmFibGUoKTsKLSAgICByZXR1cm4gbWFya3Vwcy5qb2luKCIiKTsKKyAg
ICB1bnNpZ25lZCBudW1QcmVmaXhlcyA9IHByZWZpeGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBu
dW1TdWZmaXhlcyA9IHN1ZmZpeGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVByZWZpeGVzOyArK2kpCisgICAg
ICAgIHRvdGFsTGVuZ3RoICs9IHByZWZpeGVzW2ldLmxlbmd0aCgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1TdWZmaXhlczsgKytpKQorICAgICAgICB0b3RhbExlbmd0aCArPSBz
dWZmaXhlc1tpXS5sZW5ndGgoKTsKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdCh0b3RhbExlbmd0
aCk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Q
cmVmaXhlczsgaSA+IDA7IC0taSkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHByZWZpeCA9IHBy
ZWZpeGVzW2kgLSAxXTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gcHJlZml4Lmxlbmd0aCgp
OworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSArIG9mZnNldCwgcHJlZml4LmNoYXJhY3Rl
cnMoKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG9mZnNldCArPSBsZW5ndGg7
CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdWZmaXhlczsgKytpKSB7
CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3VmZml4ID0gc3VmZml4ZXNbaV07CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgbWVtY3B5KHJlc3VsdC5k
YXRhKCkgKyBvZmZzZXQsIHN1ZmZpeC5jaGFyYWN0ZXJzKCksIGxlbmd0aCAqIHNpemVvZihVQ2hh
cikpOworICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoOworICAgIH0KKyAgICBBU1NFUlQob2Zmc2V0
ID09IHRvdGFsTGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwogfQog
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJh
c2VVUkwpCkBAIC01NzksNyArNjAxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbQogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKLURlcHJlY2F0
ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9ubHkgaW5j
bHVkZUNoaWxkcmVuLAorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBFQ2hp
bGRyZW5Pbmx5IGluY2x1ZGVDaGlsZHJlbiwKICAgICBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFu
bm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUpCiB7CiAgICAgQVNTRVJUKGFubm90YXRlID09
IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7IC8vIGFubm90YXRpb24gbm90IHlldCBpbXBs
ZW1lbnRlZCBmb3IgdGhpcyBjb2RlIHBhdGgKQEAgLTU5Myw0NyArNjE1LDQ5IEBAIERlcHJlY2F0
ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgdm9pZCBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhDb250YWluZXJOb2RlKiBwYXJh
Z3JhcGgsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKK3N0YXRpYyB2b2lkIGZpbGxD
b250YWluZXJGcm9tU3RyaW5nKENvbnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGludCBwYXJhZ3JhcGhTdGFydCwgaW50IHBhcmFncmFwaEVuZCkKIHsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBwYXJhZ3JhcGgtPmRvY3VtZW50KCk7CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkgeworICAgIGlmIChwYXJh
Z3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQpIHsKICAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRD
aGlsZChjcmVhdGVCbG9ja1BsYWNlaG9sZGVyRWxlbWVudChkb2N1bWVudCksIGVjKTsKICAgICAg
ICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzZXJ0
KHN0cmluZy5maW5kKCdcbicpID09IC0xKTsKKyAgICBBU1NFUlQoc3RyaW5nLmZpbmQoJ1xuJywg
cGFyYWdyYXBoU3RhcnQpID09IC0xIHx8IHN0cmluZy5maW5kKCdcbicsIHBhcmFncmFwaFN0YXJ0
KSA+PSBwYXJhZ3JhcGhFbmQpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgdGFiTGlzdCA9
IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnXHQnLCBzdHJpbmcsIHRydWUpOwotICAgIERl
cHJlY2F0ZWRTdHJpbmcgdGFiVGV4dCA9ICIiOworICAgIGludCBzdGFydCA9IHBhcmFncmFwaFN0
YXJ0OworICAgIFN0cmluZyB0YWJUZXh0ID0gIiI7CiAgICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0g
ICAgd2hpbGUgKCF0YWJMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHMgPSB0YWJMaXN0LmZpcnN0KCk7Ci0gICAgICAgIHRhYkxpc3QucG9wX2Zyb250KCk7CisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgaW50IG5leHRUYWIgPSBzdHJpbmcuZmluZCgnXHQnLCBzdGFy
dCk7CisgICAgICAgIGJvb2wgYXRQYXJhZ3JhcGhFbmQgPSBuZXh0VGFiID09IC0xIHx8IG5leHRU
YWIgPj0gcGFyYWdyYXBoRW5kOworICAgICAgICBpbnQgZW5kID0gYXRQYXJhZ3JhcGhFbmQgPyBw
YXJhZ3JhcGhFbmQgOiBuZXh0VGFiOwogCiAgICAgICAgIC8vIGFwcGVuZCB0aGUgbm9uLXRhYiB0
ZXh0dWFsIHBhcnQKLSAgICAgICAgaWYgKCFzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoc3Rh
cnQgIT0gZW5kKSB7CiAgICAgICAgICAgICBpZiAoIXRhYlRleHQuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZChjcmVhdGVUYWJTcGFuRWxlbWVudChk
b2N1bWVudCwgdGFiVGV4dCksIGVjKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7
CiAgICAgICAgICAgICAgICAgdGFiVGV4dCA9ICIiOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgUmVmUHRyPE5vZGU+IHRleHROb2RlID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKHN0cmlu
Z1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShzLCBmaXJzdCwgdGFiTGlzdC5pc0VtcHR5KCkpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiB0ZXh0Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVUZXh0
Tm9kZShzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2Uoc3RyaW5nLnN1YnN0cmluZyhzdGFy
dCwgZW5kIC0gc3RhcnQpLCBmaXJzdCwgYXRQYXJhZ3JhcGhFbmQpKTsKICAgICAgICAgICAgIHBh
cmFncmFwaC0+YXBwZW5kQ2hpbGQodGV4dE5vZGUucmVsZWFzZSgpLCBlYyk7CiAgICAgICAgICAg
ICBBU1NFUlQoZWMgPT0gMCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyB0aGVyZSBpcyBhIHRh
YiBhZnRlciBldmVyeSBlbnRyeSwgZXhjZXB0IHRoZSBsYXN0IGVudHJ5Ci0gICAgICAgIC8vIChp
ZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgYSB0YWIsIHRoZSBsaXN0IGdldHMgYW4gZXh0cmEgZW1w
dHkgZW50cnkpCi0gICAgICAgIGlmICghdGFiTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0
YWJUZXh0ICs9ICdcdCc7CisgICAgICAgIGlmICghYXRQYXJhZ3JhcGhFbmQpCisgICAgICAgICAg
ICB0YWJUZXh0LmFwcGVuZCgnXHQnKTsKICAgICAgICAgZWxzZSBpZiAoIXRhYlRleHQuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBwYXJhZ3JhcGgtPmFwcGVuZENoaWxkKGNyZWF0ZVRhYlNwYW5F
bGVtZW50KGRvY3VtZW50LCB0YWJUZXh0KSwgZWMpOwogICAgICAgICAgICAgQVNTRVJUKGVjID09
IDApOwogICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIGlmIChhdFBhcmFncmFwaEVuZCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdGFydCA9IGVuZCArIDE7CiAgICAgICAgIGZp
cnN0ID0gZmFsc2U7CiAgICAgfQogfQpAQCAtNjU2LDcgKzY4MCw3IEBAIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHN0
cmluZyA9IHRleHQuZGVwcmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyBzdHJpbmcgPSB0ZXh0
LmNvcHkoKTsKICAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICJcbiIpOwogICAgIHN0cmluZy5y
ZXBsYWNlKCdccicsICdcbicpOwogCkBAIC02NzgsMjggKzcwMiwzMiBAQCBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAKICAgICAvLyBBIHN0cmluZyB3aXRoIG5vIG5l
d2xpbmVzIGdldHMgYWRkZWQgaW5saW5lLCByYXRoZXIgdGhhbiBiZWluZyBwdXQgaW50byBhIHBh
cmFncmFwaC4KICAgICBpZiAoc3RyaW5nLmZpbmQoJ1xuJykgPT0gLTEpIHsKLSAgICAgICAgZmls
bENvbnRhaW5lckZyb21TdHJpbmcoZnJhZ21lbnQuZ2V0KCksIHN0cmluZyk7CisgICAgICAgIGZp
bGxDb250YWluZXJGcm9tU3RyaW5nKGZyYWdtZW50LmdldCgpLCBzdHJpbmcsIDAsIHN0cmluZy5s
ZW5ndGgoKSk7CiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCiAg
ICAgLy8gQnJlYWsgc3RyaW5nIGludG8gcGFyYWdyYXBocy4gRXh0cmEgbGluZSBicmVha3MgdHVy
biBpbnRvIGVtcHR5IHBhcmFncmFwaHMuCi0gICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbGlzdCA9
IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnXG4nLCBzdHJpbmcsIHRydWUpOyAvLyB0cnVl
IGdldHMgdXMgZW1wdHkgc3RyaW5ncyBpbiB0aGUgbGlzdAotICAgIHdoaWxlICghbGlzdC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gbGlzdC5maXJzdCgpOwotICAg
ICAgICBsaXN0LnBvcF9mcm9udCgpOworICAgIGludCBzdGFydCA9IDA7CisgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgaW50IG5leHRMaW5lQnJlYWsgPSBzdHJpbmcuZmluZCgnXG4nLCBzdGFydCk7
CisgICAgICAgIGludCBlbmQgPSBuZXh0TGluZUJyZWFrICE9IC0xID8gbmV4dExpbmVCcmVhayA6
IHN0cmluZy5sZW5ndGgoKTsKIAogICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudDsKLSAg
ICAgICAgaWYgKHMuaXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChz
dGFydCA9PSBlbmQgJiYgbmV4dExpbmVCcmVhayA9PSAtMSkgewogICAgICAgICAgICAgLy8gRm9y
IGxhc3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFuIGEgUC4KICAgICAgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJ
LCAiYnIiLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CiAgICAgICAgICAgICBl
bGVtZW50LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCBBcHBsZUludGVyY2hhbmdlTmV3bGluZSk7
ICAgICAgICAgICAgCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbGVtZW50ID0gY3Jl
YXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQpOwotICAgICAgICAgICAgZmlsbENv
bnRhaW5lckZyb21TdHJpbmcoZWxlbWVudC5nZXQoKSwgcyk7CisgICAgICAgICAgICBmaWxsQ29u
dGFpbmVyRnJvbVN0cmluZyhlbGVtZW50LmdldCgpLCBzdHJpbmcsIHN0YXJ0LCBlbmQpOwogICAg
ICAgICB9CiAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LnJlbGVhc2UoKSwg
ZWMpOwogICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CisKKyAgICAgICAgIGlmIChuZXh0TGluZUJy
ZWFrID09IC0xKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0YXJ0ID0gZW5kICsgMTsK
ICAgICB9CiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgJ
KHJldmlzaW9uIDE5Njg4KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw5ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCosIGNv
bnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwpOwogICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMoRG9jdW1lbnQqLCBj
b25zdCBWZWN0b3I8Tm9kZSo+Jik7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1
cChjb25zdCBSYW5nZSosCisgICAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSosCiAg
ICAgICAgIFZlY3RvcjxOb2RlKj4qID0gMCwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgPSBEb05v
dEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IE5vZGUqLCBFQ2hpbGRyZW5Pbmx5ID0gSW5jbHVkZU5vZGUsCisgICAgU3RyaW5n
IGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiwgRUNoaWxkcmVuT25seSA9IEluY2x1ZGVOb2RlLAog
ICAgICAgICBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gRG9O
b3RBbm5vdGF0ZUZvckludGVyY2hhbmdlKTsKIAogfQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDE5Njg4KQorKysgV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBAQCBz
dGF0aWMgaW5saW5lIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlCiB7CiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgbmV2ZXIgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUg
bmV4dCBtZXRob2QuCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBOU1N0cmluZyAq
bWFya3VwU3RyaW5nID0gY3JlYXRlTWFya3VwKFtub2RlIF9ub2RlXSwgSW5jbHVkZU5vZGUsIG5v
ZGVzID8gJm5vZGVMaXN0IDogMCkuZ2V0TlNTdHJpbmcoKTsKKyAgICBOU1N0cmluZyAqbWFya3Vw
U3RyaW5nID0gY3JlYXRlTWFya3VwKFtub2RlIF9ub2RlXSwgSW5jbHVkZU5vZGUsIG5vZGVzID8g
Jm5vZGVMaXN0IDogMCk7CiAgICAgaWYgKG5vZGVzKQogICAgICAgICAqbm9kZXMgPSBbc2VsZiBu
b2Rlc0Zyb21MaXN0OiZub2RlTGlzdF07CiAKQEAgLTM1MSw3ICszNTEsNyBAQCBzdGF0aWMgaW5s
aW5lIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YWx3YXlzICJmb3IgaW50ZXJjaGFuZ2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIHByZXZpb3Vz
IG1ldGhvZC4KICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIE5TU3RyaW5nICptYXJr
dXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW3JhbmdlIF9yYW5nZV0sIG5vZGVzID8gJm5vZGVMaXN0
IDogMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSkuZ2V0TlNTdHJpbmcoKTsKKyAgICBOU1N0cmlu
ZyAqbWFya3VwU3RyaW5nID0gY3JlYXRlTWFya3VwKFtyYW5nZSBfcmFuZ2VdLCBub2RlcyA/ICZu
b2RlTGlzdCA6IDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwogICAgIGlmIChub2RlcykKICAg
ICAgICAgKm5vZGVzID0gW3NlbGYgbm9kZXNGcm9tTGlzdDombm9kZUxpc3RdOwogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcAkocmV2aXNpb24gMTk2ODgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1EZXByZWNhdGVkU3RyaW5nTGlzdCBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3Bs
aXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc2VwYXJhdG9yLCBjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZzLCBib29sIGFsbG93RW1wdHlFbnRyaWVzKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmdM
aXN0IHJlc3VsdDsKLQotICAgIGludCBzdGFydFBvcyA9IDA7Ci0gICAgaW50IGVuZFBvczsKLSAg
ICB3aGlsZSAoKGVuZFBvcyA9IHMuZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9zKSkgIT0gLTEpIHsK
LSAgICAgICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IGVuZFBvcykKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocy5taWQoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9z
KSk7Ci0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgc2VwYXJhdG9yLmxlbmd0aCgpOwotICAg
IH0KLSAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gKGludClzLmxlbmd0
aCgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHMubWlkKHN0YXJ0UG9zKSk7Ci0gICAgICAgICAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotIAotRGVwcmVjYXRlZFN0cmluZ0xpc3QgRGVwcmVj
YXRlZFN0cmluZ0xpc3Q6OnNwbGl0KGNvbnN0IERlcHJlY2F0ZWRDaGFyICZzZXBhcmF0b3IsIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpCi17Ci0gICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdChEZXByZWNhdGVkU3RyaW5nKHNlcGFy
YXRvciksIHMsIGFsbG93RW1wdHlFbnRyaWVzKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXBy
ZWNhdGVkU3RyaW5nTGlzdDo6am9pbihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzZXBhcmF0b3Ip
IGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7Ci0gICAgCi0gICAgZm9yIChD
b25zdEl0ZXJhdG9yIGkgPSBiZWdpbigpLCBqID0gKytiZWdpbigpOyBpICE9IGVuZCgpOyArK2ks
ICsraikgewotICAgICAgICByZXN1bHQgKz0gKmk7Ci0gICAgICAgIGlmIChqICE9IGVuZCgpKSB7
Ci0gICAgICAgICAgICByZXN1bHQgKz0gc2VwYXJhdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5n
TGlzdDo6cG9wX2Zyb250KCkKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGZyb250ID0gZmlyc3Qo
KTsKLSAgICByZW1vdmUoYmVnaW4oKSk7Ci0gICAgcmV0dXJuIGZyb250OwotfQotCi19CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmdMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nTGlzdC5oCShyZXZpc2lvbiAxOTY4OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZ0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERlcHJlY2F0
ZWRTdHJpbmdMaXN0X2gKLSNkZWZpbmUgRGVwcmVjYXRlZFN0cmluZ0xpc3RfaAotCi0jaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIK
LQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNBcnJheTsKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIERlcHJlY2F0ZWRTdHJpbmdMaXN0IDogcHVibGljIERlcHJlY2F0
ZWRWYWx1ZUxpc3Q8RGVwcmVjYXRlZFN0cmluZz4gewotcHVibGljOgotICAgIHN0YXRpYyBEZXBy
ZWNhdGVkU3RyaW5nTGlzdCBzcGxpdChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYsIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJiwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IGZhbHNlKTsKLSAgICBz
dGF0aWMgRGVwcmVjYXRlZFN0cmluZ0xpc3Qgc3BsaXQoY29uc3QgRGVwcmVjYXRlZENoYXIgJiwg
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gZmFsc2Up
OwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBqb2luKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJikg
Y29uc3Q7Ci0gICAgCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwb3BfZnJvbnQoKTsKLSAgICAKLSNp
ZmRlZiBfX09CSkNfXwotICAgIE5TQXJyYXkgKmdldE5TQXJyYXkoKSBjb25zdDsKLSNlbmRpZgot
fTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0RlcHJlY2F0ZWRT
dHJpbmdMaXN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0RlcHJl
Y2F0ZWRTdHJpbmdMaXN0TWFjLm1tCShyZXZpc2lvbiAxOTY4OCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL0RlcHJlY2F0ZWRTdHJpbmdMaXN0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbXBv
cnQgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTlNB
cnJheSAqRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OmdldE5TQXJyYXkoKSBjb25zdAotewotICAgIE5T
TXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yIChD
b25zdEl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
W2FycmF5IGFkZE9iamVjdDooKml0KS5nZXROU1N0cmluZygpXTsKLSAgICB9Ci0gICAgcmV0dXJu
IGFycmF5OwotfQotCi19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>