<?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>120340</bug_id>
          
          <creation_ts>2013-08-26 20:38:08 -0700</creation_ts>
          <short_desc>EditorInternalCommand should use Frame&amp; where possible</short_desc>
          <delta_ts>2013-08-26 21:08:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>921313</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-08-26 20:38:08 -0700</bug_when>
    <thetext>EditorInternalCommand should use Frame&amp; where possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921314</commentid>
    <comment_count>1</comment_count>
      <attachid>209712</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-08-26 20:39:58 -0700</bug_when>
    <thetext>Created attachment 209712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921321</commentid>
    <comment_count>2</comment_count>
      <attachid>209712</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-26 20:58:42 -0700</bug_when>
    <thetext>Comment on attachment 209712
Patch

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

&gt; Source/WebCore/editing/EditorCommand.cpp:100
&gt; -    return node-&gt;document()-&gt;frame();
&gt; +    return *node-&gt;document()-&gt;frame();

We should find a way to document why it&apos;s OK to dereference the Frame here, ideally through some compile-time mechanism.
Also, is &apos;frame != node-&gt;document()-&gt;frame()&apos; ever true?

&gt; Source/WebCore/editing/EditorCommand.cpp:1747
&gt; -        return m_command-&gt;state(m_frame.get(), triggeringEvent) == TrueTriState ? &quot;true&quot; : &quot;false&quot;;
&gt; -    return m_command-&gt;value(m_frame.get(), triggeringEvent);
&gt; +        return m_command-&gt;state(*m_frame, triggeringEvent) == TrueTriState ? &quot;true&quot; : &quot;false&quot;;
&gt; +    return m_command-&gt;value(*m_frame, triggeringEvent);

In cases like this, I think it&apos;s better to have a (possibly private) frame() getter that returns a reference, and using that instead of *m_frame.
It&apos;s not immediately obvious that *m_frame is safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921325</commentid>
    <comment_count>3</comment_count>
      <attachid>209712</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-26 21:04:12 -0700</bug_when>
    <thetext>Comment on attachment 209712
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921327</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-08-26 21:07:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 209712 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209712&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/EditorCommand.cpp:100
&gt; &gt; -    return node-&gt;document()-&gt;frame();
&gt; &gt; +    return *node-&gt;document()-&gt;frame();
&gt; 
&gt; We should find a way to document why it&apos;s OK to dereference the Frame here, ideally through some compile-time mechanism.
&gt; Also, is &apos;frame != node-&gt;document()-&gt;frame()&apos; ever true?

I was unable to convince myself that it is ok to dereference frame here, so I move this back to being a pointer.

&gt; 
&gt; &gt; Source/WebCore/editing/EditorCommand.cpp:1747
&gt; &gt; -        return m_command-&gt;state(m_frame.get(), triggeringEvent) == TrueTriState ? &quot;true&quot; : &quot;false&quot;;
&gt; &gt; -    return m_command-&gt;value(m_frame.get(), triggeringEvent);
&gt; &gt; +        return m_command-&gt;state(*m_frame, triggeringEvent) == TrueTriState ? &quot;true&quot; : &quot;false&quot;;
&gt; &gt; +    return m_command-&gt;value(*m_frame, triggeringEvent);
&gt; 
&gt; In cases like this, I think it&apos;s better to have a (possibly private) frame() getter that returns a reference, and using that instead of *m_frame.
&gt; It&apos;s not immediately obvious that *m_frame is safe.

There is a null check for m_frame right before this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921328</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-08-26 21:08:07 -0700</bug_when>
    <thetext>Committed r154663: &lt;http://trac.webkit.org/changeset/154663&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209712</attachid>
            <date>2013-08-26 20:39:58 -0700</date>
            <delta_ts>2013-08-26 21:04:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120340-20130826203957.patch</filename>
            <type>text/plain</type>
            <size>87828</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDY2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEzLTA4LTI2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRWRpdG9ySW50ZXJuYWxDb21tYW5kIHNo
