<?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>22564</bug_id>
          
          <creation_ts>2008-11-30 06:09:23 -0800</creation_ts>
          <short_desc>Make HTML elements&apos; constructors take a QualifiedName</short_desc>
          <delta_ts>2008-12-04 14:40:00 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>100768</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-30 06:09:23 -0800</bug_when>
    <thetext>This is a follow-up of bug22441. As requested on the previous bug, we will add the required assertions while doing the changes.

Patch following.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100769</commentid>
    <comment_count>1</comment_count>
      <attachid>25609</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-30 06:17:56 -0800</bug_when>
    <thetext>Created attachment 25609
Proposed changes - First try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100790</commentid>
    <comment_count>2</comment_count>
      <attachid>25609</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-30 14:23:52 -0800</bug_when>
    <thetext>Comment on attachment 25609
Proposed changes - First try

I find this pattern a bit strange:

     if (!MediaPlayer::isAvailable())
         return new HTMLElement(tagName, doc);
-    return new HTMLVideoElement(doc);
+    return new HTMLVideoElement(videoTag, doc);

As antti pointed out before, that will break any uses of if (element-&gt;hasTagName(videoTag) static_cast&lt;HTMLVideoElement*&gt;(element)...

Agreed, we should always be using something like element-&gt;isVideoElement() instead.

The patch looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100911</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-01 16:27:12 -0800</bug_when>
    <thetext>Landed patch in r38881.

(In reply to comment #2)
&gt; (From update of attachment 25609 [review])
&gt; I find this pattern a bit strange:
&gt; 
&gt;      if (!MediaPlayer::isAvailable())
&gt;          return new HTMLElement(tagName, doc);
&gt; -    return new HTMLVideoElement(doc);
&gt; +    return new HTMLVideoElement(videoTag, doc);
&gt; 
&gt; As antti pointed out before, that will break any uses of if
&gt; (element-&gt;hasTagName(videoTag) static_cast&lt;HTMLVideoElement*&gt;(element)...
&gt; 
&gt; Agreed, we should always be using something like element-&gt;isVideoElement()
&gt; instead.

This will also break &lt;source&gt; and &lt;audio&gt; which do not have a custom isXXXElement() method. I have filed bug22578 about that to keep this information easily available (especially since the broken pattern is used in WebCore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101085</commentid>
    <comment_count>4</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-02 14:57:08 -0800</bug_when>
    <thetext>Re-opening the bug as I have closed it a bit too fast (there is a more constructors to update).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101088</commentid>
    <comment_count>5</comment_count>
      <attachid>25609</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-02 14:58:46 -0800</bug_when>
    <thetext>Comment on attachment 25609
Proposed changes - First try

Marking the committed first version as obsolete so that it does not show on the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101090</commentid>
    <comment_count>6</comment_count>
      <attachid>25685</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-02 15:03:18 -0800</bug_when>
    <thetext>Created attachment 25685
2nd part: Update the remaining constructors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101097</commentid>
    <comment_count>7</comment_count>
      <attachid>25685</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-02 15:28:19 -0800</bug_when>
    <thetext>Comment on attachment 25685
2nd part: Update the remaining constructors

Might as well make this one line:
 static PassRefPtr&lt;HTMLElement&gt; objectConstructor(const QualifiedName&amp;, Document* doc, HTMLFormElement*, bool createdByParser)
 {
-    RefPtr&lt;HTMLObjectElement&gt; object = new HTMLObjectElement(doc, createdByParser);
+    RefPtr&lt;HTMLObjectElement&gt; object = new HTMLObjectElement(objectTag, doc, createdByParser);
     return object.release();
 }

otherwise looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101387</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-04 14:00:05 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 25685 [review])
&gt; Might as well make this one line:
&gt;  static PassRefPtr&lt;HTMLElement&gt; objectConstructor(const QualifiedName&amp;,
&gt; Document* doc, HTMLFormElement*, bool createdByParser)
&gt;  {
&gt; -    RefPtr&lt;HTMLObjectElement&gt; object = new HTMLObjectElement(doc,
&gt; createdByParser);
&gt; +    RefPtr&lt;HTMLObjectElement&gt; object = new HTMLObjectElement(objectTag, doc,
&gt; createdByParser);
&gt;      return object.release();
&gt;  }
&gt; 

Good catch! However I will need to sort out what to do with those createdByParser boolean before rolling out HTMLElementFactory (there is currently 2 syntax that should be merged somehow). I will keep this line as-is for now.

&gt; otherwise looks great!

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101398</commentid>
    <comment_count>9</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-04 14:40:00 -0800</bug_when>
    <thetext>Landed in r39007.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25609</attachid>
            <date>2008-11-30 06:17:56 -0800</date>
            <delta_ts>2008-12-02 14:58:46 -0800</delta_ts>
            <desc>Proposed changes - First try</desc>
            <filename>bug22564-V1.diff</filename>
            <type>text/plain</type>
            <size>14198</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODg1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDgtMTEtMzAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNTY0OiBNYWtlIEhUTUwgZWxlbWVudHMnIGNvbnN0cnVjdG9ycyB0YWtlIGEg
UXVhbGlmaWVkTmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI1NjQKKworICAgICAgICAtIE1vZGlmaWVkIHRoZSByZW1haW5pbmcgSFRNTCBlbGVt
ZW50cycgY29uc3RydWN0b3JzIHRvIHRha2UgYSBRdWFsaWZpZWROYW1lLgorCisgICAgICAgIC0g
QWRkZWQgYXNzZXJ0aW9uIHRoYXQgdGhlIFF1YWxpZmllZE5hbWUgZ2l2ZW4gY29ycmVzcG9uZHMg
dG8gdGhlIGVsZW1lbnQgY29uc3RydWN0ZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QXVkaW8pOgor
ICAgICAgICAqIGh0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxB
dWRpb0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxCUkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEJSRWxlbWVudDo6SFRNTEJSRWxlbWVudCk6CisgICAgICAgICogaHRt
bC9IVE1MQlJFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KToKKyAgICAgICAgKiBodG1s
L0hUTUxFbGVtZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpickNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFycXVlZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmF1ZGlvQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpzb3VyY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVl
ZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcnF1ZWVFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxRdW90
ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFF1b3RlRWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNvdXJjZUVsZW1lbnQ6OkhUTUxTb3VyY2VFbGVtZW50KToKKyAgICAgICAg
KiBodG1sL0hUTUxTb3VyY2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ6OkhUTUxWaWRlb0Vs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorCiAyMDA4LTExLTMwICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzg4NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0F1
ZGlvQ29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkhUTUxBdWRpb0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0hUTUxBdWRpb0VsZW1lbnQuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtNTMs
NyArNTQsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEF1ZGlvKEV4ZWNTdGF0CiB7CiAg
ICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IHRoaXMgbmVlZCB0aGUgY2FsbCB0b0pTIG9uIHRoZSBk
b2N1bWVudCBsaWtlIEpTSW1hZ2VDb25zdHJ1Y3Rvcj8KIAotICAgIFJlZlB0cjxIVE1MQXVkaW9F
bGVtZW50PiBhdWRpbyA9IG5ldyBIVE1MQXVkaW9FbGVtZW50KHN0YXRpY19jYXN0PEpTQXVkaW9D
b25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+ZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPEhUTUxB
dWRpb0VsZW1lbnQ+IGF1ZGlvID0gbmV3IEhUTUxBdWRpb0VsZW1lbnQoSFRNTE5hbWVzOjphdWRp
b1RhZywgc3RhdGljX2Nhc3Q8SlNBdWRpb0NvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5kb2N1
bWVudCgpKTsKICAgICBpZiAoYXJncy5zaXplKCkgPiAwKSB7CiAgICAgICAgIGF1ZGlvLT5zZXRT
cmMoYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpOwogICAgICAgICBhdWRpby0+c2No
ZWR1bGVMb2FkKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAz
ODg1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOSArMzQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1IVE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KERvY3Vt
ZW50KiBkb2MpCi0gICAgOiBIVE1MTWVkaWFFbGVtZW50KEhUTUxOYW1lczo6YXVkaW9UYWcsIGRv
YykKK0hUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxNZWRpYUVsZW1lbnQodGFnTmFt
ZSwgZG9jKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKGF1ZGlvVGFnKSk7CiB9CiAKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24gMzg4NTApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEF1ZGlvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxBdWRpb0VsZW1lbnQgOiBwdWJsaWMgSFRNTE1l
ZGlhRWxlbWVudAogewogcHVibGljOgotICAgIEhUTUxBdWRpb0VsZW1lbnQoRG9jdW1lbnQqKTsK
KyAgICBIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgIAogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQog
fTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQlJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEJSRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODUwKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxCUkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAog
LyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+
CkBAIC0zMiw4ICszMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLUhUTUxCUkVsZW1lbnQ6OkhUTUxCUkVsZW1lbnQoRG9jdW1lbnQgKmRv
YykgOiBIVE1MRWxlbWVudChiclRhZywgZG9jKQorSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogSFRN
TEVsZW1lbnQodGFnTmFtZSwgZG9jKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKGJyVGFnKSk7
CiB9CiAKIEhUTUxCUkVsZW1lbnQ6On5IVE1MQlJFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MQlJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCUkVsZW1l
bnQuaAkocmV2aXNpb24gMzg4NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJSRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1v
biBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KQEAgLTMzLDcgKzMxLDcgQEAgY2xhc3MgU3Ry
aW5nOwogY2xhc3MgSFRNTEJSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGlj
OgotICAgIEhUTUxCUkVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MQlJFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIH5IVE1MQlJFbGVtZW50KCk7CiAgICAg
CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlz
aW9uIDM4ODUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldElubmVyVGV4dChjb25z
dCBTdHIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKCEoYyA9PSAnXG4nICYmIGkgIT0gMCAmJiBwcmV2ID09ICdccicpKSB7Ci0gICAg
ICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG5ldyBIVE1MQlJFbGVtZW50KGRvY3Vt
ZW50KCkpLCBlYyk7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG5ldyBI
VE1MQlJFbGVtZW50KGJyVGFnLCBkb2N1bWVudCgpKSwgZWMpOwogICAgICAgICAgICAgICAgIGlm
IChlYykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDM4ODUwKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NiwxNyAr
Mzc2LDE3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiB0YWJsZVNlY3QKIAogc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGJyQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MQlJFbGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQlJFbGVtZW50
KGJyVGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gcXVvdGVD
b25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxRdW90ZUVsZW1lbnQoZG9jKTsK
KyAgICByZXR1cm4gbmV3IEhUTUxRdW90ZUVsZW1lbnQocVRhZywgZG9jKTsKIH0KIAogc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IG1hcnF1ZWVDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICBy
ZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudChkb2MpOworICAgIHJldHVybiBuZXcgSFRNTE1h
cnF1ZWVFbGVtZW50KG1hcnF1ZWVUYWcsIGRvYyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkBA
IC0zOTQsMjEgKzM5NCwyMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXVkaW9D
b25zCiB7CiAgICAgaWYgKCFNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIG5ldyBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpOwotICAgIHJldHVybiBuZXcgSFRNTEF1
ZGlvRWxlbWVudChkb2MpOworICAgIHJldHVybiBuZXcgSFRNTEF1ZGlvRWxlbWVudChhdWRpb1Rh
ZywgZG9jKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHZpZGVvQ29uc3Ry
dWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZv
cm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICBpZiAoIU1lZGlhUGxheWVyOjppc0F2YWlsYWJsZSgp
KQogICAgICAgICByZXR1cm4gbmV3IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYyk7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MVmlkZW9FbGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MVmlkZW9F
bGVtZW50KHZpZGVvVGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gc291cmNlQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICBpZiAoIU1lZGlhUGxheWVy
Ojppc0F2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gbmV3IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvYyk7Ci0gICAgcmV0dXJuIG5ldyBIVE1MU291cmNlRWxlbWVudChkb2MpOworICAgIHJldHVy
biBuZXcgSFRNTFNvdXJjZUVsZW1lbnQoc291cmNlVGFnLCBkb2MpOwogfQogI2VuZGlmCiAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg1MCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgpAQCAtMzcsMTAgKzM1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAgLy8gV2luSUUgdXNlcyA2MG1zIGFzIHRoZSBtaW5pbXVtIGRlbGF5IGJ5IGRlZmF1bHQu
CiBjb25zdCBpbnQgZGVmYXVsdE1pbmltdW1EZWxheSA9IDYwOwogCi1IVE1MTWFycXVlZUVsZW1l
bnQ6OkhUTUxNYXJxdWVlRWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQo
bWFycXVlZVRhZywgZG9jKQorSFRNTE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVlZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxF
bGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fbWluaW11bURlbGF5KGRlZmF1bHRNaW5pbXVt
RGVsYXkpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUobWFycXVlZVRhZykpOwogfQogCiBib29s
IEhUTUxNYXJxdWVlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE1hcnF1ZWVFbGVtZW50LmgJKHJldmlzaW9uIDM4ODUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMSw3ICsy
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50IDog
cHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MTWFycXVlZUVsZW1lbnQoRG9j
dW1lbnQqKTsKKyAgICBIVE1MTWFycXVlZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAgICAgCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MUXVvdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFF1b3Rl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoqCi0gKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CkBAIC0zMCw5ICsyOCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50KHFUYWcsIGRvYykKK0hUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhU
TUxFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShxVGFnKSk7
CiB9CiAKIFN0cmluZyBIVE1MUXVvdGVFbGVtZW50OjpjaXRlKCkgY29uc3QKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MUXVvdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxRdW90ZUVsZW1lbnQuaAkocmV2aXNpb24gMzg4NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFF1
b3RlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KQEAgLTMzLDcgKzMx
LDcgQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgSFRNTFF1b3RlRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAogewogcHVibGljOgotICAgIEhUTUxRdW90ZUVsZW1lbnQoRG9jdW1lbnQqKTsKKyAg
ICBIVE1MUXVvdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAg
IAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAxOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDM4ODUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MU291cmNlRWxlbWVudDo6SFRNTFNvdXJj
ZUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHNvdXJjZVRhZywgZG9j
KQorSFRNTFNvdXJjZUVsZW1lbnQ6OkhUTUxTb3VyY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2MpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoc291cmNlVGFnKSk7CiB9CiAKIEhUTUxTb3Vy
Y2VFbGVtZW50Ojp+SFRNTFNvdXJjZUVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxT
b3VyY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVt
ZW50LmgJKHJldmlzaW9uIDM4ODUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgS1VSTDsKIAogY2xhc3Mg
SFRNTFNvdXJjZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhU
TUxTb3VyY2VFbGVtZW50KERvY3VtZW50Kik7CisgICAgSFRNTFNvdXJjZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRNTFNvdXJjZUVsZW1l
bnQoKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9F
bGVtZW50LmNwcAkocmV2aXNpb24gMzg4NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxWaWRlb0VsZW1lbnQ6
OkhUTUxWaWRlb0VsZW1lbnQoRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxNZWRpYUVsZW1lbnQo
SFRNTE5hbWVzOjp2aWRlb1RhZywgZG9jKQorSFRNTFZpZGVvRWxlbWVudDo6SFRNTFZpZGVvRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDog
SFRNTE1lZGlhRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX3Nob3VsZFNob3dQb3N0ZXJJ
bWFnZShmYWxzZSkKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZSh2aWRlb1RhZykpOwogfQogICAg
IAogYm9vbCBIVE1MVmlkZW9FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBz
dHlsZSkgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgJKHJldmlzaW9uIDM4ODUwKQorKysg
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBIVE1MVmlkZW9FbGVtZW50IDog
cHVibGljIEhUTUxNZWRpYUVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MVmlkZW9FbGVtZW50
KERvY3VtZW50Kik7CisgICAgSFRNTFZpZGVvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKICAgICAKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSopOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNp
b24gMzg4NTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzMSw3ICszMzEsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjp1
cGRhdGVGcm9tRWxlbWVuCiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAg
ICAgICAgIG1faW5uZXJUZXh0LT5zZXRJbm5lclRleHQodmFsdWUsIGVjKTsKICAgICAgICAgICAg
IGlmICh2YWx1ZS5lbmRzV2l0aCgiXG4iKSB8fCB2YWx1ZS5lbmRzV2l0aCgiXHIiKSkKLSAgICAg
ICAgICAgICAgICBtX2lubmVyVGV4dC0+YXBwZW5kQ2hpbGQobmV3IEhUTUxCUkVsZW1lbnQoZG9j
dW1lbnQoKSksIGVjKTsKKyAgICAgICAgICAgICAgICBtX2lubmVyVGV4dC0+YXBwZW5kQ2hpbGQo
bmV3IEhUTUxCUkVsZW1lbnQoYnJUYWcsIGRvY3VtZW50KCkpLCBlYyk7CiAgICAgICAgICAgICBt
X2RpcnR5ID0gZmFsc2U7CiAgICAgICAgICAgICBtX3VzZXJFZGl0ZWQgPSBmYWxzZTsKICAgICAg
ICAgfQo=
</data>
<flag name="review"
          id="11931"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25685</attachid>
            <date>2008-12-02 15:03:18 -0800</date>
            <delta_ts>2008-12-02 15:28:19 -0800</delta_ts>
            <desc>2nd part: Update the remaining constructors</desc>
            <filename>bug22564-secondPart.diff</filename>
            <type>text/plain</type>
            <size>37407</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkxNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTggQEAKKzIwMDgtMTItMDIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNTY0OiBNYWtlIEhUTUwgZWxlbWVudHMnIGNvbnN0cnVjdG9ycyB0YWtlIGEg
UXVhbGlmaWVkTmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI1NjQKKworICAgICAgICBVcGRhdGVkIHRoZSByZW1haW5pbmcgY29uc3RydWN0b3Jz
LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN0cnVjdEltYWdlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0NhbnZhc0VsZW1lbnQpOgorICAg
ICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZUJ1dHRvbjo6RGVsZXRlQnV0dG9uKToKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxl
bWVudCk6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVu
dDo6SFRNTEFyZWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1MQmFzZUZvbnRFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpIVE1MQ2FudmFz
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhyQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyYWdyYXBoQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6YmFzZWZvbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmb250
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6YW5jaG9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6aW1hZ2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjptYXBD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjphcmVhQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FudmFzQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbGV0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWRDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpvYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJh
bUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRhYmxlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dGFi
bGVDYXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dGFibGVSb3dDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OkhUTUxFbWJlZEVsZW1lbnQpOgorICAgICAgICAqIGh0
bWwvSFRNTEVtYmVkRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvbnRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb250RWxlbWVudDo6SFRNTEZvbnRFbGVtZW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEhS
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSFJFbGVtZW50OjpIVE1MSFJFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxIUkVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6
SFRNTEltYWdlRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWFwRWxlbWVudDo6SFRNTE1hcEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudCk6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFncmFwaEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQ6OkhUTUxQ
YXJhZ3JhcGhFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TFBhcmFtRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyOjptYXBDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXI6OmhhbmRsZUlzaW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudDo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQpOgorICAgICAgICAqIGh0
bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxl
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVDYXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6Omluc2VydFJvdyk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQ6
OkhUTUxUYWJsZVJvd0VsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Omluc2VydFJvdyk6CisgICAgICAg
ICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5lKToKKyAgICAgICAgKiBsb2Fk
ZXIvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50RWxl
bWVudDo6SW1hZ2VEb2N1bWVudEVsZW1lbnQpOgorCiAyMDA4LTEyLTAyICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVnIDIyNTk2OiBTb21lIGVsZW1l
bnRzIGRvbid0IHJlcG9ydCBBWEJsb2NrUXVvdGVMZXZlbApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzg5MDUpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDYgKzIxLDcgQEAKICNpbmNsdWRlICJKU0ltYWdlQ29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUg
IkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJK
U05vZGUuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKQEAgLTYxLDcg
KzYyLDcgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJbWFnZShFeGVjU3RhdAogICAgIC8v
IHdpbGwgYmUgY2FsbGVkICh3aGljaCB3aWxsIGNhdXNlIHRoZSBpbWFnZSBlbGVtZW50IHRvIGJl
IG1hcmtlZCBpZiBuZWNlc3NhcnkpLgogICAgIHRvSlMoZXhlYywgZG9jdW1lbnQpOwogCi0gICAg
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoZG9j
dW1lbnQpOworICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1h
Z2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCk7CiAgICAgaWYgKHdpZHRoU2V0
KQogICAgICAgICBpbWFnZS0+c2V0V2lkdGgod2lkdGgpOwogICAgIGlmIChoZWlnaHRTZXQpCklu
ZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIwMSw3ICs0MjAxLDcgQEAgSFRNTENhbnZhc0VsZW1lbnQq
IERvY3VtZW50OjpnZXRDU1NDYW52YQogewogICAgIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4g
cmVzdWx0ID0gbV9jc3NDYW52YXNFbGVtZW50cy5nZXQobmFtZSkuZ2V0KCk7CiAgICAgaWYgKCFy
ZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0ID0gbmV3IEhUTUxDYW52YXNFbGVtZW50KHRoaXMpOwor
ICAgICAgICByZXN1bHQgPSBuZXcgSFRNTENhbnZhc0VsZW1lbnQoY2FudmFzVGFnLCB0aGlzKTsK
ICAgICAgICAgbV9jc3NDYW52YXNFbGVtZW50cy5zZXQobmFtZSwgcmVzdWx0KTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b24uY3BwCShy
ZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTIgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERlbGV0ZUJ1dHRvbjo6RGVsZXRlQnV0dG9u
KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IEhUTUxJbWFnZUVsZW1lbnQoZG9jdW1lbnQpCisg
ICAgOiBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCkKIHsKIH0K
IApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODkwNSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDkgKzM2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAotSFRNTEFwcGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KERvY3VtZW50KiBk
b2MpCi0gICAgOiBIVE1MUGx1Z0luRWxlbWVudChhcHBsZXRUYWcsIGRvYykKK0hUTUxBcHBsZXRF
bGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQorICAgIDogSFRNTFBsdWdJbkVsZW1lbnQodGFnTmFtZSwgZG9jKQogewor
ICAgIEFTU0VSVChoYXNUYWdOYW1lKGFwcGxldFRhZykpOwogfQogCiBIVE1MQXBwbGV0RWxlbWVu
dDo6fkhUTUxBcHBsZXRFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCShy
ZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEhUTUxJbWFnZUxvYWRlcjsKIGNsYXNz
IEhUTUxBcHBsZXRFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50CiB7CiBwdWJsaWM6
Ci0gICAgSFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MQXBwbGV0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB+SFRNTEFwcGxldEVsZW1l
bnQoKTsKIAogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsg
fQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4OTA1KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICsz
NSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUhUTUxBcmVhRWxlbWVudDo6SFRNTEFyZWFFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAg
OiBIVE1MQW5jaG9yRWxlbWVudChhcmVhVGFnLCBkb2MpCitIVE1MQXJlYUVsZW1lbnQ6OkhUTUxB
cmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
ICAgIDogSFRNTEFuY2hvckVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9jb29yZHMoMCkK
ICAgICAsIG1fY29vcmRzTGVuKDApCiAgICAgLCBtX2xhc3RTaXplKC0xLCAtMSkKICAgICAsIG1f
c2hhcGUoVW5rbm93bikKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShhcmVhVGFnKSk7CiB9CiAK
IEhUTUxBcmVhRWxlbWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5oCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBIaXRUZXN0UmVzdWx0Owog
CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgewogcHVi
bGljOgotICAgIEhUTUxBcmVhRWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxBcmVhRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB+SFRNTEFyZWFFbGVtZW50
KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
QmFzZUZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VG
b250RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4OTA1KQorKysgV2ViQ29yZS9odG1sL0hUTUxCYXNl
Rm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoqCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KQEAg
LTI5LDkgKzI3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotSFRNTEJhc2VGb250RWxlbWVudDo6SFRNTEJhc2VGb250RWxlbWVudChEb2N1
bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmFzZWZvbnRUYWcsIGRvYykKK0hUTUxCYXNl
Rm9udEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsK
KyAgICBBU1NFUlQoaGFzVGFnTmFtZShiYXNlZm9udFRhZykpOwogfQogCiBTdHJpbmcgSFRNTEJh
c2VGb250RWxlbWVudDo6Y29sb3IoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCYXNl
Rm9udEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxl
bWVudC5oCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCkBAIC0zMSw3ICsyOSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxCYXNlRm9udEVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MQmFzZUZvbnRFbGVtZW50KERvY3Vt
ZW50ICpkb2MpOworICAgIEhUTUxCYXNlRm9udEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiBkb2MpOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CiAgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4OTA1KQorKysgV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTQgKzU4LDE1IEBAIHN0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdEhlaWdodCA9IDE1MDsKIC8vIGluIGV4Y2hhbmdlIGZvciBhIHNt
YWxsZXIgbWF4aW11bSBjYW52YXMgc2l6ZS4KIGNvbnN0IGZsb2F0IEhUTUxDYW52YXNFbGVtZW50
OjpNYXhDYW52YXNBcmVhID0gMzI3NjggKiA4MTkyOyAvLyBNYXhpbXVtIGNhbnZhcyBhcmVhIGlu
IENTUyBwaXhlbHMKIAotSFRNTENhbnZhc0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50KERvY3Vt
ZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChjYW52YXNUYWcsIGRvYykKK0hUTUxDYW52YXNF
bGVtZW50OjpIVE1MQ2FudmFzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9z
aXplKGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodCkKICAgICAsIG1fb2JzZXJ2ZXIoMCkKICAg
ICAsIG1fb3JpZ2luQ2xlYW4odHJ1ZSkKICAgICAsIG1faWdub3JlUmVzZXQoZmFsc2UpCiAgICAg
LCBtX2NyZWF0ZWRJbWFnZUJ1ZmZlcihmYWxzZSkKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShj
YW52YXNUYWcpKTsKIH0KIAogSFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVudCgp
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gMzg5MDUpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBwdWJsaWM6CiAKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MQ2FudmFzRWxlbWVudChEb2N1bWVudCopOworICAgIEhU
TUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZp
cnR1YWwgfkhUTUxDYW52YXNFbGVtZW50KCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMzg5MDUp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYzLDEyICsyNjMsMTIgQEAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGhlYWRp
bmdDbwogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gaHJDb25zdHJ1Y3Rvcihjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkK
IHsKLSAgICByZXR1cm4gbmV3IEhUTUxIUkVsZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhU
TUxIUkVsZW1lbnQoaHJUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBwYXJhZ3JhcGhDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
IGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxQYXJh
Z3JhcGhFbGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MUGFyYWdyYXBoRWxlbWVudChw
VGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gcHJlQ29uc3Ry
dWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZv
cm1FbGVtZW50KiwgYm9vbCkKQEAgLTI3OCwxMiArMjc4LDEyIEBAIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBwcmVDb25zdHIKIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGJhc2Vmb250Q29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQmFzZUZvbnRF
bGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUZvbnRFbGVtZW50KGJhc2Vmb250
VGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZm9udENvbnN0
cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTEZvbnRFbGVtZW50KGRvYyk7CisgICAg
cmV0dXJuIG5ldyBIVE1MRm9udEVsZW1lbnQoZm9udFRhZywgZG9jKTsKIH0KIAogc3RhdGljIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IG1vZENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCkBAIC0yOTMs
NjUgKzI5Myw2NSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbW9kQ29uc3RyCiAK
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBhbmNob3JDb25zdHJ1Y3Rvcihjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsK
LSAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBI
VE1MQW5jaG9yRWxlbWVudChhVGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gaW1hZ2VDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
IGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRN
TEltYWdlRWxlbWVudChkb2MsIGZvcm0pOworICAgIHJldHVybiBuZXcgSFRNTEltYWdlRWxlbWVu
dChpbWdUYWcsIGRvYywgZm9ybSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBtYXBDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50KGRv
Yyk7CisgICAgcmV0dXJuIG5ldyBIVE1MTWFwRWxlbWVudChtYXBUYWcsIGRvYyk7CiB9CiAKIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBhcmVhQ29uc3RydWN0b3IoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAg
cmV0dXJuIG5ldyBIVE1MQXJlYUVsZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhUTUxBcmVh
RWxlbWVudChhcmVhVGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gY2FudmFzQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ2FudmFzRWxl
bWVudChkb2MpOworICAgIHJldHVybiBuZXcgSFRNTENhbnZhc0VsZW1lbnQoY2FudmFzVGFnLCBk
b2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXBwbGV0Q29uc3RydWN0
b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCos
IGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQXBwbGV0RWxlbWVudChkb2MpOworICAgIHJl
dHVybiBuZXcgSFRNTEFwcGxldEVsZW1lbnQoYXBwbGV0VGFnLCBkb2MpOwogfQogCiBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZW1iZWRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICByZXR1
cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVs
ZW1lbnQoZW1iZWRUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBvYmplY3RDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywg
SFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgUmVmUHRyPEhU
TUxPYmplY3RFbGVtZW50PiBvYmplY3QgPSBuZXcgSFRNTE9iamVjdEVsZW1lbnQoZG9jLCBjcmVh
dGVkQnlQYXJzZXIpOworICAgIFJlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gb2JqZWN0ID0gbmV3
IEhUTUxPYmplY3RFbGVtZW50KG9iamVjdFRhZywgZG9jLCBjcmVhdGVkQnlQYXJzZXIpOwogICAg
IHJldHVybiBvYmplY3QucmVsZWFzZSgpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gcGFyYW1Db25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRv
YywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxQYXJhbUVs
ZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhUTUxQYXJhbUVsZW1lbnQocGFyYW1UYWcsIGRv
Yyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBzY3JpcHRDb25zdHJ1Y3Rv
cihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50Kiwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBz
Y3JpcHQgPSBuZXcgSFRNTFNjcmlwdEVsZW1lbnQoZG9jKTsKKyAgICBSZWZQdHI8SFRNTFNjcmlw
dEVsZW1lbnQ+IHNjcmlwdCA9IG5ldyBIVE1MU2NyaXB0RWxlbWVudChzY3JpcHRUYWcsIGRvYyk7
CiAgICAgc2NyaXB0LT5zZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKTsKICAgICBy
ZXR1cm4gc2NyaXB0LnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IHRhYmxlQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MVGFibGVFbGVt
ZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVFbGVtZW50KHRhYmxlVGFnLCBkb2Mp
OwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gdGFibGVDYXB0aW9uQ29uc3Ry
dWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVu
dCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudChkb2Mp
OworICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoY2FwdGlvblRhZywgZG9j
KTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRhYmxlQ29sQ29uc3RydWN0
b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiwgYm9vbCkKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gdGFibGVDb2xDCiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiB0YWJs
ZVJvd0NvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1M
Rm9ybUVsZW1lbnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTFRhYmxlUm93RWxlbWVu
dChkb2MpOworICAgIHJldHVybiBuZXcgSFRNTFRhYmxlUm93RWxlbWVudCh0clRhZywgZG9jKTsK
IH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRhYmxlQ2VsbENvbnN0cnVjdG9y
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
ODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTAgKzQwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotSFRNTEVtYmVkRWxlbWVudDo6SFRNTEVtYmVkRWxlbWVudChEb2N1
bWVudCogZG9jKQotICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudChlbWJlZFRhZywgZG9jKQor
SFRNTEVtYmVkRWxlbWVudDo6SFRNTEVtYmVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdO
YW1lLCBkb2MpCiAgICAgLCBtX25lZWRXaWRnZXRVcGRhdGUoZmFsc2UpCiB7CisgICAgQVNTRVJU
KGhhc1RhZ05hbWUoZW1iZWRUYWcpKTsKIH0KIAogSFRNTEVtYmVkRWxlbWVudDo6fkhUTUxFbWJl
ZEVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCShyZXZpc2lvbiAzODkwNSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRW1iZWRFbGVtZW50
IDogcHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxFbWJl
ZEVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogICAgIH5IVE1MRW1iZWRFbGVtZW50KCk7CiAKICAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lv
biAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxGb250RWxlbWVudDo6SFRNTEZvbnRFbGVtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCkKLSAgICA6IEhUTUxFbGVtZW50KGZvbnRUYWcsIGRvY3VtZW50KQorSFRN
TEZvbnRFbGVtZW50OjpIVE1MRm9udEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9udFRhZykpOwogfQogCiAvLyBBbGxvd3Mg
bGVhZGluZyBzcGFjZXMuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5oCShyZXZpc2lvbiAzODkw
NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxGb250RWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTEZvbnRFbGVtZW50KERv
Y3VtZW50Kik7CisgICAgSFRNTEZvbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogICAgIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEhSRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzIEFw
cGxlIENvbXB1dGVyLCBJbmMuCkBAIC0zMiw5ICszMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxIUkVsZW1lbnQ6OkhUTUxIUkVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGhyVGFnLCBkb2MpCitIVE1M
SFJFbGVtZW50OjpIVE1MSFJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CisgICAgQVNT
RVJUKGhhc1RhZ05hbWUoaHJUYWcpKTsKIH0KIAogSFRNTEhSRWxlbWVudDo6fkhUTUxIUkVsZW1l
bnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5oCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MSFJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgot
ICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICoK
QEAgLTMwLDcgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MSFJFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MSFJFbGVtZW50KERv
Y3VtZW50Kik7CisgICAgSFRNTEhSRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKICAgICB+SFRNTEhSRWxlbWVudCgpOwogICAgIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMzg5MDUpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDI0ICszOCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLUhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoRG9jdW1lbnQqIGRv
YywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDogSFRNTEVsZW1lbnQoaW1nVGFnLCBkb2MpCi0g
ICAgLCBtX2ltYWdlTG9hZGVyKHRoaXMpCi0gICAgLCBpc21hcChmYWxzZSkKLSAgICAsIG1fZm9y
bShmKQotICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQotewot
ICAgIGlmIChmKQotICAgICAgICBmLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7Ci19Ci0KLUhU
TUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKK0hUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9pbWFn
ZUxvYWRlcih0aGlzKQogICAgICwgaXNtYXAoZmFsc2UpCi0gICAgLCBtX2Zvcm0oMCkKKyAgICAs
IG1fZm9ybShmb3JtKQogICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VP
dmVyKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKGltZ1RhZykpOworICAgIGlmIChmb3JtKQor
ICAgICAgICBmb3JtLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CiB9CiAKIEhUTUxJbWFnZUVs
ZW1lbnQ6On5IVE1MSW1hZ2VFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAko
cmV2aXNpb24gMzg5MDUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBAIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNz
IEhUTUxJbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogICAgIGZyaWVuZCBjbGFz
cyBIVE1MRm9ybUVsZW1lbnQ7CiBwdWJsaWM6Ci0gICAgSFRNTEltYWdlRWxlbWVudChEb2N1bWVu
dCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIEhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogICAgIH5IVE1M
SW1hZ2VFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMzg5MDUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1h
cEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxNYXBFbGVtZW50
OjpIVE1MTWFwRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQobWFwVGFn
LCBkb2MpCitIVE1MTWFwRWxlbWVudDo6SFRNTE1hcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRv
YykKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShtYXBUYWcpKTsKIH0KIAogSFRNTE1hcEVsZW1l
bnQ6On5IVE1MTWFwRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkocmV2aXNpb24g
Mzg5MDUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KQEAgLTM0LDcgKzMyLDcgQEAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKIAogY2xhc3MgSFRNTE1h
cEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxNYXBFbGVt
ZW50KERvY3VtZW50Kik7CisgICAgSFRNTE1hcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAgICAgfkhUTUxNYXBFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODkw
NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDEyICs0NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLUhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChEb2N1
bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikgCi0gICAgOiBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50KG9iamVjdFRhZywgZG9jKQorSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKSAKKyAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9j
KQogICAgICwgbV9kb2NOYW1lZEl0ZW0odHJ1ZSkKICAgICAsIG1fbmVlZFdpZGdldFVwZGF0ZSgh
Y3JlYXRlZEJ5UGFyc2VyKQogICAgICwgbV91c2VGYWxsYmFja0NvbnRlbnQoZmFsc2UpCiB7Cisg
ICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0VGFnKSk7CiB9CiAKIEhUTUxPYmplY3RFbGVtZW50
Ojp+SFRNTE9iamVjdEVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHJl
dmlzaW9uIDM4OTA1KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgS1VSTDsKIAogY2xhc3MgSFRNTE9iamVj
dEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkltYWdlRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAg
SFRNTE9iamVjdEVsZW1lbnQoRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisgICAg
SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpOwogICAgIH5IVE1MT2JqZWN0RWxlbWVudCgpOwogCiAgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MUGFyYWdyYXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4OTA1KQorKysgV2ViQ29yZS9odG1s
L0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAK
IC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3Ig
S0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCkBAIC0zMyw5ICsz
MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWVudChEb2N1bWVudCAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQocFRhZywgZG9jKQorSFRNTFBhcmFncmFwaEVsZW1lbnQ6
OkhUTUxQYXJhZ3JhcGhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CisgICAgQVNTRVJU
KGhhc1RhZ05hbWUocFRhZykpOwogfQogCiBib29sIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpjaGVj
a0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdy
YXBoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxl
bWVudC5oCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqCkBAIC0zMCw3ICsyOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50KERv
Y3VtZW50Kik7CisgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxQYXJhbUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1F
bGVtZW50LmNwcAkocmV2aXNpb24gMzg5MDUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFBhcmFtRWxlbWVudDo6
SFRNTFBhcmFtRWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQocGFyYW1U
YWcsIGRvYykKK0hUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05h
bWUsIGRvYykKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShwYXJhbVRhZykpOwogfQogCiBIVE1M
UGFyYW1FbGVtZW50Ojp+SFRNTFBhcmFtRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFBhcmFtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVt
ZW50LmgJKHJldmlzaW9uIDM4OTA1KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KQEAgLTMzLDcgKzMxLDcgQEAgY2xhc3MgSFRNTFBh
cmFtRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbQogewogICAgIGZyaWVuZCBjbGFzcyBIVE1MQXBw
bGV0RWxlbWVudDsKIHB1YmxpYzoKLSAgICBIVE1MUGFyYW1FbGVtZW50KERvY3VtZW50Kik7Cisg
ICAgSFRNTFBhcmFtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAg
ICB+SFRNTFBhcmFtRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDcgKzU5MSw3IEBAIGJvb2wgSFRNTFBhcnNl
cjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm8KICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBu
ZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGJvZHlUYWcsIGRvY3VtZW50KTsgCiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJv
cihUYWJsZVBhcnRSZXF1aXJlZEVycm9yLCAmbG9jYWxOYW1lLCAmdHJUYWcubG9jYWxOYW1lKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVSb3dFbGVtZW50KGRv
Y3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlUm93RWxl
bWVudCh0clRhZywgZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKQEAgLTgyNSw3ICs4MjUsNyBAQCBib29sIEhUTUxQ
YXJzZXI6OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvCiAKIGJvb2wgSFRNTFBhcnNlcjo6bWFwQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7Ci0gICAgbV9j
dXJyZW50TWFwRWxlbWVudCA9IG5ldyBIVE1MTWFwRWxlbWVudChkb2N1bWVudCk7CisgICAgbV9j
dXJyZW50TWFwRWxlbWVudCA9IG5ldyBIVE1MTWFwRWxlbWVudChtYXBUYWcsIGRvY3VtZW50KTsK
ICAgICByZXN1bHQgPSBtX2N1cnJlbnRNYXBFbGVtZW50OwogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTE1MjAsMTAgKzE1MjAsMTAgQEAgUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpoYW5k
bGVJc2luZAogICAgICAgICB0LT5hdHRycyA9IDA7CiAgICAgfQogCi0gICAgbi0+YWRkQ2hpbGQo
bmV3IEhUTUxIUkVsZW1lbnQoZG9jdW1lbnQpKTsKKyAgICBuLT5hZGRDaGlsZChuZXcgSFRNTEhS
RWxlbWVudChoclRhZywgZG9jdW1lbnQpKTsKICAgICBuLT5hZGRDaGlsZChuZXcgVGV4dChkb2N1
bWVudCwgdGV4dCkpOwogICAgIG4tPmFkZENoaWxkKGlzSW5kZXgucmVsZWFzZSgpKTsKLSAgICBu
LT5hZGRDaGlsZChuZXcgSFRNTEhSRWxlbWVudChkb2N1bWVudCkpOworICAgIG4tPmFkZENoaWxk
KG5ldyBIVE1MSFJFbGVtZW50KGhyVGFnLCBkb2N1bWVudCkpOwogCiAgICAgcmV0dXJuIG4ucmVs
ZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
ODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDEwICszMiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChE
b2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQoc2NyaXB0VGFnLCBkb2MpCitIVE1MU2Ny
aXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAs
IG1fZGF0YSh0aGlzLCB0aGlzKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKHNjcmlwdFRhZykp
OwogfQogCiBIVE1MU2NyaXB0RWxlbWVudDo6fkhUTUxTY3JpcHRFbGVtZW50KCkKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxTY3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBTY3JpcHRFbGVtZW50IHsKIHB1
YmxpYzoKLSAgICBIVE1MU2NyaXB0RWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxTY3JpcHRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIH5IVE1MU2NyaXB0
RWxlbWVudCgpOwogCiAgICAgdm9pZCBzZXRDcmVhdGVkQnlQYXJzZXIoYm9vbCk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4OTA1KQor
KysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDQgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBp
bXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4g
Sm9uZXMgKG1qb25lc0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlz
ICh3ZWlzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFz
dGlhbkBrZGUub3JnKQpAQCAtMzMsOSArMzEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6SFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxUYWJsZVBhcnRF
bGVtZW50KGNhcHRpb25UYWcsIGRvYykKK0hUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQorICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnQodGFnTmFtZSwgZG9jKQogeworICAgIEFT
U0VSVChoYXNUYWdOYW1lKGNhcHRpb25UYWcpKTsKIH0KIAogYm9vbCBIVE1MVGFibGVDYXB0aW9u
RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVD
YXB0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKQEAgLTM1LDcgKzMz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQg
OiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIAogICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODkwNSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQg
KzQxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChEb2N1bWVudCAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnQodGFibGVUYWcsIGRvYykKK0hUTUxUYWJsZUVsZW1lbnQ6OkhUTUxU
YWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykK
KyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fYm9yZGVyQXR0cihmYWxz
ZSkKICAgICAsIG1fYm9yZGVyQ29sb3JBdHRyKGZhbHNlKQogICAgICwgbV9mcmFtZUF0dHIoZmFs
c2UpCiAgICAgLCBtX3J1bGVzQXR0cihVbnNldFJ1bGVzKQogICAgICwgbV9wYWRkaW5nKDEpCiB7
CisgICAgQVNTRVJUKGhhc1RhZ05hbWUodGFibGVUYWcpKTsKIH0KIAogYm9vbCBIVE1MVGFibGVF
bGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKQEAgLTE1NSw3ICsxNTYsNyBA
QCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MVGFibGVFbGVtZW50CiB7CiAgICAgaWYgKEhU
TUxUYWJsZUNhcHRpb25FbGVtZW50KiBleGlzdGluZ0NhcHRpb24gPSBjYXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBleGlzdGluZ0NhcHRpb247Ci0gICAgUmVmUHRyPEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50PiBjYXB0aW9uID0gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KGRvY3VtZW50KCkp
OworICAgIFJlZlB0cjxIVE1MVGFibGVDYXB0aW9uRWxlbWVudD4gY2FwdGlvbiA9IG5ldyBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudChjYXB0aW9uVGFnLCBkb2N1bWVudCgpKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjOwogICAgIHNldENhcHRpb24oY2FwdGlvbiwgZWMpOwogICAgIHJldHVybiBjYXB0
aW9uLnJlbGVhc2UoKTsKQEAgLTIwOCwxNCArMjA5LDE0IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IEhUTUxUYWJsZUVsZW1lbnQKICAgICAgICAgcGFyZW50ID0gbGFzdEJvZHkoKTsKICAgICAg
ICAgaWYgKCFwYXJlbnQpIHsKICAgICAgICAgICAgIFJlZlB0cjxIVE1MVGFibGVTZWN0aW9uRWxl
bWVudD4gbmV3Qm9keSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCh0Ym9keVRhZywgZG9j
dW1lbnQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4gbmV3Um93
ID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQoZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBSZWZQ
dHI8SFRNTFRhYmxlUm93RWxlbWVudD4gbmV3Um93ID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQo
dHJUYWcsIGRvY3VtZW50KCkpOwogICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kQ2hpbGQobmV3
Um93LCBlYyk7CiAgICAgICAgICAgICBhcHBlbmRDaGlsZChuZXdCb2R5LnJlbGVhc2UoKSwgZWMp
OwogICAgICAgICAgICAgcmV0dXJuIG5ld1Jvdy5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4gbmV3Um93ID0gbmV3IEhUTUxUYWJs
ZVJvd0VsZW1lbnQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPEhUTUxUYWJsZVJvd0VsZW1lbnQ+
IG5ld1JvdyA9IG5ldyBIVE1MVGFibGVSb3dFbGVtZW50KHRyVGFnLCBkb2N1bWVudCgpKTsKICAg
ICBwYXJlbnQtPmluc2VydEJlZm9yZShuZXdSb3csIHJvdywgZWMpOwogICAgIHJldHVybiBuZXdS
b3cucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiAz
ODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ7CiAKIGNsYXNz
IEhUTUxUYWJsZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhU
TUxUYWJsZUVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MVGFibGVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDk7IH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4OTA1KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICsz
OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUhUTUxUYWJsZVJvd0VsZW1lbnQ6OkhUTUxUYWJsZVJvd0VsZW1lbnQoRG9jdW1lbnQqIGRv
YykKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50KHRyVGFnLCBkb2MpCitIVE1MVGFibGVSb3dF
bGVtZW50OjpIVE1MVGFibGVSb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudCh0YWdOYW1lLCBkb2Mp
CiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUodHJUYWcpKTsKIH0KIAogYm9vbCBIVE1MVGFibGVS
b3dFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd0VsZW1lbnQuaAkocmV2aXNpb24gMzg5MDUpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlUm93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTFRhYmxlUm93RWxlbWVudCA6IHB1YmxpYyBIVE1M
VGFibGVQYXJ0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlUm93RWxlbWVudChEb2N1
bWVudCopOworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQogICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVNlY3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBA
CiAvKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9y
IEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKQEAg
LTg2LDcgKzg0LDcgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlU2VjdGlvbgog
ICAgIGlmIChpbmRleCA8IC0xIHx8IGluZGV4ID4gbnVtUm93cykKICAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsgLy8gcGVyIHRoZSBET00KICAgICBlbHNlIHsKLSAgICAgICAgciA9IG5ldyBI
VE1MVGFibGVSb3dFbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICByID0gbmV3IEhUTUxUYWJs
ZVJvd0VsZW1lbnQodHJUYWcsIGRvY3VtZW50KCkpOwogICAgICAgICBpZiAobnVtUm93cyA9PSBp
bmRleCB8fCBpbmRleCA9PSAtMSkKICAgICAgICAgICAgIGFwcGVuZENoaWxkKHIsIGVjKTsKICAg
ICAgICAgZWxzZSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiAzODkwNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNl
RG9jdW1lbnQ6OmNyZWF0ZUNvbnRhCiAgICAgYm9keS0+YWRkQ2hpbGQoZGl2KTsKICAgICBkaXYt
PmF0dGFjaCgpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlID0gbmV3IEhUTUxUYWJsZUVs
ZW1lbnQodGhpcyk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlID0gbmV3IEhUTUxUYWJsZUVs
ZW1lbnQodGFibGVUYWcsIHRoaXMpOwogICAgIGJvZHktPmFkZENoaWxkKHRhYmxlKTsKICAgICB0
YWJsZS0+YXR0YWNoKCk7CiAgICAgbV90Ym9keSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCh0Ym9keVRhZywgdGhpcyk7CkBAIC0yMDQsNyArMjA0LDcgQEAgRWxlbWVudCogSFRNTFZpZXdT
b3VyY2VEb2N1bWVudDo6YWRkU3Bhbgogdm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRM
aW5lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKQogewogICAgIC8vIENyZWF0ZSBhIHRhYmxlIHJv
dy4KLSAgICBSZWZQdHI8RWxlbWVudD4gdHJvdyA9IG5ldyBIVE1MVGFibGVSb3dFbGVtZW50KHRo
aXMpOworICAgIFJlZlB0cjxFbGVtZW50PiB0cm93ID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQo
dHJUYWcsIHRoaXMpOwogICAgIG1fdGJvZHktPmFkZENoaWxkKHRyb3cpOwogICAgIHRyb3ctPmF0
dGFjaCgpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDM4
OTA1KQorKysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDcgKzc2LDEyIEBAIHByaXZhdGU6CiAKIGNsYXNzIEltYWdlRG9jdW1lbnRFbGVtZW50
IDogcHVibGljIEhUTUxJbWFnZUVsZW1lbnQgewogcHVibGljOgotICAgIEltYWdlRG9jdW1lbnRF
bGVtZW50KEltYWdlRG9jdW1lbnQqIGRvYykgOiBIVE1MSW1hZ2VFbGVtZW50KGRvYyksIG1faW1h
Z2VEb2N1bWVudChkb2MpIHsgfQorICAgIEltYWdlRG9jdW1lbnRFbGVtZW50KEltYWdlRG9jdW1l
bnQqIGRvYykKKyAgICAgICAgOiBIVE1MSW1hZ2VFbGVtZW50KGltZ1RhZywgZG9jKQorICAgICAg
ICAsIG1faW1hZ2VEb2N1bWVudChkb2MpCisgICAgeworICAgIH0KKwogICAgIHZpcnR1YWwgfklt
YWdlRG9jdW1lbnRFbGVtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCk7CiAK
</data>
<flag name="review"
          id="11990"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>