b3VsZCB1c2UgRnJhbWUmIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBPbmx5IGlzU3VwcG9ydGVkRnJvbURPTSBzdGlsbCB0YWtl
cyBhIEZyYW1lKiwgYXMgaXQgc3RpbGwgaGFzIGNhbGxlcnMgdGhhdCBleHBlY3QgbnVsbCB0byB3
b3JrLgorCisgICAgICAgICogZG9tL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmNwcDoKKyAg
ICAgICAgKiBkb20vVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaDoKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisKIDIwMTMtMDgtMjYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXggYWZ0ZXIg
cjE1NDY1OC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyVHlwaW5nR2VzdHVyZUluZGlj
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1VzZXJUeXBpbmdHZXN0
dXJlSW5kaWNhdG9yLmNwcAkocmV2aXNpb24gMTU0NjUzKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTIg
KzUwLDEyIEBAIE5vZGUqIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yOjpmb2N1c2UKICAgICBy
ZXR1cm4gZm9jdXNlZE5vZGUoKS5nZXQoKTsKIH0KIAotVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0
b3I6OlVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yKEZyYW1lKiBmcmFtZSkKK1VzZXJUeXBpbmdH
ZXN0dXJlSW5kaWNhdG9yOjpVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvcihGcmFtZSYgZnJhbWUp
CiAgICAgOiBtX3ByZXZpb3VzUHJvY2Vzc2luZ1VzZXJUeXBpbmdHZXN0dXJlKHNfcHJvY2Vzc2lu
Z1VzZXJUeXBpbmdHZXN0dXJlKQogICAgICwgbV9wcmV2aW91c0ZvY3VzZWROb2RlKGZvY3VzZWRO
b2RlKCkpCiB7CiAgICAgc19wcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmUgPSB0cnVlOwotICAg
IGZvY3VzZWROb2RlKCkgPSBmcmFtZS0+ZG9jdW1lbnQoKSA/IGZyYW1lLT5kb2N1bWVudCgpLT5m
b2N1c2VkRWxlbWVudCgpIDogMDsKKyAgICBmb2N1c2VkTm9kZSgpID0gZnJhbWUuZG9jdW1lbnQo
KSA/IGZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkgOiAwOwogfQogCiBVc2VyVHlw
aW5nR2VzdHVyZUluZGljYXRvcjo6flVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvci5oCShy
ZXZpc2lvbiAxNTQ2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVXNlclR5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgcHJvY2Vzc2luZ1VzZXJUeXBpbmdHZXN0dXJlKCk7CiAgICAgc3RhdGljIE5v
ZGUqIGZvY3VzZWRFbGVtZW50QXRHZXN0dXJlU3RhcnQoKTsKIAotICAgIGV4cGxpY2l0IFVzZXJU
eXBpbmdHZXN0dXJlSW5kaWNhdG9yKEZyYW1lKik7CisgICAgZXhwbGljaXQgVXNlclR5cGluZ0dl
c3R1cmVJbmRpY2F0b3IoRnJhbWUmKTsKICAgICB+VXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3Io
KTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9u
IDE1NDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1MCw3ICsxNDUwLDcgQEAgdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlv
bihjb25zdCBTdAogdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4
dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1vZGUgPT0gQ29uZmly
bUNvbXBvc2l0aW9uIHx8IG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pOwotICAgIFVzZXJUeXBp
bmdHZXN0dXJlSW5kaWNhdG9yIHR5cGluZ0dlc3R1cmVJbmRpY2F0b3IoJm1fZnJhbWUpOworICAg
IFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIHR5cGluZ0dlc3R1cmVJbmRpY2F0b3IobV9mcmFt
ZSk7CiAKICAgICBzZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKIApA
QCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZwogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFVzZXJUeXBpbmdH
ZXN0dXJlSW5kaWNhdG9yIHR5cGluZ0dlc3R1cmVJbmRpY2F0b3IoJm1fZnJhbWUpOworICAgIFVz
ZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIHR5cGluZ0dlc3R1cmVJbmRpY2F0b3IobV9mcmFtZSk7
CiAKICAgICBzZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTQ2
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MCwxMSArNzAsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
Y2xhc3MgRWRpdG9ySW50ZXJuYWxDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBib29sICgqZXhlY3V0
ZSkoRnJhbWUqLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpOwor
ICAgIGJvb2wgKCpleGVjdXRlKShGcmFtZSYsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCAoKmlzU3VwcG9ydGVkRnJvbURPTSkoRnJhbWUqKTsK
LSAgICBib29sICgqaXNFbmFibGVkKShGcmFtZSosIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSk7Ci0gICAgVHJpU3RhdGUgKCpzdGF0ZSkoRnJhbWUqLCBFdmVudCopOwotICAgIFN0cmluZyAo
KnZhbHVlKShGcmFtZSosIEV2ZW50Kik7CisgICAgYm9vbCAoKmlzRW5hYmxlZCkoRnJhbWUmLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UpOworICAgIFRyaVN0YXRlICgqc3RhdGUpKEZyYW1l
JiwgRXZlbnQqKTsKKyAgICBTdHJpbmcgKCp2YWx1ZSkoRnJhbWUmLCBFdmVudCopOwogICAgIGJv
b2wgaXNUZXh0SW5zZXJ0aW9uOwogICAgIGJvb2wgYWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQ7
CiB9OwpAQCAtOTAsNDAgKzkwLDQwIEBAIHN0YXRpYyBjb25zdCBib29sIGRvTm90QWxsb3dFeGVj
dXRpb25XaGUKIC8vIFJlbGF0ZWQgdG8gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kLgogLy8g
Q2VydGFpbiBvcGVyYXRpb25zIGNvbnRpbnVlIHRvIHVzZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBz
ZWxlY3Rpb24gZXZlbiBpZiB0aGUgZXZlbnQgaGFuZGxlcgogLy8gYWxyZWFkeSBtb3ZlZCB0aGUg
c2VsZWN0aW9uIG91dHNpZGUgb2YgdGhlIHRleHQgY29udHJvbC4KLXN0YXRpYyBGcmFtZSogdGFy
Z2V0RnJhbWUoRnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQpCitzdGF0aWMgRnJhbWUmIHRhcmdl
dEZyYW1lKEZyYW1lJiBmcmFtZSwgRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghZXZlbnQpCiAg
ICAgICAgIHJldHVybiBmcmFtZTsKICAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50
b05vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmcmFtZTsKLSAgICByZXR1
cm4gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICByZXR1cm4gKm5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7CiB9CiAKLXN0YXRpYyBib29sIGFwcGx5Q29tbWFuZFRvRnJhbWUoRnJhbWUq
IGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlKQorc3RhdGljIGJvb2wgYXBwbHlDb21tYW5kVG9GcmFtZShG
cmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlv
biwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCiB7CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNh
bGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdv
b2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBDb21t
YW5kRnJvbU1lbnVPcktleUJpbmRpbmc6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5hcHBseVN0
eWxlVG9TZWxlY3Rpb24oc3R5bGUsIGFjdGlvbik7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFw
cGx5U3R5bGVUb1NlbGVjdGlvbihzdHlsZSwgYWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTToKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVz
ZXJJbnRlcmZhY2U6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlKTsK
KyAgICAgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmFtZSwgRWRp
dG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSkKK3N0YXRpYyBib29sIGV4
ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2Us
IEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlWYWx1ZSkKIHsKICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+
IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKICAgICByZXR1cm4gYXBwbHlD
b21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgpKTsKIH0KIAot
c3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5bGUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgQ1NTVmFsdWVJRCBwcm9wZXJ0eVZhbHVlKQorc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5
bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBh
Y3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVJRCBwcm9wZXJ0eVZhbHVl
KQogewogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3Bl
cnR5SUQsIHByb3BlcnR5VmFsdWUpOwpAQCAtMTMzLDkgKzEzMyw5IEBAIHN0YXRpYyBib29sIGV4
ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmEKIC8vIEZJWE1FOiBleGVjdXRlVG9nZ2xlU3R5bGVJ
bkxpc3QgZG9lcyBub3QgaGFuZGxlIGNvbXBsaWNhdGVkIGNhc2VzIHN1Y2ggYXMgPGI+PHU+aGVs
bG88L3U+d29ybGQ8L2I+IHByb3Blcmx5LgogLy8gICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCB1
c2UgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3R5
bGUgYnV0IHdlIGNhbm5vdCBmaXggdGhpcwogLy8gICAgICAgIHVudGlsIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgxOCBpcyByZXNvbHZlZC4KLXN0YXRpYyBib29s
IGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdChGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBD
U1NWYWx1ZSogdmFsdWUpCitzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoRnJh
bWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24s
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBSZWZQdHI8
RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVj
dGlvblN0YXJ0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAoIXNlbGVj
dGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC0xNTcsNDkgKzE1Nyw0OSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5
bGVJbkxpc3QoRnJhCiAgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJj
ZSwgYWN0aW9uLCBuZXdNdXRhYmxlU3R5bGUuZ2V0KCkpOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlVG9nZ2xlU3R5bGUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwg
RWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgY2hhciog
b2ZmVmFsdWUsIGNvbnN0IGNoYXIqIG9uVmFsdWUpCitzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xl
U3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlv
biBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgY2hhciogb2ZmVmFsdWUs
IGNvbnN0IGNoYXIqIG9uVmFsdWUpCiB7CiAgICAgLy8gU3R5bGUgaXMgY29uc2lkZXJlZCBwcmVz
ZW50IHdoZW4KICAgICAvLyBNYWM6IHByZXNlbnQgYXQgdGhlIGJlZ2lubmluZyBvZiBzZWxlY3Rp
b24KICAgICAvLyBvdGhlcjogcHJlc2VudCB0aHJvdWdob3V0IHRoZSBzZWxlY3Rpb24KIAogICAg
IGJvb2wgc3R5bGVJc1ByZXNlbnQ7Ci0gICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigp
LnNob3VsZFRvZ2dsZVN0eWxlQmFzZWRPblN0YXJ0T2ZTZWxlY3Rpb24oKSkKLSAgICAgICAgc3R5
bGVJc1ByZXNlbnQgPSBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShwcm9w
ZXJ0eUlELCBvblZhbHVlKTsKKyAgICBpZiAoZnJhbWUuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91
bGRUb2dnbGVTdHlsZUJhc2VkT25TdGFydE9mU2VsZWN0aW9uKCkpCisgICAgICAgIHN0eWxlSXNQ
cmVzZW50ID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShwcm9wZXJ0eUlE
LCBvblZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIHN0eWxlSXNQcmVzZW50ID0gZnJhbWUtPmVk
aXRvcigpLnNlbGVjdGlvbkhhc1N0eWxlKHByb3BlcnR5SUQsIG9uVmFsdWUpID09IFRydWVUcmlT
dGF0ZTsKKyAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3Rpb25I
YXNTdHlsZShwcm9wZXJ0eUlELCBvblZhbHVlKSA9PSBUcnVlVHJpU3RhdGU7CiAKICAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQs
IHN0eWxlSXNQcmVzZW50ID8gb2ZmVmFsdWUgOiBvblZhbHVlKTsKICAgICByZXR1cm4gYXBwbHlD
b21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLT5zdHlsZSgpKTsKIH0K
IAotc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUqIGZyYW1lLCBF
ZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQorc3RhdGljIGJvb2wg
ZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQogewogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldD4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpOwogICAgIC8v
IEZJWE1FOiBXZSBkb24ndCBjYWxsIHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0aGUgc291cmNlIGlz
IERPTTsgaXMgdGhlcmUgYSBnb29kIHJlYXNvbiBmb3IgdGhhdD8KICAgICBzd2l0Y2ggKHNvdXJj
ZSkgewogICAgIGNhc2UgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nOgotICAgICAgICBmcmFt
ZS0+ZWRpdG9yKCkuYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0eWxlLmdldCgpLCBh
Y3Rpb24pOworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxl
Y3Rpb24oc3R5bGUuZ2V0KCksIGFjdGlvbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNh
c2UgQ29tbWFuZEZyb21ET006CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJm
YWNlOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZS5n
ZXQoKSk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUu
Z2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0
RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50KQorc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCkKIHsKLSAgICBhcHBseUNvbW1hbmQo
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSwgZnJhZ21l
bnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZywgRWRpdEFjdGlvblVu
c3BlY2lmaWVkKSk7CisgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUoZnJhbWUuZG9jdW1lbnQoKSwgZnJhZ21lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpQcmV2ZW50TmVzdGluZywgRWRpdEFjdGlvblVuc3BlY2lmaWVkKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnROb2RlKEZyYW1lKiBmcmFtZSwgUGFz
c1JlZlB0cjxOb2RlPiBjb250ZW50KQorc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydE5vZGUoRnJh
bWUmIGZyYW1lLCBQYXNzUmVmUHRyPE5vZGU+IGNvbnRlbnQpCiB7Ci0gICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGZyYW1lLT5k
b2N1bWVudCgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1
bWVudEZyYWdtZW50OjpjcmVhdGUoZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGNvbnRlbnQsIGVjKTsKICAgICBp
ZiAoZWMpCkBAIC0yMDcsNDkgKzIwNyw0OSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0Tm9k
ZShGcmFtZSogZnJhCiAgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChmcmFtZSwgZnJh
Z21lbnQucmVsZWFzZSgpKTsKIH0KIAotc3RhdGljIGJvb2wgZXhwYW5kU2VsZWN0aW9uVG9HcmFu
dWxhcml0eShGcmFtZSogZnJhbWUsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3N0YXRp
YyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1lLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBzZWxlY3Rpb24u
ZXhwYW5kVXNpbmdHcmFudWxhcml0eShncmFudWxhcml0eSk7CiAgICAgUmVmUHRyPFJhbmdlPiBu
ZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghbmV3UmFu
Z2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmV3UmFuZ2UtPmNvbGxhcHNlZChJ
R05PUkVfRVhDRVBUSU9OKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxSYW5n
ZT4gb2xkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBmcmFtZS0+c2VsZWN0aW9uKCkuYWZm
aW5pdHkoKTsKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBm
YWxzZSkpCisgICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgRUFmZmluaXR5IGFmZmluaXR5ID0g
ZnJhbWUuc2VsZWN0aW9uKCkuYWZmaW5pdHkoKTsKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFJhbmdlLmdldCgpLCBuZXdSYW5n
ZS5nZXQoKSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0
eSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5n
ZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
VHJpU3RhdGUgc3RhdGVTdHlsZShGcmFtZSogZnJhbWUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgY2hhciogZGVzaXJlZFZhbHVlKQorc3RhdGljIFRyaVN0YXRlIHN0YXRlU3R5bGUo
RnJhbWUmIGZyYW1lLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIGRlc2ly
ZWRWYWx1ZSkKIHsKLSAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkVG9n
Z2xlU3R5bGVCYXNlZE9uU3RhcnRPZlNlbGVjdGlvbigpKQotICAgICAgICByZXR1cm4gZnJhbWUt
PmVkaXRvcigpLnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUocHJvcGVydHlJRCwgZGVzaXJlZFZhbHVl
KSA/IFRydWVUcmlTdGF0ZSA6IEZhbHNlVHJpU3RhdGU7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0
b3IoKS5zZWxlY3Rpb25IYXNTdHlsZShwcm9wZXJ0eUlELCBkZXNpcmVkVmFsdWUpOworICAgIGlm
IChmcmFtZS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFRvZ2dsZVN0eWxlQmFzZWRPblN0YXJ0
T2ZTZWxlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLmVkaXRvcigpLnNlbGVjdGlvblN0
YXJ0SGFzU3R5bGUocHJvcGVydHlJRCwgZGVzaXJlZFZhbHVlKSA/IFRydWVUcmlTdGF0ZSA6IEZh
bHNlVHJpU3RhdGU7CisgICAgcmV0dXJuIGZyYW1lLmVkaXRvcigpLnNlbGVjdGlvbkhhc1N0eWxl
KHByb3BlcnR5SUQsIGRlc2lyZWRWYWx1ZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdmFsdWVTdHls
ZShGcmFtZSogZnJhbWUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBTdHJpbmcg
dmFsdWVTdHlsZShGcmFtZSYgZnJhbWUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAg
ICAvLyBGSVhNRTogUmF0aGVyIHRoYW4gcmV0cmlldmluZyB0aGUgc3R5bGUgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwKICAgICAvLyB3ZSBzaG91bGQgcmV0cmlldmUgdGhl
IHN0eWxlIHByZXNlbnQgdGhyb3VnaG91dCB0aGUgc2VsZWN0aW9uIGZvciBub24tTWFjIHBsYXRm
b3Jtcy4KLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVy
dHlWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gZnJhbWUuZWRpdG9yKCkuc2VsZWN0aW9u
U3RhcnRDU1NQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogfQogCi1zdGF0aWMgVHJpU3RhdGUg
c3RhdGVUZXh0V3JpdGluZ0RpcmVjdGlvbihGcmFtZSogZnJhbWUsIFdyaXRpbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uKQorc3RhdGljIFRyaVN0YXRlIHN0YXRlVGV4dFdyaXRpbmdEaXJlY3Rpb24oRnJh
bWUmIGZyYW1lLCBXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBib29sIGhhc05l
c3RlZE9yTXVsdGlwbGVFbWJlZGRpbmdzOwotICAgIFdyaXRpbmdEaXJlY3Rpb24gc2VsZWN0aW9u
RGlyZWN0aW9uID0gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCksIGhhc05lc3RlZE9yTXVsdGlwbGVFbWJlZGRpbmdzKTsKKyAgICBXcml0aW5n
RGlyZWN0aW9uIHNlbGVjdGlvbkRpcmVjdGlvbiA9IEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlv
bkZvclNlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSwgaGFzTmVzdGVkT3JNdWx0aXBsZUVtYmVkZGlu
Z3MpOwogICAgIC8vIEZYSU1FOiBXZSBzaG91bGQgYmUgcmV0dXJuaW5nIE1peGVkVHJpU3RhdGUg
d2hlbiBzZWxlY3Rpb25EaXJlY3Rpb24gPT0gZGlyZWN0aW9uICYmIGhhc05lc3RlZE9yTXVsdGlw
bGVFbWJlZGRpbmdzCiAgICAgcmV0dXJuIChzZWxlY3Rpb25EaXJlY3Rpb24gPT0gZGlyZWN0aW9u
ICYmICFoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5ncykgPyBUcnVlVHJpU3RhdGUgOiBGYWxz
ZVRyaVN0YXRlOwogfQogCi1zdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShG
cmFtZSogZnJhbWUpCitzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFt
ZSYgZnJhbWUpCiB7Ci0gICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZy
YW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKCFmb2N1c2VkRWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGZvY3Vz
ZWRFbGVtZW50LT5yZW5kZXJlcigpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25l
ZCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEYKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCEo
c3R5bGUtPm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwgc3R5bGUtPm92ZXJmbG93WSgpID09IE9B
VVRPIHx8IGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIGludCBoZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHRvUmVuZGVyQm94KHJlbmRl
cmVyKS0+Y2xpZW50SGVpZ2h0KCksIGZyYW1lLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSk7Cisg
ICAgaW50IGhlaWdodCA9IHN0ZDo6bWluPGludD4odG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jbGll
bnRIZWlnaHQoKSwgZnJhbWUudmlldygpLT52aXNpYmxlSGVpZ2h0KCkpOwogICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obWF4KG1heDxpbnQ+KGhlaWdodCAqIFNjcm9sbGJhcjo6bWlu
RnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3Zlcmxh
cEJldHdlZW5QYWdlcygpKSwgMSkpOwogfQogCkBAIC0yNzQsMTUxICsyNzQsMTUxIEBAIHN0YXRp
YyBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmcKIAogLy8gRXhlY3V0ZSBjb21tYW5k
IGZ1bmN0aW9ucwogCi1zdGF0aWMgYm9vbCBleGVjdXRlQmFja0NvbG9yKEZyYW1lKiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3N0YXRpYyBib29sIGV4ZWN1dGVCYWNrQ29sb3IoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIHJldHVy
biBleGVjdXRlQXBwbHlTdHlsZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uU2V0QmFja2dyb3Vu
ZENvbG9yLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgdmFsdWUpOwogfQogCi1zdGF0aWMg
Ym9vbCBleGVjdXRlQ29weShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVDb3B5KEZyYW1lJiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1l
LT5lZGl0b3IoKS5jb3B5KCk7CisgICAgZnJhbWUuZWRpdG9yKCkuY29weSgpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlQ3JlYXRlTGluayhGcmFtZSogZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRp
YyBib29sIGV4ZWN1dGVDcmVhdGVMaW5rKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZJWE1FOiBJZiB1c2Vy
SW50ZXJmYWNlIGlzIHRydWUsIHdlIHNob3VsZCBkaXNwbGF5IGEgZGlhbG9nIGJveCB0byBsZXQg
dGhlIHVzZXIgZW50ZXIgYSBVUkwuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRl
KGZyYW1lLT5kb2N1bWVudCgpLCB2YWx1ZSkpOworICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5r
Q29tbWFuZDo6Y3JlYXRlKGZyYW1lLmRvY3VtZW50KCksIHZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVDdXQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZUN1dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2Us
IGNvbnN0IFN0cmluZyYpCiB7CiAgICAgaWYgKHNvdXJjZSA9PSBDb21tYW5kRnJvbU1lbnVPcktl
eUJpbmRpbmcpIHsKICAgICAgICAgVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IgdHlwaW5nR2Vz
dHVyZUluZGljYXRvcihmcmFtZSk7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jdXQoKTsKKyAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuY3V0KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS5jdXQoKTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuY3V0KCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVEZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9y
KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorc3RhdGljIGJvb2wgZXhlY3V0ZURlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiZGl2IikpCi0gICAgICAg
IGZyYW1lLT5lZGl0b3IoKS5zZXREZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKEVkaXRvclBhcmFn
cmFwaFNlcGFyYXRvcklzRGl2KTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuc2V0RGVmYXVsdFBh
cmFncmFwaFNlcGFyYXRvcihFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc0Rpdik7CiAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJwIikpCi0gICAgICAgIGZyYW1lLT5lZGl0
b3IoKS5zZXREZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKEVkaXRvclBhcmFncmFwaFNlcGFyYXRv
cklzUCk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldERlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0
b3IoRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNQKTsKIAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVE
ZWxldGUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBj
b25zdCBTdHJpbmcmKQogewogICAgIHN3aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBDb21tYW5k
RnJvbU1lbnVPcktleUJpbmRpbmc6IHsKICAgICAgICAgLy8gRG9lc24ndCBtb2RpZnkgdGhlIHRl
eHQgaWYgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzbid0IGEgcmFuZ2UuCiAgICAgICAgIFVzZXJU
eXBpbmdHZXN0dXJlSW5kaWNhdG9yIHR5cGluZ0dlc3R1cmVJbmRpY2F0b3IoZnJhbWUpOwotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCkucGVyZm9ybURlbGV0ZSgpOworICAgICAgICBmcmFtZS5lZGl0
b3IoKS5wZXJmb3JtRGVsZXRlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBj
YXNlIENvbW1hbmRGcm9tRE9NOgogICAgIGNhc2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVy
ZmFjZToKICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIGEgY2FyZXQsIGRl
bGV0ZSB0aGUgcHJlY2VkaW5nIGNoYXJhY3Rlci4gSUUgcGVyZm9ybXMgZm9yd2FyZERlbGV0ZSwg
YnV0IHdlIGN1cnJlbnRseSBzaWRlIHdpdGggRmlyZWZveC4KICAgICAgICAgLy8gRG9lc24ndCBz
Y3JvbGwgdG8gbWFrZSB0aGUgc2VsZWN0aW9uIHZpc2libGUsIG9yIG1vZGlmeSB0aGUga2lsbCBy
aW5nICh0aGlzIHRpbWUsIHNpZGluZyB3aXRoIElFLCBub3QgRmlyZWZveCkuCi0gICAgICAgIFR5
cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZnJhbWUtPmRvY3VtZW50KCksIGZyYW1lLT5z
ZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSA/IFR5cGluZ0NvbW1h
bmQ6OlNtYXJ0RGVsZXRlIDogMCk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVBy
ZXNzZWQoZnJhbWUuZG9jdW1lbnQoKSwgZnJhbWUuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9
PSBXb3JkR3JhbnVsYXJpdHkgPyBUeXBpbmdDb21tYW5kOjpTbWFydERlbGV0ZSA6IDApOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlQmFja3dhcmQoRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitz
dGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlQmFja3dhcmQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPmVkaXRvcigp
LmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uQmFja3dhcmQsIENoYXJhY3RlckdyYW51bGFy
aXR5LCBmYWxzZSwgdHJ1ZSk7CisgICAgZnJhbWUuZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVjdGlv
bihEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGZhbHNlLCB0cnVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZUJhY2t3YXJk
QnlEZWNvbXBvc2luZ1ByZXZpb3VzQ2hhcmFjdGVyKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0
ZUJhY2t3YXJkQnlEZWNvbXBvc2luZ1ByZXZpb3VzQ2hhcmFjdGVyKEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewogICAgIExPR19FUlJP
UigiRGVsZXRlQmFja3dhcmRCeURlY29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIgaXMgbm90IGlt
cGxlbWVudGVkLCBkb2luZyBEZWxldGVCYWNrd2FyZCBpbnN0ZWFkIik7Ci0gICAgZnJhbWUtPmVk
aXRvcigpLmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uQmFja3dhcmQsIENoYXJhY3Rlckdy
YW51bGFyaXR5LCBmYWxzZSwgdHJ1ZSk7CisgICAgZnJhbWUuZWRpdG9yKCkuZGVsZXRlV2l0aERp
cmVjdGlvbihEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGZhbHNlLCB0
cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZUZv
cndhcmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlRm9yd2FyZChGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+
ZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSwgZmFsc2UsIHRydWUpOworICAgIGZyYW1lLmVkaXRvcigpLmRlbGV0ZVdpdGhE
aXJlY3Rpb24oRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGZhbHNlLCB0
cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRv
QmVnaW5uaW5nT2ZMaW5lKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvQmVnaW5uaW5nT2ZM
aW5lKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIGZyYW1lLT5lZGl0b3IoKS5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlv
bkJhY2t3YXJkLCBMaW5lQm91bmRhcnksIHRydWUsIGZhbHNlKTsKKyAgICBmcmFtZS5lZGl0b3Io
KS5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkJhY2t3YXJkLCBMaW5lQm91bmRhcnksIHRy
dWUsIGZhbHNlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZURl
bGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9C
ZWdpbm5pbmdPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlV2l0aERp
cmVjdGlvbihEaXJlY3Rpb25CYWNrd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUsIGZhbHNl
KTsKKyAgICBmcmFtZS5lZGl0b3IoKS5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkJhY2t3
YXJkLCBQYXJhZ3JhcGhCb3VuZGFyeSwgdHJ1ZSwgZmFsc2UpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9FbmRPZkxpbmUoRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBl
eGVjdXRlRGVsZXRlVG9FbmRPZkxpbmUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRGVzcGl0ZSBpdHMgbmFtZSwgdGhp
cyBjb21tYW5kIHNob3VsZCBkZWxldGUgdGhlIG5ld2xpbmUgYXQgdGhlIGVuZCBvZgogICAgIC8v
IGEgcGFyYWdyYXBoIGlmIHlvdSBhcmUgYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaCAobGlrZSBE
ZWxldGVUb0VuZE9mUGFyYWdyYXBoKS4KLSAgICBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlV2l0aERp
cmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lQm91bmRhcnksIHRydWUsIGZhbHNlKTsKKyAg
ICBmcmFtZS5lZGl0b3IoKS5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkZvcndhcmQsIExp
bmVCb3VuZGFyeSwgdHJ1ZSwgZmFsc2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
Ym9vbCBleGVjdXRlRGVsZXRlVG9FbmRPZlBhcmFncmFwaChGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVE
ZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIERlc3BpdGUgaXRzIG5hbWUsIHRoaXMg
Y29tbWFuZCBzaG91bGQgZGVsZXRlIHRoZSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YKICAgICAvLyBh
IHBhcmFncmFwaCBpZiB5b3UgYXJlIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguCi0gICAgZnJh
bWUtPmVkaXRvcigpLmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdy
YXBoQm91bmRhcnksIHRydWUsIGZhbHNlKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5kZWxldGVXaXRo
RGlyZWN0aW9uKERpcmVjdGlvbkZvcndhcmQsIFBhcmFncmFwaEJvdW5kYXJ5LCB0cnVlLCBmYWxz
ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01h
cmsoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5n
ZT4gbWFyayA9IGZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgIFJl
ZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAobWFyaykgewotICAgICAgICBib29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNl
bGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgZnJhbWUtPmVkaXRvcigpLnNl
bGVjdGVkUmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOworICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
bWFyay5nZXQoKSwgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdldCgpKS5nZXQoKSwg
RE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlm
ICghc2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1l
LT5lZGl0b3IoKS5wZXJmb3JtRGVsZXRlKCk7Ci0gICAgZnJhbWUtPmVkaXRvcigpLnNldE1hcmso
c2VsZWN0aW9uLnNlbGVjdGlvbigpKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVsZXRl
KCk7CisgICAgZnJhbWUuZWRpdG9yKCkuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlV29yZEJhY2t3
YXJkKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVdvcmRCYWNrd2FyZChGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFt
ZS0+ZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25CYWNrd2FyZCwgV29yZEdy
YW51bGFyaXR5LCB0cnVlLCBmYWxzZSk7CisgICAgZnJhbWUuZWRpdG9yKCkuZGVsZXRlV2l0aERp
cmVjdGlvbihEaXJlY3Rpb25CYWNrd2FyZCwgV29yZEdyYW51bGFyaXR5LCB0cnVlLCBmYWxzZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVXb3JkRm9y
d2FyZChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVXb3JkRm9yd2FyZChGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFt
ZS0+ZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3Jh
bnVsYXJpdHksIHRydWUsIGZhbHNlKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5kZWxldGVXaXRoRGly
ZWN0aW9uKERpcmVjdGlvbkZvcndhcmQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSwgZmFsc2UpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlRmluZFN0cmluZyhGcmFt
ZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3N0YXRpYyBib29sIGV4ZWN1dGVGaW5kU3RyaW5nKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBm
cmFtZS0+ZWRpdG9yKCkuZmluZFN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNl
KTsKKyAgICByZXR1cm4gZnJhbWUuZWRpdG9yKCkuZmluZFN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFs
c2UsIHRydWUsIGZhbHNlKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZUZvbnROYW1lKEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3N0YXRpYyBib29sIGV4ZWN1dGVGb250TmFtZShGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgcmV0dXJuIGV4ZWN1dGVBcHBseVN0eWxlKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25TZXRG
b250LCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHZhbHVlKTsKIH0KIAotc3RhdGljIGJvb2wgZXhl
Y3V0ZUZvbnRTaXplKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBib29sIGV4ZWN1dGVGb250U2l6ZShG
cmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CiAgICAgQ1NTVmFsdWVJRCBzaXplOwogICAgIGlmICghSFRNTEZvbnRF
bGVtZW50Ojpjc3NWYWx1ZUZyb21Gb250U2l6ZU51bWJlcih2YWx1ZSwgc2l6ZSkpCkBAIC00MjYs
MTcgKzQyNiwxNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9udFNpemUoRnJhbWUqIGZyYW1lCiAg
ICAgcmV0dXJuIGV4ZWN1dGVBcHBseVN0eWxlKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25DaGFu
Z2VBdHRyaWJ1dGVzLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCBzaXplKTsKIH0KIAotc3RhdGljIGJv
b2wgZXhlY3V0ZUZvbnRTaXplRGVsdGEoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIGJvb2wgZXhlY3V0
ZUZvbnRTaXplRGVsdGEoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ug
c291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIHJldHVybiBleGVjdXRlQXBwbHlT
dHlsZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcywgQ1NTUHJvcGVy
dHlXZWJraXRGb250U2l6ZURlbHRhLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVG
b3JlQ29sb3IoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIGJvb2wgZXhlY3V0ZUZvcmVDb2xvcihGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGV4ZWN1dGVBcHBseVN0eWxlKGZyYW1lLCBzb3VyY2Us
IEVkaXRBY3Rpb25TZXRDb2xvciwgQ1NTUHJvcGVydHlDb2xvciwgdmFsdWUpOwogfQogCi1zdGF0
aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgYm9vbCBleGVjdXRlRm9y
bWF0QmxvY2soRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgU3RyaW5nIHRhZ05hbWUgPSB2YWx1ZS5sb3dlcigpOwog
ICAgIGlmICh0YWdOYW1lWzBdID09ICc8JyAmJiB0YWdOYW1lW3RhZ05hbWUubGVuZ3RoKCkgLSAx
XSA9PSAnPicpCkBAIC00NDcsNzExICs0NDcsNzExIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVGb3Jt
YXRCbG9jayhGcmFtZSogZnIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFF1YWxpZmllZE5h
bWUgcXVhbGlmaWVkVGFnTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkp
OwogCi0gICAgUmVmUHRyPEZvcm1hdEJsb2NrQ29tbWFuZD4gY29tbWFuZCA9IEZvcm1hdEJsb2Nr
Q29tbWFuZDo6Y3JlYXRlKGZyYW1lLT5kb2N1bWVudCgpLCBxdWFsaWZpZWRUYWdOYW1lKTsKKyAg
ICBSZWZQdHI8Rm9ybWF0QmxvY2tDb21tYW5kPiBjb21tYW5kID0gRm9ybWF0QmxvY2tDb21tYW5k
OjpjcmVhdGUoZnJhbWUuZG9jdW1lbnQoKSwgcXVhbGlmaWVkVGFnTmFtZSk7CiAgICAgYXBwbHlD
b21tYW5kKGNvbW1hbmQpOwogICAgIHJldHVybiBjb21tYW5kLT5kaWRBcHBseSgpOwogfQogCi1z
dGF0aWMgYm9vbCBleGVjdXRlRm9yd2FyZERlbGV0ZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVj
dXRlRm9yd2FyZERlbGV0ZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBj
YXNlIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZzoKLSAgICAgICAgZnJhbWUtPmVkaXRvcigp
LmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVj
dGlvbihEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgZmFsc2UsIHRydWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NOgogICAgIGNh
c2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFjZToKICAgICAgICAgLy8gRG9lc24ndCBz
Y3JvbGwgdG8gbWFrZSB0aGUgc2VsZWN0aW9uIHZpc2libGUsIG9yIG1vZGlmeSB0aGUga2lsbCBy
aW5nLgogICAgICAgICAvLyBGb3J3YXJkRGVsZXRlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBJRSBv
ciBGaXJlZm94LCBzbyB0aGlzIGJlaGF2aW9yIGlzIG9ubHkgbmVlZGVkIGZvcgogICAgICAgICAv
LyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb3Vyc2VsdmVzLCBhbmQgZm9yIGNvbnNpc3Rl
bmN5IHdpdGggRGVsZXRlLgotICAgICAgICBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKGZyYW1lLmRvY3VtZW50KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlSWdub3JlU3BlbGxpbmcoRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVj
dXRlSWdub3JlU3BlbGxpbmcoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPmVkaXRvcigpLmlnbm9yZVNwZWxsaW5n
KCk7CisgICAgZnJhbWUuZWRpdG9yKCkuaWdub3JlU3BlbGxpbmcoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZUluZGVudChGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVJ
bmRlbnQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpjcmVhdGUo
ZnJhbWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnQpKTsKKyAgICBh
cHBseUNvbW1hbmQoSW5kZW50T3V0ZGVudENvbW1hbmQ6OmNyZWF0ZShmcmFtZS5kb2N1bWVudCgp
LCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6SW5kZW50KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRCYWNrdGFiKEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2
ZW50LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZUluc2VydEJhY2t0YWIoRnJhbWUmIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIHRhcmdldEZyYW1lKGZyYW1l
LCBldmVudCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KCJcdCIsIGV2ZW50
LCBUZXh0RXZlbnRJbnB1dEJhY2tUYWIpOworICAgIHJldHVybiB0YXJnZXRGcmFtZShmcmFtZSwg
ZXZlbnQpLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KCJcdCIsIGV2ZW50LCBU
ZXh0RXZlbnRJbnB1dEJhY2tUYWIpOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0SG9y
aXpvbnRhbFJ1bGUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0SG9yaXpvbnRhbFJ1
bGUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEhUTUxIUkVsZW1lbnQ+IHJ1bGUgPSBIVE1MSFJFbGVt
ZW50OjpjcmVhdGUoZnJhbWUtPmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxIVE1MSFJFbGVtZW50
PiBydWxlID0gSFRNTEhSRWxlbWVudDo6Y3JlYXRlKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBydWxlLT5zZXRJZEF0dHJpYnV0ZSh2YWx1ZSk7
CiAgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnROb2RlKGZyYW1lLCBydWxlLnJlbGVhc2UoKSk7CiB9
CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRIVE1MKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZUluc2VydEhUTUwoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVu
dChmcmFtZSwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCB2YWx1
ZSwgIiIpKTsKKyAgICByZXR1cm4gZXhlY3V0ZUluc2VydEZyYWdtZW50KGZyYW1lLCBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgdmFsdWUsICIiKSk7CiB9CiAKLXN0
YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRJbWFnZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBib29sIGV4ZWN1dGVJ
bnNlcnRJbWFnZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTogSWYgdXNlckludGVyZmFjZSBpcyB0
cnVlLCB3ZSBzaG91bGQgZGlzcGxheSBhIGRpYWxvZyBib3ggYW5kIGxldCB0aGUgdXNlciBjaG9v
c2UgYSBsb2NhbCBpbWFnZS4KLSAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBI
VE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUoZnJhbWUtPmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxI
VE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZShmcmFtZS5k
b2N1bWVudCgpKTsKICAgICBpbWFnZS0+c2V0U3JjKHZhbHVlKTsKICAgICByZXR1cm4gZXhlY3V0
ZUluc2VydE5vZGUoZnJhbWUsIGltYWdlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBib29sIGV4
ZWN1dGVJbnNlcnRMaW5lQnJlYWsoRnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNv
bW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZUlu
c2VydExpbmVCcmVhayhGcmFtZSYgZnJhbWUsIEV2ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNv
dXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAg
ICBjYXNlIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZzoKLSAgICAgICAgcmV0dXJuIHRhcmdl
dEZyYW1lKGZyYW1lLCBldmVudCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50
KCJcbiIsIGV2ZW50LCBUZXh0RXZlbnRJbnB1dExpbmVCcmVhayk7CisgICAgICAgIHJldHVybiB0
YXJnZXRGcmFtZShmcmFtZSwgZXZlbnQpLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2
ZW50KCJcbiIsIGV2ZW50LCBUZXh0RXZlbnRJbnB1dExpbmVCcmVhayk7CiAgICAgY2FzZSBDb21t
YW5kRnJvbURPTToKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2U6CiAg
ICAgICAgIC8vIERvZXNuJ3Qgc2Nyb2xsIHRvIG1ha2UgdGhlIHNlbGVjdGlvbiB2aXNpYmxlLCBv
ciBtb2RpZnkgdGhlIGtpbGwgcmluZy4KICAgICAgICAgLy8gSW5zZXJ0TGluZUJyZWFrIGlzIG5v
dCBpbXBsZW1lbnRlZCBpbiBJRSBvciBGaXJlZm94LCBzbyB0aGlzIGJlaGF2aW9yIGlzIG9ubHkg
bmVlZGVkIGZvcgogICAgICAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb3Vyc2Vs
dmVzLCBhbmQgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgY29tbWFuZHMuCi0gICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhmcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CisgICAg
ICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhmcmFtZS5kb2N1bWVudCgpLCAwKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydE5ld2xpbmUo
RnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0TmV3bGluZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBG
cmFtZSogdGFyZ2V0RnJhbWUgPSBXZWJDb3JlOjp0YXJnZXRGcmFtZShmcmFtZSwgZXZlbnQpOwot
ICAgIHJldHVybiB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZl
bnQoIlxuIiwgZXZlbnQsIHRhcmdldEZyYW1lLT5lZGl0b3IoKS5jYW5FZGl0UmljaGx5KCkgPyBU
ZXh0RXZlbnRJbnB1dEtleWJvYXJkIDogVGV4dEV2ZW50SW5wdXRMaW5lQnJlYWspOworICAgIEZy
YW1lJiB0YXJnZXRGcmFtZSA9IFdlYkNvcmU6OnRhcmdldEZyYW1lKGZyYW1lLCBldmVudCk7Cisg
ICAgcmV0dXJuIHRhcmdldEZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50
KCJcbiIsIGV2ZW50LCB0YXJnZXRGcmFtZS5lZGl0b3IoKS5jYW5FZGl0UmljaGx5KCkgPyBUZXh0
RXZlbnRJbnB1dEtleWJvYXJkIDogVGV4dEV2ZW50SW5wdXRMaW5lQnJlYWspOwogfQogCi1zdGF0
aWMgYm9vbCBleGVjdXRlSW5zZXJ0TmV3bGluZUluUXVvdGVkQ29udGVudChGcmFtZSogZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29s
IGV4ZWN1dGVJbnNlcnROZXdsaW5lSW5RdW90ZWRDb250ZW50KEZyYW1lJiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChmcmFtZS0+ZG9jdW1l
bnQoKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90
ZWRDb250ZW50KGZyYW1lLmRvY3VtZW50KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgYm9vbCBleGVjdXRlSW5zZXJ0T3JkZXJlZExpc3QoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlSW5z
ZXJ0T3JkZXJlZExpc3QoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXBwbHlDb21tYW5kKEluc2VydExpc3RDb21tYW5kOjpj
cmVhdGUoZnJhbWUtPmRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdCkp
OworICAgIGFwcGx5Q29tbWFuZChJbnNlcnRMaXN0Q29tbWFuZDo6Y3JlYXRlKGZyYW1lLmRvY3Vt
ZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0UGFyYWdyYXBoKEZyYW1lKiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wg
ZXhlY3V0ZUluc2VydFBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IoZnJhbWUtPmRvY3VtZW50KCksIDApOworICAgIFR5cGluZ0NvbW1hbmQ6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihmcmFtZS5kb2N1bWVudCgpLCAwKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydFRhYihGcmFtZSogZnJhbWUs
IEV2ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRp
YyBib29sIGV4ZWN1dGVJbnNlcnRUYWIoRnJhbWUmIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIHRhcmdldEZyYW1l
KGZyYW1lLCBldmVudCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KCJcdCIs
IGV2ZW50KTsKKyAgICByZXR1cm4gdGFyZ2V0RnJhbWUoZnJhbWUsIGV2ZW50KS5ldmVudEhhbmRs
ZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCgiXHQiLCBldmVudCk7CiB9CiAKLXN0YXRpYyBib29s
IGV4ZWN1dGVJbnNlcnRUZXh0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydFRleHQo
RnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChmcmFtZS0+ZG9jdW1lbnQo
KSwgdmFsdWUsIDApOworICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZnJhbWUuZG9jdW1l
bnQoKSwgdmFsdWUsIDApOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlSW5zZXJ0VW5vcmRlcmVkTGlzdChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRVbm9yZGVy
ZWRMaXN0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGFwcGx5Q29tbWFuZChJbnNlcnRMaXN0Q29tbWFuZDo6Y3JlYXRlKGZy
YW1lLT5kb2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6VW5vcmRlcmVkTGlzdCkpOworICAg
IGFwcGx5Q29tbWFuZChJbnNlcnRMaXN0Q29tbWFuZDo6Y3JlYXRlKGZyYW1lLmRvY3VtZW50KCks
IEluc2VydExpc3RDb21tYW5kOjpVbm9yZGVyZWRMaXN0KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVKdXN0aWZ5Q2VudGVyKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29s
IGV4ZWN1dGVKdXN0aWZ5Q2VudGVyKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gZXhlY3V0ZUFwcGx5
UGFyYWdyYXBoU3R5bGUoZnJhbWUsIHNvdXJjZSwgRWRpdEFjdGlvbkNlbnRlciwgQ1NTUHJvcGVy
dHlUZXh0QWxpZ24sICJjZW50ZXIiKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZUp1c3RpZnlG
dWxsKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29u
c3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVKdXN0aWZ5RnVsbChGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAg
ICAgcmV0dXJuIGV4ZWN1dGVBcHBseVBhcmFncmFwaFN0eWxlKGZyYW1lLCBzb3VyY2UsIEVkaXRB
Y3Rpb25KdXN0aWZ5LCBDU1NQcm9wZXJ0eVRleHRBbGlnbiwgImp1c3RpZnkiKTsKIH0KIAotc3Rh
dGljIGJvb2wgZXhlY3V0ZUp1c3RpZnlMZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVK
dXN0aWZ5TGVmdChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgcmV0dXJuIGV4ZWN1dGVBcHBseVBhcmFncmFwaFN0
eWxlKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25BbGlnbkxlZnQsIENTU1Byb3BlcnR5VGV4dEFs
aWduLCAibGVmdCIpOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlSnVzdGlmeVJpZ2h0KEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5n
JikKK3N0YXRpYyBib29sIGV4ZWN1dGVKdXN0aWZ5UmlnaHQoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQogewogICAgIHJldHVy
biBleGVjdXRlQXBwbHlQYXJhZ3JhcGhTdHlsZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uQWxp
Z25SaWdodCwgQ1NTUHJvcGVydHlUZXh0QWxpZ24sICJyaWdodCIpOwogfQogCi1zdGF0aWMgYm9v
bCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9v
bCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5
U2V0OjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSwgQ1NTVmFsdWVFbWJlZCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
RGlyZWN0aW9uLCBDU1NWYWx1ZUx0cik7Ci0gICAgZnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGUo
c3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAgICBmcmFtZS5l
ZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVj
dGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4
dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5
U2V0PiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFsdWVOb3JtYWwpOwot
ICAgIGZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0
V3JpdGluZ0RpcmVjdGlvbik7CisgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5n
ZXQoKSwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xl
ZnQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xl
ZnQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCiB7CiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFsdWVFbWJlZCk7CiAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7Ci0gICAgZnJhbWUtPmVkaXRv
cigpLmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9u
KTsKKyAgICBmcmFtZS5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9u
U2V0V3JpdGluZ0RpcmVjdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29s
IGV4ZWN1dGVNb3ZlQmFja3dhcmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQog
ewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIFVzZXJUcmln
Z2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgVXNl
clRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVN
b3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBD
aGFyYWN0ZXJHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNr
d2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZURvd24oRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVj
dXRlTW92ZURvd24oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVs
YXJpdHksIFVzZXJUcmlnZ2VyZWQpOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5l
R3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92
ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZURvd25BbmRN
b2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgTGluZUdyYW51bGFy
aXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIExpbmVHcmFudWxh
cml0eSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29s
IGV4ZWN1dGVNb3ZlRm9yd2FyZChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRm9yd2FyZChGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
LSAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2Vy
ZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5LCBVc2VyVHJp
Z2dlcmVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVG
b3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVGb3J3YXJk
QW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIENo
YXJhY3RlckdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVMZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVM
ZWZ0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHks
IFVzZXJUcmlnZ2VyZWQpOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25MZWZ0LCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlTGVm
dEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVNb3ZlTGVmdEFuZE1vZGlm
eVNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29u
c3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0LCBDaGFyYWN0ZXJHcmFudWxhcml0
eSwgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2Vs
ZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0LCBDaGFyYWN0ZXJHcmFudWxh
cml0eSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29s
IGV4ZWN1dGVNb3ZlUGFnZURvd24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBhZ2VEb3duKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQog
ewogICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gdmVydGljYWxTY3JvbGxEaXN0YW5jZShmcmFtZSk7
CiAgICAgaWYgKCFkaXN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBm
cmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
ZGlzdGFuY2UsIEZyYW1lU2VsZWN0aW9uOjpEaXJlY3Rpb25Eb3duLAorICAgIHJldHVybiBmcmFt
ZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBkaXN0
YW5jZSwgRnJhbWVTZWxlY3Rpb246OkRpcmVjdGlvbkRvd24sCiAgICAgICAgIFVzZXJUcmlnZ2Vy
ZWQsIEZyYW1lU2VsZWN0aW9uOjpBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKTsKIH0KIAotc3Rh
dGljIGJvb2wgZXhlY3V0ZU1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBi
b29sIGV4ZWN1dGVNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgdW5zaWdu
ZWQgZGlzdGFuY2UgPSB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKGZyYW1lKTsKICAgICBpZiAoIWRp
c3RhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rp
b24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIGRpc3RhbmNlLCBG
cmFtZVNlbGVjdGlvbjo6RGlyZWN0aW9uRG93biwKKyAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9u
KCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBkaXN0YW5jZSwgRnJh
bWVTZWxlY3Rpb246OkRpcmVjdGlvbkRvd24sCiAgICAgICAgIFVzZXJUcmlnZ2VyZWQsIEZyYW1l
U2VsZWN0aW9uOjpBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKTsKIH0KIAotc3RhdGljIGJvb2wg
ZXhlY3V0ZU1vdmVQYWdlVXAoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBhZ2VVcChGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICB1bnNpZ25lZCBkaXN0YW5jZSA9IHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoZnJhbWUpOwogICAg
IGlmICghZGlzdGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZnJhbWUt
PnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIGRpc3Rh
bmNlLCBGcmFtZVNlbGVjdGlvbjo6RGlyZWN0aW9uVXAsCisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIGRpc3RhbmNlLCBG
cmFtZVNlbGVjdGlvbjo6RGlyZWN0aW9uVXAsCiAgICAgICAgIFVzZXJUcmlnZ2VyZWQsIEZyYW1l
U2VsZWN0aW9uOjpBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKTsKIH0KIAotc3RhdGljIGJvb2wg
ZXhlY3V0ZU1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRl
TW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICB1bnNpZ25lZCBkaXN0YW5jZSA9
IHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoZnJhbWUpOwogICAgIGlmICghZGlzdGFuY2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgZGlzdGFuY2UsIEZyYW1lU2VsZWN0aW9u
OjpEaXJlY3Rpb25VcCwKKyAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBkaXN0YW5jZSwgRnJhbWVTZWxlY3Rpb246OkRp
cmVjdGlvblVwLAogICAgICAgICBVc2VyVHJpZ2dlcmVkLCBGcmFtZVNlbGVjdGlvbjo6QWxpZ25D
dXJzb3JPblNjcm9sbEFsd2F5cyk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUmlnaHQo
RnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYp
CitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVJpZ2h0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBmcmFtZS0+c2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
UmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICByZXR1cm4g
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uUmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKIH0K
IAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSog
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGly
ZWN0aW9uUmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBm
cmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQs
IERpcmVjdGlvblJpZ2h0LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdP
ZkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQo
RnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYp
CiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCBVc2VyVHJpZ2dl
cmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgRG9jdW1lbnRCb3VuZGFyeSwgVXNlclRyaWdn
ZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9C
ZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJh
bWUtPnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwg
RGlyZWN0aW9uQmFja3dhcmQsIERvY3VtZW50Qm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOworICAg
IGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVu
ZCwgRGlyZWN0aW9uQmFja3dhcmQsIERvY3VtZW50Qm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5n
T2ZMaW5lKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mTGluZShGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92
ZSwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uQmFja3dhcmQsIExpbmVCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmVB
bmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZM
aW5lQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnko
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBMaW5l
Qm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVC
b3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIGV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaChGcmFtZSogZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1
dGVNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCku
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uQmFja3dhcmQs
IFBhcmFncmFwaEJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2Fy
ZCwgUGFyYWdyYXBoQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2Rp
ZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGhBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBhcmFn
cmFwaEJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBQ
YXJhZ3JhcGhCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJv
b2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2UoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJh
Y2t3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25C
YWNrd2FyZCwgU2VudGVuY2VCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlQW5k
TW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mU2Vu
dGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFNl
bnRlbmNlQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1v
ZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQs
IFNlbnRlbmNlQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZEb2N1bWVudChGcmFtZSogZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlVG9FbmRPZkRvY3VtZW50KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBEb2N1
bWVudEJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBEb2N1
bWVudEJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGJvb2wgZXhlY3V0ZU1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24oRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitz
dGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbihG
cmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
IHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCBVc2VyVHJpZ2dl
cmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIERvY3VtZW50Qm91bmRhcnksIFVzZXJUcmln
Z2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRv
RW5kT2ZTZW50ZW5jZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZlNlbnRlbmNlKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQog
ewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVk
KTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVk
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0VuZE9m
U2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5k
T2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCku
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBTZW50ZW5jZUJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndh
cmQsIFNlbnRlbmNlQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZMaW5lKEZyYW1lKiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZU1vdmVUb0VuZE9mTGluZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgTGluZUJvdW5k
YXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lQm91bmRhcnks
IFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0
aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25G
b3J3YXJkLCBMaW5lQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlv
bigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9y
d2FyZCwgTGluZUJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lKiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wg
ZXhlY3V0ZU1vdmVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5t
b2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBQ
YXJhZ3JhcGhCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCku
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwg
UGFyYWdyYXBoQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxl
Y3Rpb24oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIFVz
ZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlv
bjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnks
IFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlTW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wg
ZXhlY3V0ZU1vdmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBm
cmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5k
LCBEaXJlY3Rpb25CYWNrd2FyZCwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQp
OworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCBVc2VyVHJp
Z2dlcmVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQ
YXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1v
dmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlv
bkZvcndhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERp
cmVjdGlvbkZvcndhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVVcChGcmFtZSogZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBi
b29sIGV4ZWN1dGVNb3ZlVXAoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgTGlu
ZUdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9u
KCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uQmFja3dh
cmQsIExpbmVHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiB9CiAKLXN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBMaW5lR3Jh
bnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVH
cmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlV29yZEJhY2t3YXJkKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVX
b3JkQmFja3dhcmQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHks
IFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHks
IFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1
dGVNb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlv
bkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0
aW9uQmFja3dhcmQsIFdvcmRHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlV29yZEZvcndhcmQoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMg
Ym9vbCBleGVjdXRlTW92ZVdvcmRGb3J3YXJkKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5t
b2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBX
b3JkR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1v
ZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIFdv
cmRHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBib29sIGV4ZWN1dGVNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0
aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBm
cmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRl
bmQsIERpcmVjdGlvbkZvcndhcmQsIFdvcmRHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7Cisg
ICAgZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0
ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRMZWZ0KEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQor
c3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkTGVmdChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9u
KCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwg
V29yZEdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5t
b2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25MZWZ0LCBXb3Jk
R3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJv
b2wgZXhlY3V0ZU1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJl
Y3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0
aW9uTGVmdCwgV29yZEdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkUmlnaHQoRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBl
eGVjdXRlTW92ZVdvcmRSaWdodChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uUmlnaHQsIFdvcmRHcmFudWxh
cml0eSwgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uUmlnaHQsIFdvcmRHcmFudWxhcml0
eSwgVXNlclRyaWdnZXJlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlv
bigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uUmln
aHQsIFdvcmRHcmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdo
dCwgV29yZEdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0xlZnRFbmRPZkxpbmUoRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBl
eGVjdXRlTW92ZVRvTGVmdEVuZE9mTGluZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9k
aWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgTGluZUJv
dW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25MZWZ0LCBMaW5lQm91bmRhcnks
IFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlTW92ZVRvTGVmdEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlVG9MZWZ0RW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERp
cmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rp
b25MZWZ0LCBMaW5lQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvUmlnaHRFbmRPZkxpbmUoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9v
bCBleGVjdXRlTW92ZVRvUmlnaHRFbmRPZkxpbmUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigp
Lm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvblJpZ2h0LCBM
aW5lQm91bmRhcnksIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvblJpZ2h0LCBMaW5lQm91
bmRhcnksIFVzZXJUcmlnZ2VyZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9v
bCBleGVjdXRlTW92ZVRvUmlnaHRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMg
Ym9vbCBleGVjdXRlTW92ZVRvUmlnaHRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUm
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4
dGVuZCwgRGlyZWN0aW9uUmlnaHQsIExpbmVCb3VuZGFyeSwgVXNlclRyaWdnZXJlZCk7CisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5k
LCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5LCBVc2VyVHJpZ2dlcmVkKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU91dGRlbnQoRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBl
eGVjdXRlT3V0ZGVudChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKIHsKLSAgICBhcHBseUNvbW1hbmQoSW5kZW50T3V0ZGVudENvbW1hbmQ6
OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6Ok91dGRlbnQp
KTsKKyAgICBhcHBseUNvbW1hbmQoSW5kZW50T3V0ZGVudENvbW1hbmQ6OmNyZWF0ZShmcmFtZS5k
b2N1bWVudCgpLCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6T3V0ZGVudCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlT3ZlcndyaXRlKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJv
b2wgZXhlY3V0ZVRvZ2dsZU92ZXJ3cml0ZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+ZWRpdG9yKCkudG9nZ2xl
T3ZlcndyaXRlTW9kZUVuYWJsZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS50b2dnbGVPdmVyd3Jp
dGVNb2RlRW5hYmxlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVj
dXRlUGFzdGUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNl
LCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZVBhc3RlKEZyYW1lJiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICBpZiAoc291cmNlID09IENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZykgewogICAgICAgICBV
c2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciB0eXBpbmdHZXN0dXJlSW5kaWNhdG9yKGZyYW1lKTsK
LSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnBhc3RlKCk7CisgICAgICAgIGZyYW1lLmVkaXRvcigp
LnBhc3RlKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5wYXN0ZSgpOwor
ICAgICAgICBmcmFtZS5lZGl0b3IoKS5wYXN0ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgYm9vbCBleGVjdXRlUGFzdGVHbG9iYWxTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJv
b2wgZXhlY3V0ZVBhc3RlR2xvYmFsU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBpZiAoIWZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+c3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKSkKKyAgICBpZiAo
IWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUX1VOVVNFRChzb3VyY2UsIHNvdXJjZSA9PSBD
b21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcpOwogICAgIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNh
dG9yIHR5cGluZ0dlc3R1cmVJbmRpY2F0b3IoZnJhbWUpOwogCiAgICAgYm9vbCBvbGRTZWxlY3Rp
b25Nb2RlID0gUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2Rl
KCk7CiAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+c2V0U2VsZWN0aW9uTW9k
ZSh0cnVlKTsKLSAgICBmcmFtZS0+ZWRpdG9yKCkucGFzdGUoKTsKKyAgICBmcmFtZS5lZGl0b3Io
KS5wYXN0ZSgpOwogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPnNldFNlbGVj
dGlvbk1vZGUob2xkU2VsZWN0aW9uTW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBib29sIGV4ZWN1dGVQYXN0ZUFuZE1hdGNoU3R5bGUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZVBhc3RlQW5kTWF0Y2hTdHlsZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgaWYgKHNvdXJjZSA9PSBDb21t
YW5kRnJvbU1lbnVPcktleUJpbmRpbmcpIHsKICAgICAgICAgVXNlclR5cGluZ0dlc3R1cmVJbmRp
Y2F0b3IgdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSk7Ci0gICAgICAgIGZyYW1lLT5lZGl0
b3IoKS5wYXN0ZUFzUGxhaW5UZXh0KCk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLnBhc3RlQXNQ
bGFpblRleHQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnBhc3RlQXNQ
bGFpblRleHQoKTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkucGFzdGVBc1BsYWluVGV4dCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlUGFzdGVBc1BsYWluVGV4
dChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0
IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlUGFzdGVBc1BsYWluVGV4dChGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7
CiAgICAgaWYgKHNvdXJjZSA9PSBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcpIHsKICAgICAg
ICAgVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IgdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFt
ZSk7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5wYXN0ZUFzUGxhaW5UZXh0KCk7CisgICAgICAg
IGZyYW1lLmVkaXRvcigpLnBhc3RlQXNQbGFpblRleHQoKTsKICAgICB9IGVsc2UKLSAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLnBhc3RlQXNQbGFpblRleHQoKTsKKyAgICAgICAgZnJhbWUuZWRpdG9y
KCkucGFzdGVBc1BsYWluVGV4dCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9v
bCBleGVjdXRlUHJpbnQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlUHJpbnQoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwYWdlLT5jaHJvbWUoKS5w
cmludChmcmFtZSk7CisgICAgcGFnZS0+Y2hyb21lKCkucHJpbnQoJmZyYW1lKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVJlZG8oRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVj
dXRlUmVkbyhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+ZWRpdG9yKCkucmVkbygpOworICAgIGZyYW1lLmVkaXRv
cigpLnJlZG8oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVJl
bW92ZUZvcm1hdChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29u
c3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVSZW1vdmVGb3JtYXQoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJh
bWUtPmVkaXRvcigpLnJlbW92ZUZvcm1hdHRpbmdBbmRTdHlsZSgpOworICAgIGZyYW1lLmVkaXRv
cigpLnJlbW92ZUZvcm1hdHRpbmdBbmRTdHlsZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgYm9vbCBleGVjdXRlU2Nyb2xsUGFnZUJhY2t3YXJkKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0
ZVNjcm9sbFBhZ2VCYWNrd2FyZChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigp
LmxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseShTY3JvbGxCbG9ja0RpcmVjdGlvbkJhY2t3YXJkLCBT
Y3JvbGxCeVBhZ2UpOworICAgIHJldHVybiBmcmFtZS5ldmVudEhhbmRsZXIoKS5sb2dpY2FsU2Ny
b2xsUmVjdXJzaXZlbHkoU2Nyb2xsQmxvY2tEaXJlY3Rpb25CYWNrd2FyZCwgU2Nyb2xsQnlQYWdl
KTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVNjcm9sbFBhZ2VGb3J3YXJkKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJv
b2wgZXhlY3V0ZVNjcm9sbFBhZ2VGb3J3YXJkKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbEJsb2NrRGlyZWN0aW9uRm9y
d2FyZCwgU2Nyb2xsQnlQYWdlKTsKKyAgICByZXR1cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkubG9n
aWNhbFNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbEJsb2NrRGlyZWN0aW9uRm9yd2FyZCwgU2Nyb2xs
QnlQYWdlKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVNjcm9sbExpbmVVcChGcmFtZSogZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBi
b29sIGV4ZWN1dGVTY3JvbGxMaW5lVXAoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5zY3JvbGxSZWN1cnNpdmVseShTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lKTsKKyAgICByZXR1
cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkuc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsVXAsIFNjcm9s
bEJ5TGluZSk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVTY3JvbGxMaW5lRG93bihGcmFtZSog
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRp
YyBib29sIGV4ZWN1dGVTY3JvbGxMaW5lRG93bihGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50
SGFuZGxlcigpLnNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSk7Cisg
ICAgcmV0dXJuIGZyYW1lLmV2ZW50SGFuZGxlcigpLnNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERv
d24sIFNjcm9sbEJ5TGluZSk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVTY3JvbGxUb0JlZ2lu
bmluZ09mRG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlU2Nyb2xsVG9CZWdpbm5pbmdPZkRv
Y3VtZW50KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubG9naWNhbFNjcm9s
bFJlY3Vyc2l2ZWx5KFNjcm9sbEJsb2NrRGlyZWN0aW9uQmFja3dhcmQsIFNjcm9sbEJ5RG9jdW1l
bnQpOworICAgIHJldHVybiBmcmFtZS5ldmVudEhhbmRsZXIoKS5sb2dpY2FsU2Nyb2xsUmVjdXJz
aXZlbHkoU2Nyb2xsQmxvY2tEaXJlY3Rpb25CYWNrd2FyZCwgU2Nyb2xsQnlEb2N1bWVudCk7CiB9
CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVTY3JvbGxUb0VuZE9mRG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9v
bCBleGVjdXRlU2Nyb2xsVG9FbmRPZkRvY3VtZW50KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCkubG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbEJsb2NrRGlyZWN0aW9u
Rm9yd2FyZCwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgcmV0dXJuIGZyYW1lLmV2ZW50SGFuZGxl
cigpLmxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseShTY3JvbGxCbG9ja0RpcmVjdGlvbkZvcndhcmQs
IFNjcm9sbEJ5RG9jdW1lbnQpOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0QWxsKEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQor
c3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdEFsbChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0QWxsKCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RMaW5lKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJv
b2wgZXhlY3V0ZVNlbGVjdExpbmUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgcmV0dXJuIGV4cGFuZFNlbGVjdGlvblRvR3Jh
bnVsYXJpdHkoZnJhbWUsIExpbmVHcmFudWxhcml0eSk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1
dGVTZWxlY3RQYXJhZ3JhcGgoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0UGFyYWdyYXBoKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQog
ewogICAgIHJldHVybiBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KGZyYW1lLCBQYXJhZ3Jh
cGhHcmFudWxhcml0eSk7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RTZW50ZW5jZShG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
K3N0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gZXhwYW5k
U2VsZWN0aW9uVG9HcmFudWxhcml0eShmcmFtZSwgU2VudGVuY2VHcmFudWxhcml0eSk7CiB9CiAK
LXN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlU2Vs
ZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLT5lZGl0b3IoKS5t
YXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9
IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBtYXJr
ID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CiAgICAg
aWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24pIHsKICAgICAgICAgc3lzdGVtQmVlcCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCksIHNlbGVjdGlvbi5nZXQoKSkuZ2V0KCks
IERPV05TVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgc2VsZWN0aW9uLmdldCgpKS5nZXQoKSwgRE9X
TlNUUkVBTSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1
dGVTZWxlY3RXb3JkKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBj
b25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFdvcmQoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgcmV0
dXJuIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoZnJhbWUsIFdvcmRHcmFudWxhcml0eSk7
CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVTZXRNYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZVNl
dE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPmVkaXRvcigpLnNldE1hcmsoZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5zZXRNYXJrKGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhl
Y3V0ZVN0cmlrZXRocm91Z2goRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZVN0cmlrZXRocm91
Z2goRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25z
dCBTdHJpbmcmKQogewogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZVRocm91Z2gg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUxpbmVUaHJvdWdo
KTsKICAgICByZXR1cm4gZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KGZyYW1lLCBzb3VyY2UsIEVk
aXRBY3Rpb25VbmRlcmxpbmUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QsIGxpbmVUaHJvdWdoLmdldCgpKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVN0eWxlV2l0
aENTUyhGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3N0YXRpYyBib29sIGV4ZWN1dGVTdHlsZVdpdGhDU1MoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgZnJhbWUtPmVkaXRvcigpLnNldFNob3VsZFN0eWxlV2l0aENTUyghZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWUsICJmYWxzZSIpKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5zZXRTaG91bGRTdHlsZVdp
dGhDU1MoIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiZmFsc2UiKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVVc2VDU1MoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgYm9vbCBl
eGVjdXRlVXNlQ1NTKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRTaG91bGRTdHls
ZVdpdGhDU1MoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJmYWxzZSIpKTsKKyAgICBmcmFtZS5l
ZGl0b3IoKS5zZXRTaG91bGRTdHlsZVdpdGhDU1MoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJm
YWxzZSIpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVN1YnNj
cmlwdChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNv
bnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlU3Vic2NyaXB0KEZyYW1lJiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICByZXR1cm4gZXhlY3V0ZVRvZ2dsZVN0eWxlKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25TdWJz
Y3JpcHQsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbiwgImJhc2VsaW5lIiwgInN1YiIpOwogfQog
Ci1zdGF0aWMgYm9vbCBleGVjdXRlU3VwZXJzY3JpcHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
IHNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gZXhlY3V0ZVRvZ2dsZVN0eWxl
KGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25TdXBlcnNjcmlwdCwgQ1NTUHJvcGVydHlWZXJ0aWNh
bEFsaWduLCAiYmFzZWxpbmUiLCAic3VwZXIiKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVN3
YXBXaXRoTWFyayhGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29u
c3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLT5lZGl0b3IoKS5tYXJrKCk7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS5lZGl0
b3IoKS5tYXJrKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsuaXNOb25lKCkgfHwgc2Vs
ZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1hcmsp
OwotICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRNYXJrKHNlbGVjdGlvbik7CisgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1hcmspOworICAgIGZyYW1lLmVkaXRvcigpLnNldE1hcmso
c2VsZWN0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLXN0
YXRpYyBib29sIGV4ZWN1dGVUYWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24oRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9v
bCBleGVjdXRlVGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5lZGl0
b3IoKS50YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24oKTsKKyAgICBmcmFtZS5lZGl0b3IoKS50
YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRp
ZgogCi1zdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlQm9sZChGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBl
eGVjdXRlVG9nZ2xlQm9sZChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgcmV0dXJuIGV4ZWN1dGVUb2dnbGVTdHls
ZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uQm9sZCwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAi
bm9ybWFsIiwgImJvbGQiKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZUl0YWxpYyhG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0
cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlSXRhbGljKEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBy
ZXR1cm4gZXhlY3V0ZVRvZ2dsZVN0eWxlKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25JdGFsaWNz
LCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIm5vcm1hbCIsICJpdGFsaWMiKTsKIH0KIAotc3RhdGlj
IGJvb2wgZXhlY3V0ZVRyYW5zcG9zZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVUcmFuc3Bvc2UoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7
Ci0gICAgZnJhbWUtPmVkaXRvcigpLnRyYW5zcG9zZSgpOworICAgIGZyYW1lLmVkaXRvcigpLnRy
YW5zcG9zZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlVW5k
ZXJsaW5lKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVVbmRlcmxpbmUoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQogewog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgIHJldHVybiBleGVj
dXRlVG9nZ2xlU3R5bGVJbkxpc3QoZnJhbWUsIHNvdXJjZSwgRWRpdEFjdGlvblVuZGVybGluZSwg
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdW5kZXJsaW5lLmdldCgp
KTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVVuZG8oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlVW5k
byhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+ZWRpdG9yKCkudW5kbygpOworICAgIGZyYW1lLmVkaXRvcigpLnVu
ZG8oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZVVubGluayhG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
K3N0YXRpYyBib29sIGV4ZWN1dGVVbmxpbmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXBwbHlDb21tYW5kKFVubGlua0Nv
bW1hbmQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIGFwcGx5Q29tbWFuZChVbmxp
bmtDb21tYW5kOjpjcmVhdGUoZnJhbWUuZG9jdW1lbnQoKSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBleGVjdXRlVW5zY3JpcHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhl
Y3V0ZVVuc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gZXhlY3V0ZUFwcGx5U3R5bGUoZnJh
bWUsIHNvdXJjZSwgRWRpdEFjdGlvblVuc2NyaXB0LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24s
ICJiYXNlbGluZSIpOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlVW5zZWxlY3QoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMg
Ym9vbCBleGVjdXRlVW5zZWxlY3QoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7
CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGJvb2wgZXhlY3V0ZVlhbmsoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlWWFuayhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGZyYW1l
LT5lZGl0b3IoKS5raWxsUmluZygpLnlhbmsoKSwgZmFsc2UsIDApOwotICAgIGZyYW1lLT5lZGl0
b3IoKS5raWxsUmluZygpLnNldFRvWWFua2VkU3RhdGUoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5p
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoZnJhbWUuZWRpdG9yKCkua2lsbFJpbmco
KS55YW5rKCksIGZhbHNlLCAwKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5raWxsUmluZygpLnNldFRv
WWFua2VkU3RhdGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0
ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9vbCBleGVjdXRlWWFua0FuZFNlbGVjdChGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGZyYW1l
LT5lZGl0b3IoKS5raWxsUmluZygpLnlhbmsoKSwgdHJ1ZSwgMCk7Ci0gICAgZnJhbWUtPmVkaXRv
cigpLmtpbGxSaW5nKCkuc2V0VG9ZYW5rZWRTdGF0ZSgpOworICAgIGZyYW1lLmVkaXRvcigpLmlu
c2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChmcmFtZS5lZGl0b3IoKS5raWxsUmluZygp
LnlhbmsoKSwgdHJ1ZSwgMCk7CisgICAgZnJhbWUuZWRpdG9yKCkua2lsbFJpbmcoKS5zZXRUb1lh
bmtlZFN0YXRlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExOTEsNjQgKzExOTEsNjQg
QEAgc3RhdGljIGJvb2wgc3VwcG9ydGVkUGFzdGUoRnJhbWUqIGZyYW1lKQogCiAvLyBFbmFibGVk
IGZ1bmN0aW9ucwogCi1zdGF0aWMgYm9vbCBlbmFibGVkKEZyYW1lKiwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlKQorc3RhdGljIGJvb2wgZW5hYmxlZChGcmFtZSYsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZW5h
YmxlZFZpc2libGVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNv
bW1hbmRTb3VyY2UpCitzdGF0aWMgYm9vbCBlbmFibGVkVmlzaWJsZVNlbGVjdGlvbihGcmFtZSYg
ZnJhbWUsIEV2ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKICAgICAvLyBUaGUg
dGVybSAidmlzaWJsZSIgaGVyZSBpbmNsdWRlcyBhIGNhcmV0IGluIGVkaXRhYmxlIHRleHQgb3Ig
YSByYW5nZSBpbiBhbnkgdGV4dC4KLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uRm9yQ29tbWFuZChldmVudCk7CisgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0aW9u
Rm9yQ29tbWFuZChldmVudCk7CiAgICAgcmV0dXJuIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIHNl
bGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpOwogfQog
Ci1zdGF0aWMgYm9vbCBjYXJldEJyb3dzaW5nRW5hYmxlZChGcmFtZSogZnJhbWUpCitzdGF0aWMg
Ym9vbCBjYXJldEJyb3dzaW5nRW5hYmxlZChGcmFtZSYgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIGZy
YW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgcmV0dXJuIGZyYW1l
LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKIH0KIAogc3RhdGljIEVkaXRvckNv
bW1hbmRTb3VyY2UgZHVtbXlFZGl0b3JDb21tYW5kU291cmNlID0gc3RhdGljX2Nhc3Q8RWRpdG9y
Q29tbWFuZFNvdXJjZT4oMCk7CiAKLXN0YXRpYyBib29sIGVuYWJsZWRWaXNpYmxlU2VsZWN0aW9u
T3JDYXJldEJyb3dzaW5nKEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb21tYW5k
U291cmNlKQorc3RhdGljIGJvb2wgZW5hYmxlZFZpc2libGVTZWxlY3Rpb25PckNhcmV0QnJvd3Np
bmcoRnJhbWUmIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7CiAg
ICAgLy8gVGhlIEVkaXRvckNvbW1hbmRTb3VyY2UgcGFyYW1ldGVyIGlzIHVudXNlZCBpbiBlbmFi
bGVkVmlzaWJsZVNlbGVjdGlvbiwgc28ganVzdCBwYXNzIGEgZHVtbXkgdmFyaWFibGUKICAgICBy
ZXR1cm4gY2FyZXRCcm93c2luZ0VuYWJsZWQoZnJhbWUpIHx8IGVuYWJsZWRWaXNpYmxlU2VsZWN0
aW9uKGZyYW1lLCBldmVudCwgZHVtbXlFZGl0b3JDb21tYW5kU291cmNlKTsKIH0KIAotc3RhdGlj
IGJvb2wgZW5hYmxlZFZpc2libGVTZWxlY3Rpb25BbmRNYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQq
IGV2ZW50LCBFZGl0b3JDb21tYW5kU291cmNlKQorc3RhdGljIGJvb2wgZW5hYmxlZFZpc2libGVT
ZWxlY3Rpb25BbmRNYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb21tYW5k
U291cmNlKQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1l
LT5lZGl0b3IoKS5zZWxlY3Rpb25Gb3JDb21tYW5kKGV2ZW50KTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3Rpb25Gb3JDb21tYW5k
KGV2ZW50KTsKICAgICByZXR1cm4gKChzZWxlY3Rpb24uaXNDYXJldCgpICYmIHNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICAmJiBm
cmFtZS0+ZWRpdG9yKCkubWFyaygpLmlzQ2FyZXRPclJhbmdlKCk7CisgICAgICAgICYmIGZyYW1l
LmVkaXRvcigpLm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOwogfQogCi1zdGF0aWMgYm9vbCBlbmFi
bGVDYXJldEluRWRpdGFibGVUZXh0KEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JD
b21tYW5kU291cmNlKQorc3RhdGljIGJvb2wgZW5hYmxlQ2FyZXRJbkVkaXRhYmxlVGV4dChGcmFt
ZSYgZnJhbWUsIEV2ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9u
Rm9yQ29tbWFuZChldmVudCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0aW9uRm9yQ29tbWFuZChldmVudCk7CiAgICAgcmV0dXJu
IHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9
CiAKLXN0YXRpYyBib29sIGVuYWJsZWRDb3B5KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlKQorc3RhdGljIGJvb2wgZW5hYmxlZENvcHkoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5j
YW5ESFRNTENvcHkoKSB8fCBmcmFtZS0+ZWRpdG9yKCkuY2FuQ29weSgpOworICAgIHJldHVybiBm
cmFtZS5lZGl0b3IoKS5jYW5ESFRNTENvcHkoKSB8fCBmcmFtZS5lZGl0b3IoKS5jYW5Db3B5KCk7
CiB9CiAKLXN0YXRpYyBib29sIGVuYWJsZWRDdXQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UpCitzdGF0aWMgYm9vbCBlbmFibGVkQ3V0KEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlKQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCku
Y2FuREhUTUxDdXQoKSB8fCBmcmFtZS0+ZWRpdG9yKCkuY2FuQ3V0KCk7CisgICAgcmV0dXJuIGZy
YW1lLmVkaXRvcigpLmNhbkRIVE1MQ3V0KCkgfHwgZnJhbWUuZWRpdG9yKCkuY2FuQ3V0KCk7CiB9
CiAKLXN0YXRpYyBib29sIGVuYWJsZWRJbkVkaXRhYmxlVGV4dChGcmFtZSogZnJhbWUsIEV2ZW50
KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKK3N0YXRpYyBib29sIGVuYWJsZWRJbkVkaXRh
YmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSkK
IHsKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlvbkZvckNvbW1hbmQoZXZlbnQp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gZnJhbWUuZWRpdG9yKCkuc2VsZWN0
aW9uRm9yQ29tbWFuZChldmVudCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCi1zdGF0aWMg
Ym9vbCBlbmFibGVkRGVsZXRlKEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb21t
YW5kU291cmNlIHNvdXJjZSkKK3N0YXRpYyBib29sIGVuYWJsZWREZWxldGUoRnJhbWUmIGZyYW1l
LCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewogICAgIHN3aXRj
aCAoc291cmNlKSB7CiAgICAgY2FzZSBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmc6ICAgIAot
ICAgICAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLmNhbkRlbGV0ZSgpOworICAgICAgICByZXR1
cm4gZnJhbWUuZWRpdG9yKCkuY2FuRGVsZXRlKCk7CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTToK
ICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2U6CiAgICAgICAgIC8vICJE
ZWxldGUiIGZyb20gRE9NIGlzIGxpa2UgZGVsZXRlL2JhY2tzcGFjZSBrZXlwcmVzcywgYWZmZWN0
cyBzZWxlY3RlZCByYW5nZSBpZiBub24tZW1wdHksCkBAIC0xMjU5LDE1MSArMTI1OSwxNTEgQEAg
c3RhdGljIGJvb2wgZW5hYmxlZERlbGV0ZShGcmFtZSogZnJhbWUsIAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldEJyb3dzaW5n
KEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb21tYW5kU291cmNlKQorc3RhdGlj
IGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldEJyb3dzaW5nKEZyYW1lJiBmcmFtZSwg
RXZlbnQqIGV2ZW50LCBFZGl0b3JDb21tYW5kU291cmNlKQogewogICAgIC8vIFRoZSBFZGl0b3JD
b21tYW5kU291cmNlIHBhcmFtZXRlciBpcyB1bnVzZWQgaW4gZW5hYmxlZEluRWRpdGFibGVUZXh0
LCBzbyBqdXN0IHBhc3MgYSBkdW1teSB2YXJpYWJsZQogICAgIHJldHVybiBjYXJldEJyb3dzaW5n
RW5hYmxlZChmcmFtZSkgfHwgZW5hYmxlZEluRWRpdGFibGVUZXh0KGZyYW1lLCBldmVudCwgZHVt
bXlFZGl0b3JDb21tYW5kU291cmNlKTsKIH0KIAotc3RhdGljIGJvb2wgZW5hYmxlZEluUmljaGx5
RWRpdGFibGVUZXh0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlKQor
c3RhdGljIGJvb2wgZW5hYmxlZEluUmljaGx5RWRpdGFibGVUZXh0KEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlKQogewotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9u
KCkuaXNDYXJldE9yUmFuZ2UoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwor
ICAgIHJldHVybiBmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpICYmIGZyYW1lLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCku
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCi1zdGF0aWMgYm9vbCBlbmFibGVkUGFzdGUoRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCitzdGF0aWMgYm9vbCBlbmFi
bGVkUGFzdGUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0g
ICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5jYW5QYXN0ZSgpOworICAgIHJldHVybiBmcmFtZS5l
ZGl0b3IoKS5jYW5QYXN0ZSgpOwogfQogCi1zdGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJbkVkaXRh
YmxlVGV4dChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKK3N0YXRp
YyBib29sIGVuYWJsZWRSYW5nZUluRWRpdGFibGVUZXh0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlKQogewotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNS
YW5nZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJl
dHVybiBmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKTsKIH0KIAotc3RhdGljIGJvb2wgZW5hYmxlZFJhbmdlSW5SaWNobHlF
ZGl0YWJsZVRleHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCitz
dGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJblJpY2hseUVkaXRhYmxlVGV4dChGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKTsKKyAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1l
LnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKLXN0YXRpYyBib29s
IGVuYWJsZWRSZWRvKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlKQor
c3RhdGljIGJvb2wgZW5hYmxlZFJlZG8oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5jYW5SZWRvKCk7CisgICAg
cmV0dXJuIGZyYW1lLmVkaXRvcigpLmNhblJlZG8oKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykK
LXN0YXRpYyBib29sIGVuYWJsZWRUYWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24oRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCitzdGF0aWMgYm9vbCBlbmFibGVkVGFr
ZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlKQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuY2FuQ29weUV4Y2x1ZGlu
Z1N0YW5kYWxvbmVJbWFnZXMoKTsKKyAgICByZXR1cm4gZnJhbWUuZWRpdG9yKCkuY2FuQ29weUV4
Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMoKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgYm9vbCBlbmFi
bGVkVW5kbyhGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKK3N0YXRp
YyBib29sIGVuYWJsZWRVbmRvKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlKQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuY2FuVW5kbygpOworICAgIHJldHVy
biBmcmFtZS5lZGl0b3IoKS5jYW5VbmRvKCk7CiB9CiAKIC8vIFN0YXRlIGZ1bmN0aW9ucwogCi1z
dGF0aWMgVHJpU3RhdGUgc3RhdGVOb25lKEZyYW1lKiwgRXZlbnQqKQorc3RhdGljIFRyaVN0YXRl
IHN0YXRlTm9uZShGcmFtZSYsIEV2ZW50KikKIHsKICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsK
IH0KIAotc3RhdGljIFRyaVN0YXRlIHN0YXRlQm9sZChGcmFtZSogZnJhbWUsIEV2ZW50KikKK3N0
YXRpYyBUcmlTdGF0ZSBzdGF0ZUJvbGQoRnJhbWUmIGZyYW1lLCBFdmVudCopCiB7CiAgICAgcmV0
dXJuIHN0YXRlU3R5bGUoZnJhbWUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCwgImJvbGQiKTsKIH0K
IAotc3RhdGljIFRyaVN0YXRlIHN0YXRlSXRhbGljKEZyYW1lKiBmcmFtZSwgRXZlbnQqKQorc3Rh
dGljIFRyaVN0YXRlIHN0YXRlSXRhbGljKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogewogICAgIHJl
dHVybiBzdGF0ZVN0eWxlKGZyYW1lLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIpOwog
fQogCi1zdGF0aWMgVHJpU3RhdGUgc3RhdGVPcmRlcmVkTGlzdChGcmFtZSogZnJhbWUsIEV2ZW50
KikKK3N0YXRpYyBUcmlTdGF0ZSBzdGF0ZU9yZGVyZWRMaXN0KEZyYW1lJiBmcmFtZSwgRXZlbnQq
KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSgpOworICAgIHJldHVybiBmcmFtZS5lZGl0b3IoKS5zZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRl
KCk7CiB9CiAKLXN0YXRpYyBUcmlTdGF0ZSBzdGF0ZVN0cmlrZXRocm91Z2goRnJhbWUqIGZyYW1l
LCBFdmVudCopCitzdGF0aWMgVHJpU3RhdGUgc3RhdGVTdHJpa2V0aHJvdWdoKEZyYW1lJiBmcmFt
ZSwgRXZlbnQqKQogewogICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCBDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAibGluZS10aHJvdWdoIik7CiB9CiAKLXN0YXRp
YyBUcmlTdGF0ZSBzdGF0ZVN0eWxlV2l0aENTUyhGcmFtZSogZnJhbWUsIEV2ZW50KikKK3N0YXRp
YyBUcmlTdGF0ZSBzdGF0ZVN0eWxlV2l0aENTUyhGcmFtZSYgZnJhbWUsIEV2ZW50KikKIHsKLSAg
ICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpID8gVHJ1ZVRyaVN0
YXRlIDogRmFsc2VUcmlTdGF0ZTsKKyAgICByZXR1cm4gZnJhbWUuZWRpdG9yKCkuc2hvdWxkU3R5
bGVXaXRoQ1NTKCkgPyBUcnVlVHJpU3RhdGUgOiBGYWxzZVRyaVN0YXRlOwogfQogCi1zdGF0aWMg
VHJpU3RhdGUgc3RhdGVTdWJzY3JpcHQoRnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgVHJp
U3RhdGUgc3RhdGVTdWJzY3JpcHQoRnJhbWUmIGZyYW1lLCBFdmVudCopCiB7CiAgICAgcmV0dXJu
IHN0YXRlU3R5bGUoZnJhbWUsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbiwgInN1YiIpOwogfQog
Ci1zdGF0aWMgVHJpU3RhdGUgc3RhdGVTdXBlcnNjcmlwdChGcmFtZSogZnJhbWUsIEV2ZW50KikK
K3N0YXRpYyBUcmlTdGF0ZSBzdGF0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqKQog
ewogICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24s
ICJzdXBlciIpOwogfQogCi1zdGF0aWMgVHJpU3RhdGUgc3RhdGVUZXh0V3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0KEZyYW1lKiBmcmFtZSwgRXZlbnQqKQorc3RhdGljIFRyaVN0YXRlIHN0YXRl
VGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodChGcmFtZSYgZnJhbWUsIEV2ZW50KikKIHsK
ICAgICByZXR1cm4gc3RhdGVUZXh0V3JpdGluZ0RpcmVjdGlvbihmcmFtZSwgTGVmdFRvUmlnaHRX
cml0aW5nRGlyZWN0aW9uKTsKIH0KIAotc3RhdGljIFRyaVN0YXRlIHN0YXRlVGV4dFdyaXRpbmdE
aXJlY3Rpb25OYXR1cmFsKEZyYW1lKiBmcmFtZSwgRXZlbnQqKQorc3RhdGljIFRyaVN0YXRlIHN0
YXRlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogewog
ICAgIHJldHVybiBzdGF0ZVRleHRXcml0aW5nRGlyZWN0aW9uKGZyYW1lLCBOYXR1cmFsV3JpdGlu
Z0RpcmVjdGlvbik7CiB9CiAKLXN0YXRpYyBUcmlTdGF0ZSBzdGF0ZVRleHRXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQoRnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgVHJpU3RhdGUgc3Rh
dGVUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KEZyYW1lJiBmcmFtZSwgRXZlbnQqKQog
ewogICAgIHJldHVybiBzdGF0ZVRleHRXcml0aW5nRGlyZWN0aW9uKGZyYW1lLCBSaWdodFRvTGVm
dFdyaXRpbmdEaXJlY3Rpb24pOwogfQogCi1zdGF0aWMgVHJpU3RhdGUgc3RhdGVVbmRlcmxpbmUo
RnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgVHJpU3RhdGUgc3RhdGVVbmRlcmxpbmUoRnJh
bWUmIGZyYW1lLCBFdmVudCopCiB7CiAgICAgcmV0dXJuIHN0YXRlU3R5bGUoZnJhbWUsIENTU1By
b3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsICJ1bmRlcmxpbmUiKTsKIH0KIAot
c3RhdGljIFRyaVN0YXRlIHN0YXRlVW5vcmRlcmVkTGlzdChGcmFtZSogZnJhbWUsIEV2ZW50KikK
K3N0YXRpYyBUcmlTdGF0ZSBzdGF0ZVVub3JkZXJlZExpc3QoRnJhbWUmIGZyYW1lLCBFdmVudCop
CiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKTsKKyAgICByZXR1cm4gZnJhbWUuZWRpdG9yKCkuc2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0
YXRlKCk7CiB9CiAKLXN0YXRpYyBUcmlTdGF0ZSBzdGF0ZUp1c3RpZnlDZW50ZXIoRnJhbWUqIGZy
YW1lLCBFdmVudCopCitzdGF0aWMgVHJpU3RhdGUgc3RhdGVKdXN0aWZ5Q2VudGVyKEZyYW1lJiBm
cmFtZSwgRXZlbnQqKQogewogICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCBDU1NQcm9wZXJ0
eVRleHRBbGlnbiwgImNlbnRlciIpOwogfQogCi1zdGF0aWMgVHJpU3RhdGUgc3RhdGVKdXN0aWZ5
RnVsbChGcmFtZSogZnJhbWUsIEV2ZW50KikKK3N0YXRpYyBUcmlTdGF0ZSBzdGF0ZUp1c3RpZnlG
dWxsKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogewogICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1l
LCBDU1NQcm9wZXJ0eVRleHRBbGlnbiwgImp1c3RpZnkiKTsKIH0KIAotc3RhdGljIFRyaVN0YXRl
IHN0YXRlSnVzdGlmeUxlZnQoRnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgVHJpU3RhdGUg
c3RhdGVKdXN0aWZ5TGVmdChGcmFtZSYgZnJhbWUsIEV2ZW50KikKIHsKICAgICByZXR1cm4gc3Rh
dGVTdHlsZShmcmFtZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24sICJsZWZ0Iik7CiB9CiAKLXN0YXRp
YyBUcmlTdGF0ZSBzdGF0ZUp1c3RpZnlSaWdodChGcmFtZSogZnJhbWUsIEV2ZW50KikKK3N0YXRp
YyBUcmlTdGF0ZSBzdGF0ZUp1c3RpZnlSaWdodChGcmFtZSYgZnJhbWUsIEV2ZW50KikKIHsKICAg
ICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24sICJyaWdodCIp
OwogfQogCiAvLyBWYWx1ZSBmdW5jdGlvbnMKIAotc3RhdGljIFN0cmluZyB2YWx1ZU51bGwoRnJh
bWUqLCBFdmVudCopCitzdGF0aWMgU3RyaW5nIHZhbHVlTnVsbChGcmFtZSYsIEV2ZW50KikKIHsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdmFsdWVCYWNrQ29sb3Io
RnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgU3RyaW5nIHZhbHVlQmFja0NvbG9yKEZyYW1l
JiBmcmFtZSwgRXZlbnQqKQogewogICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcik7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdmFsdWVEZWZhdWx0UGFy
YWdyYXBoU2VwYXJhdG9yKEZyYW1lKiBmcmFtZSwgRXZlbnQqKQorc3RhdGljIFN0cmluZyB2YWx1
ZURlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoRnJhbWUmIGZyYW1lLCBFdmVudCopCiB7Ci0gICAg
c3dpdGNoIChmcmFtZS0+ZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7Cisg
ICAgc3dpdGNoIChmcmFtZS5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsK
ICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4g
ZGl2VGFnLmxvY2FsTmFtZSgpOwogICAgIGNhc2UgRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNQ
OgpAQCAtMTQxNCwyOSArMTQxNCwyOSBAQCBzdGF0aWMgU3RyaW5nIHZhbHVlRGVmYXVsdFBhcmFn
cmFwaFNlcGFyCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0aWMgU3RyaW5nIHZhbHVl
Rm9udE5hbWUoRnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgU3RyaW5nIHZhbHVlRm9udE5h
bWUoRnJhbWUmIGZyYW1lLCBFdmVudCopCiB7CiAgICAgcmV0dXJuIHZhbHVlU3R5bGUoZnJhbWUs
IENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdmFsdWVGb250U2l6
ZShGcmFtZSogZnJhbWUsIEV2ZW50KikKK3N0YXRpYyBTdHJpbmcgdmFsdWVGb250U2l6ZShGcmFt
ZSYgZnJhbWUsIEV2ZW50KikKIHsKICAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgQ1NTUHJv
cGVydHlGb250U2l6ZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdmFsdWVGb250U2l6ZURlbHRhKEZy
YW1lKiBmcmFtZSwgRXZlbnQqKQorc3RhdGljIFN0cmluZyB2YWx1ZUZvbnRTaXplRGVsdGEoRnJh
bWUmIGZyYW1lLCBFdmVudCopCiB7CiAgICAgcmV0dXJuIHZhbHVlU3R5bGUoZnJhbWUsIENTU1By
b3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdmFsdWVGb3Jl
Q29sb3IoRnJhbWUqIGZyYW1lLCBFdmVudCopCitzdGF0aWMgU3RyaW5nIHZhbHVlRm9yZUNvbG9y
KEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogewogICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCBD
U1NQcm9wZXJ0eUNvbG9yKTsKIH0KIAotc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZy
YW1lKiBmcmFtZSwgRXZlbnQqKQorc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1l
JiBmcmFtZSwgRXZlbnQqKQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBp
ZiAoIXNlbGVjdGlvbi5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkgfHwgIXNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgRWxlbWVudCogZm9y
bWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0Qmxv
Y2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCkpOwpAQCAtMTcwMSw3ICsxNzAx
LDcgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gbV9jb21tYW5kLT5l
eGVjdXRlKG1fZnJhbWUuZ2V0KCksIHRyaWdnZXJpbmdFdmVudCwgbV9zb3VyY2UsIHBhcmFtZXRl
cik7CisgICAgcmV0dXJuIG1fY29tbWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2
ZW50LCBtX3NvdXJjZSwgcGFyYW1ldGVyKTsKIH0KIAogYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4
ZWN1dGUoRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE3MjgsMTQgKzE3MjgsMTQg
QEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmlzRW5hYmxlZChFdmVudCogdAogewogICAgIGlmICgh
aXNTdXBwb3J0ZWQoKSB8fCAhbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBtX2NvbW1hbmQtPmlzRW5hYmxlZChtX2ZyYW1lLmdldCgpLCB0cmlnZ2VyaW5nRXZlbnQs
IG1fc291cmNlKTsKKyAgICByZXR1cm4gbV9jb21tYW5kLT5pc0VuYWJsZWQoKm1fZnJhbWUsIHRy
aWdnZXJpbmdFdmVudCwgbV9zb3VyY2UpOwogfQogCiBUcmlTdGF0ZSBFZGl0b3I6OkNvbW1hbmQ6
OnN0YXRlKEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N1cHBv
cnRlZCgpIHx8ICFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICBy
ZXR1cm4gbV9jb21tYW5kLT5zdGF0ZShtX2ZyYW1lLmdldCgpLCB0cmlnZ2VyaW5nRXZlbnQpOwor
ICAgIHJldHVybiBtX2NvbW1hbmQtPnN0YXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQpOwog
fQogCiBTdHJpbmcgRWRpdG9yOjpDb21tYW5kOjp2YWx1ZShFdmVudCogdHJpZ2dlcmluZ0V2ZW50
KSBjb25zdApAQCAtMTc0Myw4ICsxNzQzLDggQEAgU3RyaW5nIEVkaXRvcjo6Q29tbWFuZDo6dmFs
dWUoRXZlbnQqIHRyaQogICAgIGlmICghaXNTdXBwb3J0ZWQoKSB8fCAhbV9mcmFtZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlmIChtX2NvbW1hbmQtPnZhbHVlID09IHZhbHVlTnVs
bCAmJiBtX2NvbW1hbmQtPnN0YXRlICE9IHN0YXRlTm9uZSkKLSAgICAgICAgcmV0dXJuIG1fY29t
bWFuZC0+c3RhdGUobV9mcmFtZS5nZXQoKSwgdHJpZ2dlcmluZ0V2ZW50KSA9PSBUcnVlVHJpU3Rh
dGUgPyAidHJ1ZSIgOiAiZmFsc2UiOwotICAgIHJldHVybiBtX2NvbW1hbmQtPnZhbHVlKG1fZnJh
bWUuZ2V0KCksIHRyaWdnZXJpbmdFdmVudCk7CisgICAgICAgIHJldHVybiBtX2NvbW1hbmQtPnN0
YXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQpID09IFRydWVUcmlTdGF0ZSA/ICJ0cnVlIiA6
ICJmYWxzZSI7CisgICAgcmV0dXJuIG1fY29tbWFuZC0+dmFsdWUoKm1fZnJhbWUsIHRyaWdnZXJp
bmdFdmVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjppc1RleHRJbnNlcnRpb24oKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTU0
NjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzAyLDcgKzMzMDIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29u
c3QgUGxhdGZvCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0g
ICAgVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IgdHlwaW5nR2VzdHVyZUluZGljYXRvcihtX2Zy
YW1lKTsKKyAgICBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciB0eXBpbmdHZXN0dXJlSW5kaWNh
dG9yKCptX2ZyYW1lKTsKIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3
KCkpCiAgICAgICAgIHZpZXctPnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkoKTsK
</data>
<flag name="review"
          id="231759"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>