<?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>21970</bug_id>
          
          <creation_ts>2008-10-30 09:09:19 -0700</creation_ts>
          <short_desc>Make MessagePort event dispatch work in workers</short_desc>
          <delta_ts>2008-10-31 02:45:00 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97122</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-30 09:09:19 -0700</bug_when>
    <thetext>JSEventListener code assumes that the context is a Document, which will no longer be true.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97123</commentid>
    <comment_count>1</comment_count>
      <attachid>24771</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-30 09:16:37 -0700</bug_when>
    <thetext>Created attachment 24771
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97124</commentid>
    <comment_count>2</comment_count>
      <attachid>24772</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-30 09:33:32 -0700</bug_when>
    <thetext>Created attachment 24772
updated patch

Removed a little too many unrelated changes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97143</commentid>
    <comment_count>3</comment_count>
      <attachid>24772</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-30 11:44:52 -0700</bug_when>
    <thetext>Comment on attachment 24772
updated patch

&gt; +JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData()
&gt; +    : evt(0)

In practice, this &quot;current event&quot; could, and maybe should, be per-thread data, not per-global object data. It&apos;s set on entry and then cleared on exit by the code that dispatches events.

&gt; +JSDOMGlobalObject::~JSDOMGlobalObject()
&gt; +{
&gt; +    // Clear any backpointers to the window
&gt; +    ListenersMap::iterator i2 = d()-&gt;jsEventListeners.begin();
&gt; +    ListenersMap::iterator e2 = d()-&gt;jsEventListeners.end();

A little strange that 2 comes before 1 in this function; but I guess that was copied and pasted from elsewhere.

&gt;  void JSDOMWindowBase::clearHelperObjectProperties()
&gt;  {
&gt; -    d()-&gt;evt = 0;
&gt; +    setCurrentEvent(0);
&gt;  }

I believe this function is unnecessary. I&apos;m not insisting that you remove it, but I believe that it&apos;s doing no good at all.

&gt; Index: WebCore/dom/Document.h
&gt; ===================================================================
&gt; --- WebCore/dom/Document.h	(revision 37996)
&gt; +++ WebCore/dom/Document.h	(working copy)
&gt; @@ -410,7 +410,7 @@ public:
&gt;  
&gt;      bool wellFormed() const { return m_wellFormed; }
&gt;  
&gt; -    const KURL&amp; url() const { return m_url; }
&gt; +    virtual const KURL&amp; url() const ;

Extra space before the semicolon.

It could be bad for performance to make Document::url() virtual just because ScriptExecutionContext::url() needs to be. Maybe you should consider the style I used for Node::localName() and Element::localName() that allows the latter to be a non-virtual function?

I guess it&apos;s premature optimization to assume that it&apos;s going to be a performance problem, but it does worry me a bit.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97228</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 02:45:00 -0700</bug_when>
    <thetext>Committed revision 38033.

(In reply to comment #3)
&gt; In practice, this &quot;current event&quot; could, and maybe should, be per-thread data,
&gt; not per-global object data.

I&apos;m not sure about this - per-thread keys are a rather limited process-wide resource, so frameworks shouldn&apos;t use them unless there is a significant benefit.

&gt; A little strange that 2 comes before 1 in this function; but I guess that was
&gt; copied and pasted from elsewhere.

It was, fixed now.

&gt; It could be bad for performance to make Document::url() virtual just because
&gt; ScriptExecutionContext::url() needs to be. Maybe you should consider the style
&gt; I used for Node::localName() and Element::localName() that allows the latter to
&gt; be a non-virtual function?

OK.

&gt; r=me

Thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24771</attachid>
            <date>2008-10-30 09:16:37 -0700</date>
            <delta_ts>2008-10-30 09:33:32 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>ListenersToGlobalObject.txt</filename>
            <type>text/plain</type>
            <size>35915</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODAwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDgtMTAtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk3MAorICAgICAgICBN
YWtlIE1lc3NhZ2VQb3J0IGV2ZW50IGRpc3BhdGNoIHdvcmsgaW4gd29ya2VycworCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0RGF0YTo6SlNET01HbG9iYWxPYmpl
Y3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9i
YWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU0V2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmZpbmRP
ckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9i
amVjdDo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6anNFdmVudExpc3RlbmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6anNJbmxpbmVFdmVudExp
c3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6anNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0
Ojpqc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01HbG9iYWxPYmplY3Q6OnNldEN1cnJlbnRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTUdsb2JhbE9iamVjdDo6Y3VycmVudEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNE
T01HbG9iYWxPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlRGF0YTo6SlNET01XaW5k
b3dCYXNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6On5KU0RPTVdp
bmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjbGVhckhlbHBl
ck9iamVjdFByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oOgorICAgICAgICBNb3ZlZCBldmVudCBsaXN0ZW5lciB0cmFja2luZyBmcm9tIEpTRE9NV2lu
ZG93IHRvIEpTRE9NR2xvYmFsT2JqZWN0LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6On5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Z2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjbGVhckds
b2JhbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpnbG9iYWxPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpjbGVhckdsb2JhbE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgIENoYW5nZWQgdG8gdXNlIEpTRE9NR2xvYmFs
T2JqZWN0IGFuZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQ
b3J0OjpzdGFydENvbnZlcnNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0
OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6c2V0
T25tZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnNldE9uY2xvc2Up
OgorICAgICAgICBVcGRhdGVkIGJpbmRpbmdzIHRvIHdvcmsgd2l0aCBKU0RPTUdsb2JhbE9iamVj
dC4gTmV4dCBzdGVwIGlzIHRvIG1ha2UgY29kZSBnZW5lcmF0b3IgZW1pdAorICAgICAgICBzdWNo
IGNvZGUsIGFuZCBzdG9wIHVzaW5nIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBKU01lc3Nh
Z2VQb3J0IGlubGluZSBldmVudCBoYW5kbGVyCisgICAgICAgIGdldHRlcnMgYW5kIHNldHRlcnMu
CisKIDIwMDgtMTAtMzAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbHAgVG9rZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzc5OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTUgKzI3LDQ4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKIAorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJK
U0V2ZW50TGlzdGVuZXIuaCIKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3REYXRhOjpKU0RP
TUdsb2JhbE9iamVjdERhdGEoKQorICAgIDogZXZ0KDApCit7Cit9CisKIEpTRE9NR2xvYmFsT2Jq
ZWN0OjpKU0RPTUdsb2JhbE9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdERhdGEqIGRhdGEsIEpTT2JqZWN0
KiB0aGlzVmFsdWUpCiAgICAgOiBKU0dsb2JhbE9iamVjdChzdHJ1Y3R1cmUsIGRhdGEsIHRoaXNW
YWx1ZSkKIHsKIH0KIAorSlNET01HbG9iYWxPYmplY3Q6On5KU0RPTUdsb2JhbE9iamVjdCgpCit7
CisgICAgLy8gQ2xlYXIgYW55IGJhY2twb2ludGVycyB0byB0aGUgd2luZG93CisgICAgTGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBpMiA9IGQoKS0+anNFdmVudExpc3RlbmVycy5iZWdpbigpOworICAg
IExpc3RlbmVyc01hcDo6aXRlcmF0b3IgZTIgPSBkKCktPmpzRXZlbnRMaXN0ZW5lcnMuZW5kKCk7
CisgICAgZm9yICg7IGkyICE9IGUyOyArK2kyKQorICAgICAgICBpMi0+c2Vjb25kLT5jbGVhckds
b2JhbE9iamVjdCgpOworCisgICAgaTIgPSBkKCktPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMuYmVn
aW4oKTsKKyAgICBlMiA9IGQoKS0+anNJbmxpbmVFdmVudExpc3RlbmVycy5lbmQoKTsKKyAgICBm
b3IgKDsgaTIgIT0gZTI7ICsraTIpCisgICAgICAgIGkyLT5zZWNvbmQtPmNsZWFyR2xvYmFsT2Jq
ZWN0KCk7CisKKyAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaTEgPSBkKCkt
PmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycy5iZWdpbigpOworICAgIFVucHJvdGVjdGVkTGlz
dGVuZXJzTWFwOjppdGVyYXRvciBlMSA9IGQoKS0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJz
LmVuZCgpOworICAgIGZvciAoOyBpMSAhPSBlMTsgKytpMSkKKyAgICAgICAgaTEtPnNlY29uZC0+
Y2xlYXJHbG9iYWxPYmplY3QoKTsKKworICAgIGkxID0gZCgpLT5qc1VucHJvdGVjdGVkSW5saW5l
RXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKKyAgICBlMSA9IGQoKS0+anNVbnByb3RlY3RlZElubGlu
ZUV2ZW50TGlzdGVuZXJzLmVuZCgpOworICAgIGZvciAoOyBpMSAhPSBlMTsgKytpMSkKKyAgICAg
ICAgaTEtPnNlY29uZC0+Y2xlYXJHbG9iYWxPYmplY3QoKTsKK30KKwogdm9pZCBKU0RPTUdsb2Jh
bE9iamVjdDo6bWFyaygpCiB7CiAgICAgQmFzZTo6bWFyaygpOwpAQCAtNTEsNCArODQsODUgQEAg
dm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6bWFyaygpCiAgICAgfQogfQogCitKU0V2ZW50TGlzdGVu
ZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWUqIHZhbCwg
Ym9vbCBpc0lubGluZSkKK3sKKyAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbCk7CisgICAgTGlzdGVu
ZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0lubGluZSA/IGQoKS0+anNJbmxpbmVFdmVudExpc3RlbmVy
cyA6IGQoKS0+anNFdmVudExpc3RlbmVyczsKKyAgICByZXR1cm4gbGlzdGVuZXJzLmdldChvYmpl
Y3QpOworfQorCitQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmplY3Q6
OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZh
bCwgYm9vbCBpc0lubGluZSkKK3sKKyAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9
IGZpbmRKU0V2ZW50TGlzdGVuZXIodmFsLCBpc0lubGluZSkpCisgICAgICAgIHJldHVybiBsaXN0
ZW5lcjsKKworICAgIGlmICghdmFsLT5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIFRoZSBKU0V2ZW50TGlzdGVuZXIgY29uc3RydWN0b3IgYWRkcyBpdCB0byBvdXIganNF
dmVudExpc3RlbmVycyBtYXAuCisgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KHZhbCksIHRoaXMsIGlzSW5saW5lKS5nZXQoKTsKK30KKworSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCit7Cisg
ICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVW5wcm90
ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSW5saW5lID8gZCgpLT5qc1VucHJvdGVj
dGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMgOiBkKCktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
czsKKyAgICByZXR1cm4gbGlzdGVuZXJzLmdldChhc09iamVjdCh2YWwpKTsKK30KKworUGFzc1Jl
ZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmplY3Q6OmZpbmRP
ckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsLCBib29sIGlzSW5saW5lKQoreworICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFs
LCBpc0lubGluZSkpCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKworICAgIGlmICghdmFsLT5p
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFRoZSBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRzIGl0IHRvIG91ciBqc1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lcnMgbWFwLgorICAgIHJldHVybiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGFzT2JqZWN0KHZhbCksIHRoaXMsIGlzSW5saW5lKS5nZXQoKTsKK30KKworSlNET01H
bG9iYWxPYmplY3Q6Okxpc3RlbmVyc01hcCYgSlNET01HbG9iYWxPYmplY3Q6OmpzRXZlbnRMaXN0
ZW5lcnMoKQoreworICAgIHJldHVybiBkKCktPmpzRXZlbnRMaXN0ZW5lcnM7Cit9CisKK0pTRE9N
R2xvYmFsT2JqZWN0OjpMaXN0ZW5lcnNNYXAmIEpTRE9NR2xvYmFsT2JqZWN0Ojpqc0lubGluZUV2
ZW50TGlzdGVuZXJzKCkKK3sKKyAgICByZXR1cm4gZCgpLT5qc0lubGluZUV2ZW50TGlzdGVuZXJz
OworfQorCitKU0RPTUdsb2JhbE9iamVjdDo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIEpTRE9N
R2xvYmFsT2JqZWN0Ojpqc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKQoreworICAgIHJldHVy
biBkKCktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyczsKK30KKworSlNET01HbG9iYWxPYmpl
Y3Q6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBKU0RPTUdsb2JhbE9iamVjdDo6anNVbnByb3Rl
Y3RlZElubGluZUV2ZW50TGlzdGVuZXJzKCkKK3sKKyAgICByZXR1cm4gZCgpLT5qc1VucHJvdGVj
dGVkSW5saW5lRXZlbnRMaXN0ZW5lcnM7Cit9CisKK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnNl
dEN1cnJlbnRFdmVudChFdmVudCogZXZ0KQoreworICAgIGQoKS0+ZXZ0ID0gZXZ0OworfQorCitF
dmVudCogSlNET01HbG9iYWxPYmplY3Q6OmN1cnJlbnRFdmVudCgpCit7CisgICAgcmV0dXJuIGQo
KS0+ZXZ0OworfQorCitKU0RPTUdsb2JhbE9iamVjdCogdG9KU0RPTUdsb2JhbE9iamVjdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQoreworICAgIGlmIChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpCisgICAgICAgIHJldHVybiB0b0pT
RE9NV2luZG93KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkt
PmZyYW1lKCkpOworCisgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KKyAgICByZXR1cm4gMDsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMzc5OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgRXZlbnQ7CisgICAgY2xhc3MgSlNFdmVu
dExpc3RlbmVyOworICAgIGNsYXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOwogICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
SlNDOjpDbGFzc0luZm8qLCBSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gPiBKU0RPTVN0cnVjdHVy
ZU1hcDsKQEAgLTM5LDEyICs0MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
SlNET01HbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdCB7CiAgICAgICAg
IHR5cGVkZWYgSlNDOjpKU0dsb2JhbE9iamVjdCBCYXNlOwogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgc3RydWN0IEpTRE9NR2xvYmFsT2JqZWN0RGF0YSA6IHB1YmxpYyBKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpKU0dsb2JhbE9iamVjdERhdGEgewotICAgICAgICAgICAgSlNET01TdHJ1Y3R1cmVNYXAg
c3RydWN0dXJlczsKLSAgICAgICAgICAgIEpTRE9NQ29uc3RydWN0b3JNYXAgY29uc3RydWN0b3Jz
OwotICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgSlNET01HbG9iYWxPYmplY3REYXRhOwogCiAg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4sIEpT
RE9NR2xvYmFsT2JqZWN0RGF0YSosIEpTQzo6SlNPYmplY3QqIHRoaXNWYWx1ZSk7CisgICAgICAg
IHZpcnR1YWwgfkpTRE9NR2xvYmFsT2JqZWN0KCk7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIEpT
RE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzKCkgeyByZXR1cm4gZCgpLT5zdHJ1Y3R1cmVzOyB9
CkBAIC01Miw4ICs1Myw0NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qg
PSAwOwogCisgICAgICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIs
IHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUuCisgICAgICAgIEpTRXZlbnRMaXN0ZW5lciog
ZmluZEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFsc2Up
OworCisgICAgICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRM
aXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMgR0MtcHJvdGVjdGVkLgorICAgICAg
ICBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsK
KworICAgICAgICAvLyBGaW5kcyBhIHdyYXBwZXIgb2YgYSBHQy11bnByb3RlY3RlZCBKUyBFdmVu
dExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8gZXhpc3Rpbmcgb25lLgorICAgICAgICBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lciogZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKworICAg
ICAgICAvLyBGaW5kcyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIu
IEpTIEV2ZW50TGlzdGVuZXIgb2JqZWN0IGlzICpOT1QqIEdDLXByb3RlY3RlZC4KKyAgICAgICAg
UGFzc1JlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29s
IGlzSW5saW5lID0gZmFsc2UpOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxKU0M6OkpTT2Jq
ZWN0KiwgSlNFdmVudExpc3RlbmVyKj4gTGlzdGVuZXJzTWFwOworICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8SlNDOjpKU09iamVjdCosIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4gVW5wcm90
ZWN0ZWRMaXN0ZW5lcnNNYXA7CisKKyAgICAgICAgTGlzdGVuZXJzTWFwJiBqc0V2ZW50TGlzdGVu
ZXJzKCk7CisgICAgICAgIExpc3RlbmVyc01hcCYganNJbmxpbmVFdmVudExpc3RlbmVycygpOwor
ICAgICAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcCYganNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXJzKCk7CisgICAgICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBqc1VucHJvdGVjdGVkSW5s
aW5lRXZlbnRMaXN0ZW5lcnMoKTsKKworICAgICAgICB2b2lkIHNldEN1cnJlbnRFdmVudChFdmVu
dCopOworICAgICAgICBFdmVudCogY3VycmVudEV2ZW50KCk7CisKICAgICAgICAgdmlydHVhbCB2
b2lkIG1hcmsoKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RydWN0IEpTRE9NR2xvYmFs
T2JqZWN0RGF0YSA6IHB1YmxpYyBKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdERh
dGEgeworICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3REYXRhKCk7CisKKyAgICAgICAgICAg
IEpTRE9NU3RydWN0dXJlTWFwIHN0cnVjdHVyZXM7CisgICAgICAgICAgICBKU0RPTUNvbnN0cnVj
dG9yTWFwIGNvbnN0cnVjdG9yczsKKworICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okxp
c3RlbmVyc01hcCBqc0V2ZW50TGlzdGVuZXJzOworICAgICAgICAgICAgSlNET01HbG9iYWxPYmpl
Y3Q6Okxpc3RlbmVyc01hcCBqc0lubGluZUV2ZW50TGlzdGVuZXJzOworICAgICAgICAgICAgSlNE
T01HbG9iYWxPYmplY3Q6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyczsKKyAgICAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpVbnByb3RlY3RlZExp
c3RlbmVyc01hcCBqc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnM7CisKKyAgICAgICAg
ICAgIEV2ZW50KiBldnQ7CisgICAgICAgIH07CisKICAgICBwcml2YXRlOgogICAgICAgICBKU0RP
TUdsb2JhbE9iamVjdERhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdERhdGEqPihKU0M6OkpTVmFyaWFibGVPYmplY3Q6OmQpOyB9CiAgICAgfTsKQEAg
LTc5LDYgKzExOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdG9yOwogICAgIH0KIAorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2Jq
ZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gSlNET01HbG9iYWxPYmplY3RfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzc5OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNiBA
QCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNlOjpzX2luZm8gCiAKIEpTRE9NV2luZG93
QmFzZTo6SlNET01XaW5kb3dCYXNlRGF0YTo6SlNET01XaW5kb3dCYXNlRGF0YShQYXNzUmVmUHRy
PERPTVdpbmRvdz4gd2luZG93LCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKICAgICA6IGltcGwo
d2luZG93KQotICAgICwgZXZ0KDApCiAgICAgLCByZXR1cm5WYWx1ZVNsb3QoMCkKICAgICAsIHNo
ZWxsKHNoZWxsKQogewpAQCAtMjAwLDI3ICsxOTksNiBAQCBKU0RPTVdpbmRvd0Jhc2U6On5KU0RP
TVdpbmRvd0Jhc2UoKQogICAgICAgICBkKCktPmltcGwtPmZyYW1lKCktPnNjcmlwdCgpLT5jbGVh
ckZvcm1lcldpbmRvdyhhc0pTRE9NV2luZG93KHRoaXMpKTsKIAogICAgIGNsZWFyQWxsVGltZW91
dHMoKTsKLQotICAgIC8vIENsZWFyIGFueSBiYWNrcG9pbnRlcnMgdG8gdGhlIHdpbmRvdwotICAg
IExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaTIgPSBkKCktPmpzRXZlbnRMaXN0ZW5lcnMuYmVnaW4o
KTsKLSAgICBMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGUyID0gZCgpLT5qc0V2ZW50TGlzdGVuZXJz
LmVuZCgpOwotICAgIGZvciAoOyBpMiAhPSBlMjsgKytpMikKLSAgICAgICAgaTItPnNlY29uZC0+
Y2xlYXJXaW5kb3coKTsKLQotICAgIGkyID0gZCgpLT5qc0lubGluZUV2ZW50TGlzdGVuZXJzLmJl
Z2luKCk7Ci0gICAgZTIgPSBkKCktPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMuZW5kKCk7Ci0gICAg
Zm9yICg7IGkyICE9IGUyOyArK2kyKQotICAgICAgICBpMi0+c2Vjb25kLT5jbGVhcldpbmRvdygp
OwotCi0gICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGkxID0gZCgpLT5qc1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKLSAgICBVbnByb3RlY3RlZExpc3RlbmVy
c01hcDo6aXRlcmF0b3IgZTEgPSBkKCktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycy5lbmQo
KTsKLSAgICBmb3IgKDsgaTEgIT0gZTE7ICsraTEpCi0gICAgICAgIGkxLT5zZWNvbmQtPmNsZWFy
V2luZG93KCk7Ci0KLSAgICBpMSA9IGQoKS0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVu
ZXJzLmJlZ2luKCk7Ci0gICAgZTEgPSBkKCktPmpzVW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3Rl
bmVycy5lbmQoKTsKLSAgICBmb3IgKDsgaTEgIT0gZTE7ICsraTEpCi0gICAgICAgIGkxLT5zZWNv
bmQtPmNsZWFyV2luZG93KCk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NV2lu
ZG93QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC03MzYsNTEgKzcxNCw5
IEBAIGJvb2wgSlNET01XaW5kb3dCYXNlOjpzaG91bGRJbnRlcnJ1cHRTY3IKICAgICByZXR1cm4g
cGFnZS0+Y2hyb21lKCktPnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKIH0KIAotSlNFdmVu
dExpc3RlbmVyKiBKU0RPTVdpbmRvd0Jhc2U6OmZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSog
dmFsLCBib29sIGlzSW5saW5lKQotewotICAgIGlmICghdmFsLT5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsKTsKLSAgICBM
aXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSW5saW5lID8gZCgpLT5qc0lubGluZUV2ZW50TGlz
dGVuZXJzIDogZCgpLT5qc0V2ZW50TGlzdGVuZXJzOwotICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0
KG9iamVjdCk7Ci19Ci0KLVBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTVdpbmRvd0Jh
c2U6OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHZhbCwgYm9vbCBpc0lubGluZSkKLXsKLSAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IGZpbmRKU0V2ZW50TGlzdGVuZXIodmFsLCBpc0lubGluZSkpCi0gICAgICAgIHJldHVybiBs
aXN0ZW5lcjsKLQotICAgIGlmICghdmFsLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIC8vIFRoZSBKU0V2ZW50TGlzdGVuZXIgY29uc3RydWN0b3IgYWRkcyBpdCB0byBvdXIg
anNFdmVudExpc3RlbmVycyBtYXAuCi0gICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KHZhbCksIHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGlzSW5saW5l
KS5nZXQoKTsKLX0KLQotSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIEpTRE9NV2luZG93QmFz
ZTo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsLCBib29sIGlzSW5saW5lKQotewotICAgIGlmICghdmFsLT5pc09iamVjdCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMg
PSBpc0lubGluZSA/IGQoKS0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzIDogZCgp
LT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7Ci0gICAgcmV0dXJuIGxpc3RlbmVycy5nZXQo
YXNPYmplY3QodmFsKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXI+IEpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCi17Ci0gICAg
aWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWwsIGlzSW5saW5lKSkKLSAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOwotCi0gICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgLy8gVGhlIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyIGNvbnN0cnVjdG9yIGFkZHMg
aXQgdG8gb3VyIGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycyBtYXAuCi0gICAgcmV0dXJuIEpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QodmFsKSwgc3RhdGljX2Nh
c3Q8SlNET01XaW5kb3cqPih0aGlzKSwgaXNJbmxpbmUpLmdldCgpOwotfQotCiB2b2lkIEpTRE9N
V2luZG93QmFzZTo6Y2xlYXJIZWxwZXJPYmplY3RQcm9wZXJ0aWVzKCkKIHsKLSAgICBkKCktPmV2
dCA9IDA7CisgICAgc2V0Q3VycmVudEV2ZW50KDApOwogfQogCiB2b2lkIEpTRE9NV2luZG93QmFz
ZTo6Y2xlYXIoKQpAQCAtNzk0LDE2ICs3MzAsNiBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6Y2xl
YXIoKQogICAgIGNsZWFySGVscGVyT2JqZWN0UHJvcGVydGllcygpOwogfQogCi12b2lkIEpTRE9N
V2luZG93QmFzZTo6c2V0Q3VycmVudEV2ZW50KEV2ZW50KiBldnQpCi17Ci0gICAgZCgpLT5ldnQg
PSBldnQ7Ci19Ci0KLUV2ZW50KiBKU0RPTVdpbmRvd0Jhc2U6OmN1cnJlbnRFdmVudCgpCi17Ci0g
ICAgcmV0dXJuIGQoKS0+ZXZ0OwotfQotCiBKU09iamVjdCogSlNET01XaW5kb3dCYXNlOjp0b1Ro
aXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3QKIHsKICAgICByZXR1cm4gc2hlbGwoKTsKQEAgLTEw
NTcsMjYgKzk4Myw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQog
ICAgIGNsZWFyQWxsVGltZW91dHMoKTsKIH0KIAotSlNET01XaW5kb3dCYXNlOjpMaXN0ZW5lcnNN
YXAmIEpTRE9NV2luZG93QmFzZTo6anNFdmVudExpc3RlbmVycygpCi17Ci0gICAgcmV0dXJuIGQo
KS0+anNFdmVudExpc3RlbmVyczsKLX0KLQotSlNET01XaW5kb3dCYXNlOjpMaXN0ZW5lcnNNYXAm
IEpTRE9NV2luZG93QmFzZTo6anNJbmxpbmVFdmVudExpc3RlbmVycygpCi17Ci0gICAgcmV0dXJu
IGQoKS0+anNJbmxpbmVFdmVudExpc3RlbmVyczsKLX0KLQotSlNET01XaW5kb3dCYXNlOjpVbnBy
b3RlY3RlZExpc3RlbmVyc01hcCYgSlNET01XaW5kb3dCYXNlOjpqc1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcnMoKQotewotICAgIHJldHVybiBkKCktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
czsKLX0KLQotSlNET01XaW5kb3dCYXNlOjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgSlNET01X
aW5kb3dCYXNlOjpqc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMoKQotewotICAgIHJl
dHVybiBkKCktPmpzVW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVyczsKLX0KLQogdm9pZCBE
T01XaW5kb3dUaW1lcjo6ZmlyZWQoKQogewogICAgIHRpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0
aW5nTGV2ZWw7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlz
aW9uIDM3OTk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsMzQgKzc2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2b2lkIHRpbWVyRmlyZWQoRE9NV2luZG93VGltZXIqKTsKIAotICAgICAgICAvLyBGaW5k
cyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8gZXhpc3Rp
bmcgb25lLgotICAgICAgICBKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlND
OjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKLQotICAgICAgICAvLyBGaW5kcyBv
ciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50TGlzdGVu
ZXIgb2JqZWN0IGlzIEdDLXByb3RlY3RlZC4KLSAgICAgICAgUGFzc1JlZlB0cjxKU0V2ZW50TGlz
dGVuZXI+IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSosIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7Ci0KLSAgICAgICAgLy8gRmluZHMgYSB3
cmFwcGVyIG9mIGEgR0MtdW5wcm90ZWN0ZWQgSlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJucyAwIGlm
IG5vIGV4aXN0aW5nIG9uZS4KLSAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGZp
bmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSosIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7Ci0KLSAgICAgICAgLy8gRmluZHMgb3IgY3JlYXRl
cyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLiBKUyBFdmVudExpc3RlbmVyIG9iamVj
dCBpcyAqTk9UKiBHQy1wcm90ZWN0ZWQuCi0gICAgICAgIFBhc3NSZWZQdHI8SlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKLQog
ICAgICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICAgICAgdm9pZCBzZXRDdXJyZW50RXZlbnQoRXZl
bnQqKTsKLSAgICAgICAgRXZlbnQqIGN1cnJlbnRFdmVudCgpOwotCiAgICAgICAgIC8vIFNldCBh
IHBsYWNlIHRvIHB1dCBhIGRpYWxvZyByZXR1cm4gdmFsdWUgd2hlbiB0aGUgd2luZG93IGlzIGNs
ZWFyZWQuCiAgICAgICAgIHZvaWQgc2V0UmV0dXJuVmFsdWVTbG90KEpTQzo6SlNWYWx1ZSoqIHNs
b3QpOwogCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgSlNFdmVudExp
c3RlbmVyKj4gTGlzdGVuZXJzTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDOjpKU09i
amVjdCosIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4gVW5wcm90ZWN0ZWRMaXN0ZW5lcnNN
YXA7Ci0KLSAgICAgICAgTGlzdGVuZXJzTWFwJiBqc0V2ZW50TGlzdGVuZXJzKCk7Ci0gICAgICAg
IExpc3RlbmVyc01hcCYganNJbmxpbmVFdmVudExpc3RlbmVycygpOwotICAgICAgICBVbnByb3Rl
Y3RlZExpc3RlbmVyc01hcCYganNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgICAg
IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBqc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5l
cnMoKTsKLQogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CiAKQEAgLTEzNSwxMSArMTEyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgICAgICBSZWZQdHI8RE9NV2luZG93PiBpbXBsOwogCi0gICAgICAgICAgICBK
U0RPTVdpbmRvd0Jhc2U6Okxpc3RlbmVyc01hcCBqc0V2ZW50TGlzdGVuZXJzOwotICAgICAgICAg
ICAgSlNET01XaW5kb3dCYXNlOjpMaXN0ZW5lcnNNYXAganNJbmxpbmVFdmVudExpc3RlbmVyczsK
LSAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZTo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzOwotICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlOjpV
bnByb3RlY3RlZExpc3RlbmVyc01hcCBqc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnM7
Ci0gICAgICAgICAgICBFdmVudCogZXZ0OwogICAgICAgICAgICAgSlNDOjpKU1ZhbHVlKiogcmV0
dXJuVmFsdWVTbG90OwogICAgICAgICAgICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGw7CiAKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDM3OTk2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MywyMyArNTMsMzQgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbgogICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTRE9N
V2luZG93KiB3aW5kb3cgPSB0aGlzLT53aW5kb3coKTsKLSAgICAvLyBOdWxsIGNoZWNrIGFzIGNs
ZWFyV2luZG93KCkgY2FuIGNsZWFyIHRoaXMgYW5kIHdlIHN0aWxsIGdldCBjYWxsZWQgYmFjayBi
eQorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICAvLyBOdWxsIGNoZWNrIGFzIGNsZWFyR2xvYmFsT2JqZWN0KCkgY2FuIGNsZWFy
IHRoaXMgYW5kIHdlIHN0aWxsIGdldCBjYWxsZWQgYmFjayBieQogICAgIC8vIHhtbGh0dHByZXF1
ZXN0IG9iamVjdHMuIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzI3NQotICAgIGlmICghd2luZG93KQorICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIHN0aWxs
IG5lY2Vzc2FyeT8gUmVxdWVzdHMgYXJlIHN1cHBvc2VkIHRvIGJlIHN0b3BwZWQgYmVmb3JlIGNs
ZWFyR2xvYmFsT2JqZWN0KCkgaXMgY2FsbGVkLgorICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAg
ICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5pbXBsKCktPmZyYW1lKCk7
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZSB3aW5kb3cgbXVz
dCBzdGlsbCBiZSBhY3RpdmUgaW4gaXRzIGZyYW1lLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkyMT4uCi0gICAgLy8gRklYTUU6IEEgYmV0dGVyIGZpeCBm
b3IgdGhpcyBtYXkgYmUgdG8gY2hhbmdlIERNT1dpbmRvdzo6ZnJhbWUoKSB0byBub3QgcmV0dXJu
IGEgZnJhbWUgdGhlIGRldGFjaGVkIHdpbmRvdyB1c2VkIHRvIGJlIGluLgotICAgIGlmIChmcmFt
ZS0+ZG9tV2luZG93KCkgIT0gd2luZG93LT5pbXBsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBT
Y3JpcHRDb250cm9sbGVyKiBzY3JpcHQgPSBmcmFtZS0+c2NyaXB0KCk7Ci0gICAgaWYgKCFzY3Jp
cHQtPmlzRW5hYmxlZCgpIHx8IHNjcmlwdC0+aXNQYXVzZWQoKSkKKworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhl
YygpOworICAgIEZyYW1lKiBmcmFtZSA9IDA7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gc3RhdGlj
X2Nhc3Q8SlNET01XaW5kb3cqPihnbG9iYWxPYmplY3QpOworICAgICAgICBmcmFtZSA9IHdpbmRv
dy0+aW1wbCgpLT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAvLyBUaGUgd2luZG93IG11c3Qgc3RpbGwgYmUgYWN0aXZlIGluIGl0cyBm
cmFtZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjE+
LgorICAgICAgICAvLyBGSVhNRTogQSBiZXR0ZXIgZml4IGZvciB0aGlzIG1heSBiZSB0byBjaGFu
Z2UgRE9NV2luZG93OjpmcmFtZSgpIHRvIG5vdCByZXR1cm4gYSBmcmFtZSB0aGUgZGV0YWNoZWQg
d2luZG93IHVzZWQgdG8gYmUgaW4uCisgICAgICAgIGlmIChmcmFtZS0+ZG9tV2luZG93KCkgIT0g
d2luZG93LT5pbXBsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBJ
cyB0aGlzIGNoZWNrIG5lZWRlZCBmb3Igb3RoZXIgY29udGV4dHM/CisgICAgICAgIFNjcmlwdENv
bnRyb2xsZXIqIHNjcmlwdCA9IGZyYW1lLT5zY3JpcHQoKTsKKyAgICAgICAgaWYgKCFzY3JpcHQt
PmlzRW5hYmxlZCgpIHx8IHNjcmlwdC0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKIAogICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBsaXN0ZW5lci0+Z2V0KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwpAQCAtODUsMjkgKzk2LDMxIEBAIHZvaWQgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW4KICAgICAgICAgQXJnTGlzdCBhcmdzOwogICAgICAgICBhcmdzLmFwcGVuZCh0b0pT
KGV4ZWMsIGV2ZW50KSk7CiAKLSAgICAgICAgRXZlbnQqIHNhdmVkRXZlbnQgPSB3aW5kb3ctPmN1
cnJlbnRFdmVudCgpOwotICAgICAgICB3aW5kb3ctPnNldEN1cnJlbnRFdmVudChldmVudCk7Cisg
ICAgICAgIEV2ZW50KiBzYXZlZEV2ZW50ID0gZ2xvYmFsT2JqZWN0LT5jdXJyZW50RXZlbnQoKTsK
KyAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoZXZlbnQpOwogCiAgICAgICAg
IEpTVmFsdWUqIHJldHZhbDsKICAgICAgICAgaWYgKGhhbmRsZUV2ZW50RnVuY3Rpb24pIHsKLSAg
ICAgICAgICAgIHdpbmRvdy0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKKyAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgICAgIHJldHZhbCA9IGNhbGwo
ZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBsaXN0ZW5lciwg
YXJncyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWU7
CiAgICAgICAgICAgICBpZiAoaXNXaW5kb3dFdmVudCkKLSAgICAgICAgICAgICAgICB0aGlzVmFs
dWUgPSB3aW5kb3ctPnNoZWxsKCk7CisgICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gZ2xvYmFs
T2JqZWN0LT50b1RoaXNPYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgdGhpc1ZhbHVlID0gdG9KUyhleGVjLCBldmVudC0+Y3VycmVudFRhcmdldCgpKTsKLSAg
ICAgICAgICAgIHdpbmRvdy0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKKyAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgICAgIHJldHZhbCA9IGNhbGwo
ZXhlYywgbGlzdGVuZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAg
ICAgICAgfQotICAgICAgICB3aW5kb3ctPnN0b3BUaW1lb3V0Q2hlY2soKTsKKyAgICAgICAgZ2xv
YmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAKLSAgICAgICAgd2luZG93LT5zZXRDdXJy
ZW50RXZlbnQoc2F2ZWRFdmVudCk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2
ZW50KHNhdmVkRXZlbnQpOwogCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5yZXBvcnRDdXJyZW50RXhj
ZXB0aW9uKGV4ZWMpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlvbnMgaW4gbm9u
LURvY3VtZW50IGNvbnRleHRzLgorICAgICAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAg
ICAgIGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5yZXBvcnRDdXJyZW50RXhjZXB0aW9u
KGV4ZWMpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFyZXR2YWwtPmlzVW5k
ZWZpbmVkT3JOdWxsKCkgJiYgZXZlbnQtPnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkpCiAgICAgICAg
ICAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHJldHZhbC0+dG9TdHJpbmcoZXhlYykpOwogICAg
ICAgICAgICAgaWYgKG1faXNJbmxpbmUpIHsKQEAgLTEyOSwyMyArMTQyLDIzIEBAIGJvb2wgSlNB
YnN0cmFjdEV2ZW50TGlzdGVuZXI6OmlzSW5saW5lKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIo
SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93LCBib29sIGlzSW5saW5lKQor
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpT
T2JqZWN0KiBsaXN0ZW5lciwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCBp
c0lubGluZSkKICAgICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGlzSW5saW5lKQogICAgICwg
bV9saXN0ZW5lcihsaXN0ZW5lcikKLSAgICAsIG1fd2luZG93KHdpbmRvdykKKyAgICAsIG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKICAgICBpZiAobV9saXN0ZW5lcikgewogICAgICAg
ICBKU0RPTVdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSW5s
aW5lCi0gICAgICAgICAgICA/IHdpbmRvdy0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVu
ZXJzKCkgOiB3aW5kb3ctPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOworICAgICAgICAg
ICAgPyBnbG9iYWxPYmplY3QtPmpzVW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVycygpIDog
Z2xvYmFsT2JqZWN0LT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgbGlz
dGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiB9CiAKIEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyOjp+SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoKQogewotICAgIGlmICht
X2xpc3RlbmVyICYmIG1fd2luZG93KSB7CisgICAgaWYgKG1fbGlzdGVuZXIgJiYgbV9nbG9iYWxP
YmplY3QpIHsKICAgICAgICAgSlNET01XaW5kb3c6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBs
aXN0ZW5lcnMgPSBpc0lubGluZSgpCi0gICAgICAgICAgICA/IG1fd2luZG93LT5qc1VucHJvdGVj
dGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luZG93LT5qc1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcnMoKTsKKyAgICAgICAgICAgID8gbV9nbG9iYWxPYmplY3QtPmpzVW5wcm90ZWN0ZWRJ
bmxpbmVFdmVudExpc3RlbmVycygpIDogbV9nbG9iYWxPYmplY3QtPmpzVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVycygpOwogICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKG1fbGlzdGVuZXIpOwogICAg
IH0KIH0KQEAgLTE1NSwxNCArMTY4LDE0IEBAIEpTT2JqZWN0KiBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcjo6bGkKICAgICByZXR1cm4gbV9saXN0ZW5lcjsKIH0KIAotSlNET01XaW5kb3cqIEpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjp3aW5kb3coKSBjb25zdAorSlNET01HbG9iYWxPYmpl
Y3QqIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpnbG9iYWxPYmplY3QoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3dpbmRvdzsKKyAgICByZXR1cm4gbV9nbG9iYWxPYmplY3Q7CiB9CiAKLXZv
aWQgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OmNsZWFyV2luZG93KCkKK3ZvaWQgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI6OmNsZWFyR2xvYmFsT2JqZWN0KCkKIHsKLSAgICBtX3dpbmRv
dyA9IDA7CisgICAgbV9nbG9iYWxPYmplY3QgPSAwOwogfQogCiB2b2lkIEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyOjptYXJrKCkKQEAgLTE3NywxNCArMTkwLDE0IEBAIHN0YXRpYyBXVEY6OlJl
ZkNvdW50ZWRMZWFrQ291bnRlciBldmVudEwKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0V2
ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lcihKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NV2lu
ZG93KiB3aW5kb3csIGJvb2wgaXNJbmxpbmUpCitKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0
ZW5lcihKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGJvb2wgaXNJbmxpbmUpCiAgICAgOiBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihpc0lubGluZSkK
ICAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBtX3dpbmRvdyh3aW5kb3cpCisgICAg
LCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKG1fbGlzdGVuZXIpIHsK
ICAgICAgICAgSlNET01XaW5kb3c6Okxpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNJbmxpbmUK
LSAgICAgICAgICAgID8gbV93aW5kb3ctPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2lu
ZG93LT5qc0V2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgICAgICA/IG1fZ2xvYmFsT2JqZWN0LT5q
c0lubGluZUV2ZW50TGlzdGVuZXJzKCkgOiBtX2dsb2JhbE9iamVjdC0+anNFdmVudExpc3RlbmVy
cygpOwogICAgICAgICBsaXN0ZW5lcnMuc2V0KG1fbGlzdGVuZXIsIHRoaXMpOwogICAgIH0KICNp
Zm5kZWYgTkRFQlVHCkBAIC0xOTQsOSArMjA3LDkgQEAgSlNFdmVudExpc3RlbmVyOjpKU0V2ZW50
TGlzdGVuZXIoSlNPYmplYwogCiBKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlzdGVuZXIoKQog
ewotICAgIGlmIChtX2xpc3RlbmVyICYmIG1fd2luZG93KSB7CisgICAgaWYgKG1fbGlzdGVuZXIg
JiYgbV9nbG9iYWxPYmplY3QpIHsKICAgICAgICAgSlNET01XaW5kb3c6Okxpc3RlbmVyc01hcCYg
bGlzdGVuZXJzID0gaXNJbmxpbmUoKQotICAgICAgICAgICAgPyBtX3dpbmRvdy0+anNJbmxpbmVF
dmVudExpc3RlbmVycygpIDogbV93aW5kb3ctPmpzRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAg
ICAgID8gbV9nbG9iYWxPYmplY3QtPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IG1fZ2xvYmFs
T2JqZWN0LT5qc0V2ZW50TGlzdGVuZXJzKCk7CiAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobV9s
aXN0ZW5lcik7CiAgICAgfQogI2lmbmRlZiBOREVCVUcKQEAgLTIwOSwyMCArMjIyLDIwIEBAIEpT
T2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6Omxpc3RlbmVyT2JqKCkKICAgICByZXR1cm4gbV9saXN0
ZW5lcjsKIH0KIAotSlNET01XaW5kb3cqIEpTRXZlbnRMaXN0ZW5lcjo6d2luZG93KCkgY29uc3QK
K0pTRE9NR2xvYmFsT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6Omdsb2JhbE9iamVjdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fd2luZG93OworICAgIHJldHVybiBtX2dsb2JhbE9iamVjdDsKIH0K
IAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmNsZWFyV2luZG93KCkKK3ZvaWQgSlNFdmVudExpc3Rl
bmVyOjpjbGVhckdsb2JhbE9iamVjdCgpCiB7Ci0gICAgbV93aW5kb3cgPSAwOworICAgIG1fZ2xv
YmFsT2JqZWN0ID0gMDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0xhenlFdmVudExp
c3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKExhenlFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTVdpbmRv
dyogd2luZG93LCBOb2RlKiBub2RlLCBpbnQgbGluZU51bWJlcikKLSAgICA6IEpTRXZlbnRMaXN0
ZW5lcigwLCB3aW5kb3csIHRydWUpCitKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExp
c3RlbmVyKExhenlFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBOb2RlKiBub2RlLCBpbnQgbGluZU51bWJlcikKKyAgICA6IEpTRXZlbnRMaXN0ZW5lcigwLCBn
bG9iYWxPYmplY3QsIHRydWUpCiAgICAgLCBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCiAg
ICAgLCBtX2NvZGUoY29kZSkKICAgICAsIG1fcGFyc2VkKGZhbHNlKQpAQCAtMjY5LDE5ICsyODIs
MjQgQEAgdm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogICAgIGlmICht
X3BhcnNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWUqIGZyYW1lID0gd2luZG93KCkt
PmltcGwoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAg
U2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gZnJhbWUtPnNjcmlwdCgpOwotICAgIGlmICghc2Ny
aXB0LT5pc0VuYWJsZWQoKSB8fCBzY3JpcHQtPmlzUGF1c2VkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBGcmFtZSogZnJhbWUgPSAwOworICAgIGlmIChnbG9iYWxPYmplY3QoKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgSlNET01XaW5kb3cqIHdp
bmRvdyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KCkpOworICAgICAg
ICBmcmFtZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWVk
ZWQgZm9yIG5vbi1Eb2N1bWVudCBjb250ZXh0cz8KKyAgICAgICAgU2NyaXB0Q29udHJvbGxlciog
c2NyaXB0ID0gZnJhbWUtPnNjcmlwdCgpOworICAgICAgICBpZiAoIXNjcmlwdC0+aXNFbmFibGVk
KCkgfHwgc2NyaXB0LT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAog
ICAgIG1fcGFyc2VkID0gdHJ1ZTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdygpLT5n
bG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKIAogICAgIEFyZ0xpc3QgYXJnczsKLSAgICBVU3RyaW5nIHNvdXJjZVVSTChmcmFt
ZS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpKTsKKyAgICBVU3RyaW5nIHNvdXJjZVVSTChnbG9i
YWxPYmplY3QoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CiAg
ICAgYXJncy5hcHBlbmQoZXZlbnRQYXJhbWV0ZXJOYW1lKG1fdHlwZSwgZXhlYykpOwogICAgIGFy
Z3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIG1fY29kZSkpOwogCkBAIC0zMTQsNyArMzMyLDcgQEAg
dm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogCiAgICAgaWYgKG1fbGlz
dGVuZXIpIHsKICAgICAgICAgQVNTRVJUKGlzSW5saW5lKCkpOwotICAgICAgICBKU0RPTVdpbmRv
dzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSB3aW5kb3coKS0+anNJbmxpbmVFdmVudExpc3Rl
bmVycygpOworICAgICAgICBKU0RPTVdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBn
bG9iYWxPYmplY3QoKS0+anNJbmxpbmVFdmVudExpc3RlbmVycygpOwogICAgICAgICBsaXN0ZW5l
cnMuc2V0KG1fbGlzdGVuZXIsIGNvbnN0X2Nhc3Q8SlNMYXp5RXZlbnRMaXN0ZW5lcio+KHRoaXMp
KTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHJl
dmlzaW9uIDM3OTk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgRXZlbnQ7Ci0gICAgY2xhc3MgSlNET01XaW5kb3c7CisgICAgY2xhc3MgSlNET01H
bG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTm9kZTsKIAogICAgIGNsYXNzIEpTQWJzdHJhY3RFdmVu
dExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewpAQCAtMzUsNyArMzUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCos
IGJvb2wgaXNXaW5kb3dFdmVudCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3Qg
PSAwOwotICAgICAgICB2aXJ0dWFsIEpTRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0ID0g
MDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoYm9v
bCBpc0lubGluZSkKQEAgLTQ5LDQzICs0OSw0MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZl
bnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBK
U0RPTVdpbmRvdyogd2luZG93LCBib29sIGlzSW5saW5lKQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxp
c3RlbmVyLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGlzSW5saW5lKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKGxpc3RlbmVyLCB3aW5kb3csIGlzSW5saW5lKSk7CisgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBn
bG9iYWxPYmplY3QsIGlzSW5saW5lKSk7CiAgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoKTsKIAogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmpl
Y3QqIGxpc3RlbmVyT2JqKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgSlNET01XaW5kb3cqIHdp
bmRvdygpIGNvbnN0OwotICAgICAgICB2b2lkIGNsZWFyV2luZG93KCk7CisgICAgICAgIHZpcnR1
YWwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0OworICAgICAgICB2b2lk
IGNsZWFyR2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIHZvaWQgbWFyaygpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNDOjpKU09iamVjdCogbGlz
dGVuZXIsIEpTRE9NV2luZG93KiwgYm9vbCBpc0lubGluZSk7CisgICAgICAgIEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTUdsb2JhbE9iamVj
dCosIGJvb2wgaXNJbmxpbmUpOwogCiAgICAgICAgIEpTQzo6SlNPYmplY3QqIG1fbGlzdGVuZXI7
Ci0gICAgICAgIEpTRE9NV2luZG93KiBtX3dpbmRvdzsKKyAgICAgICAgSlNET01HbG9iYWxPYmpl
Y3QqIG1fZ2xvYmFsT2JqZWN0OwogICAgIH07CiAKICAgICBjbGFzcyBKU0V2ZW50TGlzdGVuZXIg
OiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBjcmVhdGUoSlNDOjpKU09iamVjdCog
bGlzdGVuZXIsIEpTRE9NV2luZG93KiB3aW5kb3csIGJvb2wgaXNJbmxpbmUpCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxp
c3RlbmVyLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGlzSW5saW5lKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTRXZlbnRMaXN0ZW5l
cihsaXN0ZW5lciwgd2luZG93LCBpc0lubGluZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGdsb2JhbE9iamVjdCwgaXNJbmxpbmUp
KTsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5KU0V2ZW50TGlzdGVuZXIoKTsKIAogICAg
ICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgSlNET01XaW5kb3cqIHdpbmRvdygpIGNvbnN0OwotICAgICAgICB2b2lkIGNsZWFy
V2luZG93KCk7CisgICAgICAgIHZpcnR1YWwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCgpIGNvbnN0OworICAgICAgICB2b2lkIGNsZWFyR2xvYmFsT2JqZWN0KCk7CiAKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwg
SlNET01XaW5kb3cqLCBib29sIGlzSW5saW5lKTsKKyAgICAgICAgSlNFdmVudExpc3RlbmVyKEpT
Qzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTUdsb2JhbE9iamVjdCosIGJvb2wgaXNJbmxpbmUp
OwogCiAgICAgICAgIG11dGFibGUgSlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU09iamVjdD4gbV9s
aXN0ZW5lcjsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTRE9N
V2luZG93PiBtX3dpbmRvdzsKKyAgICAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNET01HbG9iYWxP
YmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIH07CiAKICAgICBjbGFzcyBKU0xhenlFdmVudExp
c3RlbmVyIDogcHVibGljIEpTRXZlbnRMaXN0ZW5lciB7CkBAIC05OSwxNCArOTksMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1h
cmt1cCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoTGF6eUV2ZW50TGlzdGVuZXJUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEpTRE9NV2lu
ZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGludCBsaW5lTnVtYmVyKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoTGF6eUV2ZW50TGlzdGVuZXJU
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vZGUqIG5vZGUsIGludCBsaW5lTnVt
YmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTTGF6eUV2
ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb25OYW1lLCBjb2RlLCB3aW5kb3csIG5vZGUsIGxpbmVO
dW1iZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNMYXp5RXZlbnRMaXN0
ZW5lcih0eXBlLCBmdW5jdGlvbk5hbWUsIGNvZGUsIGdsb2JhbE9iamVjdCwgbm9kZSwgbGluZU51
bWJlcikpOwogICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogbGlzdGVu
ZXJPYmooKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNMYXp5RXZlbnRMaXN0
ZW5lcihMYXp5RXZlbnRMaXN0ZW5lclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFN0cmluZyYgY29kZSwgSlNET01XaW5kb3cqLCBOb2RlKiwgaW50IGxpbmVOdW1i
ZXIpOworICAgICAgICBKU0xhenlFdmVudExpc3RlbmVyKExhenlFdmVudExpc3RlbmVyVHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RP
TUdsb2JhbE9iamVjdCosIE5vZGUqLCBpbnQgbGluZU51bWJlcik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIHBhcnNlQ29kZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNzk5NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNs
dWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgpAQCAtNjcs
MTggKzY3LDE4IEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6bWFyaygpCiAKIEpTVmFsdWUqIEpTTWVz
c2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7CiAgICAgY29uc3QgVVN0cmluZyYgbWVzc2FnZSA9IGFyZ3MuYXQo
ZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgaW1wbCgp
LT5zdGFydENvbnZlcnNhdGlvbih3aW5kb3ctPmRvY3VtZW50KCksIG1lc3NhZ2UpLmdldCgpKTsK
KyAgICByZXR1cm4gdG9KUyhleGVjLCBpbXBsKCktPnN0YXJ0Q29udmVyc2F0aW9uKGdsb2JhbE9i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtZXNzYWdlKS5nZXQoKSk7CiB9CiAKIEpT
VmFsdWUqIEpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+YXNzb2Np
YXRlZEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSB0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSk7CisgICAgUmVmUHRyPEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRlSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSk7CiAgICAgaWYgKCFs
aXN0ZW5lcikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5hZGRF
dmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lci5y
ZWxlYXNlKCksIGFyZ3MuYXQoZXhlYywgMiktPnRvQm9vbGVhbihleGVjKSk7CkBAIC04NywxMCAr
ODcsMTAgQEAgSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcgogCiBKU1Zh
bHVlKiBKU01lc3NhZ2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmFzc29j
aWF0ZWRGcmFtZSgpOwotICAgIGlmICghZnJhbWUpCisgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSB0b0pT
RE9NV2luZG93KGZyYW1lKS0+ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFy
Z3MuYXQoZXhlYywgMSkpOworICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IGdsb2JhbE9iamVjdC0+ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFy
Z3MuYXQoZXhlYywgMSkpOwogICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMs
IDApLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3MuYXQoZXhlYywgMiktPnRvQm9vbGVh
bihleGVjKSk7CkBAIC0xMDAsMTAgKzEwMCwxMCBAQCBKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0Ojpy
ZW1vdmVFdmVudExpc3RlCiAKIHZvaWQgSlNNZXNzYWdlUG9ydDo6c2V0T25tZXNzYWdlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgp
LT5hc3NvY2lhdGVkRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQorICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJu
OwotICAgIGltcGwoKS0+c2V0T25tZXNzYWdlKHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JD
cmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOworICAg
IGltcGwoKS0+c2V0T25tZXNzYWdlKGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRlSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRydWUpKTsKIH0KIAogSlNWYWx1ZSogSlNN
ZXNzYWdlUG9ydDo6b25tZXNzYWdlKEV4ZWNTdGF0ZSopIGNvbnN0CkBAIC0xMTYsMTAgKzExNiwx
MCBAQCBKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0Ojpvbm1lc3NhZ2UoRXhlY1N0CiAKIHZvaWQgSlNN
ZXNzYWdlUG9ydDo6c2V0T25jbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQog
ewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+YXNzb2NpYXRlZEZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUds
b2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKLSAgICBpbXBsKCktPnNldE9uY2xvc2UodG9K
U0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KGV4ZWMsIHZhbHVlLCB0cnVlKSk7CisgICAgaW1wbCgpLT5zZXRPbmNsb3NlKGdsb2JhbE9iamVj
dC0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRy
dWUpKTsKIH0KIAogSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6b25jbG9zZShFeGVjU3RhdGUqKSBj
b25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24772</attachid>
            <date>2008-10-30 09:33:32 -0700</date>
            <delta_ts>2008-10-30 11:44:52 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>ListenersToGlobalObject.txt</filename>
            <type>text/plain</type>
            <size>37752</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODAwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDgtMTAtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk3MAorICAgICAgICBN
YWtlIE1lc3NhZ2VQb3J0IGV2ZW50IGRpc3BhdGNoIHdvcmsgaW4gd29ya2VycworCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0RGF0YTo6SlNET01HbG9iYWxPYmpl
Y3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9i
YWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU0V2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmZpbmRP
ckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9i
amVjdDo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6anNFdmVudExpc3RlbmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6anNJbmxpbmVFdmVudExp
c3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6anNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0
Ojpqc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01HbG9iYWxPYmplY3Q6OnNldEN1cnJlbnRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTUdsb2JhbE9iamVjdDo6Y3VycmVudEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNE
T01HbG9iYWxPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlRGF0YTo6SlNET01XaW5k
b3dCYXNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6On5KU0RPTVdp
bmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjbGVhckhlbHBl
ck9iamVjdFByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oOgorICAgICAgICBNb3ZlZCBldmVudCBsaXN0ZW5lciB0cmFja2luZyBmcm9tIEpTRE9NV2lu
ZG93IHRvIEpTRE9NR2xvYmFsT2JqZWN0LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6On5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Z2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjbGVhckds
b2JhbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpnbG9iYWxPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpjbGVhckdsb2JhbE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgIENoYW5nZWQgdG8gdXNlIEpTRE9NR2xvYmFs
T2JqZWN0IGFuZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQ
b3J0OjpzdGFydENvbnZlcnNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0
OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6c2V0
T25tZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnNldE9uY2xvc2Up
OgorICAgICAgICBVcGRhdGVkIGJpbmRpbmdzIHRvIHdvcmsgd2l0aCBKU0RPTUdsb2JhbE9iamVj
dC4gTmV4dCBzdGVwIGlzIHRvIG1ha2UgY29kZSBnZW5lcmF0b3IgZW1pdAorICAgICAgICBzdWNo
IGNvZGUsIGFuZCBzdG9wIHVzaW5nIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBKU01lc3Nh
Z2VQb3J0IGlubGluZSBldmVudCBoYW5kbGVyCisgICAgICAgIGdldHRlcnMgYW5kIHNldHRlcnMu
CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVybCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgRXhwb3NlIHVybCgpIG1ldGhvZCBvbiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0IChuZWNlc3NhcnkgZm9yIGNvbXBpbGluZyBzY3JpcHRzIGluCisg
ICAgICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIpLgorCiAyMDA4LTEwLTMwICBEaXJrIFNjaHVsemUg
IDx2YnM4NUBnbXguZGU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxwIFRva2VyLgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDM3OTk2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDE1ICsyNyw0OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorSlNET01HbG9iYWxPYmplY3Q6
OkpTRE9NR2xvYmFsT2JqZWN0RGF0YTo6SlNET01HbG9iYWxPYmplY3REYXRhKCkKKyAgICA6IGV2
dCgwKQoreworfQorCiBKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9i
YWxPYmplY3REYXRhKiBkYXRhLCBKU09iamVjdCogdGhpc1ZhbHVlKQogICAgIDogSlNHbG9iYWxP
YmplY3Qoc3RydWN0dXJlLCBkYXRhLCB0aGlzVmFsdWUpCiB7CiB9CiAKK0pTRE9NR2xvYmFsT2Jq
ZWN0Ojp+SlNET01HbG9iYWxPYmplY3QoKQoreworICAgIC8vIENsZWFyIGFueSBiYWNrcG9pbnRl
cnMgdG8gdGhlIHdpbmRvdworICAgIExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaTIgPSBkKCktPmpz
RXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKKyAgICBMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGUyID0g
ZCgpLT5qc0V2ZW50TGlzdGVuZXJzLmVuZCgpOworICAgIGZvciAoOyBpMiAhPSBlMjsgKytpMikK
KyAgICAgICAgaTItPnNlY29uZC0+Y2xlYXJHbG9iYWxPYmplY3QoKTsKKworICAgIGkyID0gZCgp
LT5qc0lubGluZUV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CisgICAgZTIgPSBkKCktPmpzSW5saW5l
RXZlbnRMaXN0ZW5lcnMuZW5kKCk7CisgICAgZm9yICg7IGkyICE9IGUyOyArK2kyKQorICAgICAg
ICBpMi0+c2Vjb25kLT5jbGVhckdsb2JhbE9iamVjdCgpOworCisgICAgVW5wcm90ZWN0ZWRMaXN0
ZW5lcnNNYXA6Oml0ZXJhdG9yIGkxID0gZCgpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMu
YmVnaW4oKTsKKyAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcDo6aXRlcmF0b3IgZTEgPSBkKCkt
PmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycy5lbmQoKTsKKyAgICBmb3IgKDsgaTEgIT0gZTE7
ICsraTEpCisgICAgICAgIGkxLT5zZWNvbmQtPmNsZWFyR2xvYmFsT2JqZWN0KCk7CisKKyAgICBp
MSA9IGQoKS0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CisgICAg
ZTEgPSBkKCktPmpzVW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVycy5lbmQoKTsKKyAgICBm
b3IgKDsgaTEgIT0gZTE7ICsraTEpCisgICAgICAgIGkxLT5zZWNvbmQtPmNsZWFyR2xvYmFsT2Jq
ZWN0KCk7Cit9CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6Om1hcmsoKQogewogICAgIEJhc2U6
Om1hcmsoKTsKQEAgLTUxLDQgKzg0LDg1IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6Om1hcmso
KQogICAgIH0KIH0KIAorSlNFdmVudExpc3RlbmVyKiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZEpT
RXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCit7CisgICAgaWYgKCF2
YWwtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhc09iamVjdCh2YWwpOworICAgIExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNJbmxpbmUg
PyBkKCktPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMgOiBkKCktPmpzRXZlbnRMaXN0ZW5lcnM7Cisg
ICAgcmV0dXJuIGxpc3RlbmVycy5nZXQob2JqZWN0KTsKK30KKworUGFzc1JlZlB0cjxKU0V2ZW50
TGlzdGVuZXI+IEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCit7CisgICAgaWYg
KEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNFdmVudExpc3RlbmVyKHZhbCwgaXNJ
bmxpbmUpKQorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisKKyAgICBpZiAoIXZhbC0+aXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBUaGUgSlNFdmVudExpc3RlbmVyIGNv
bnN0cnVjdG9yIGFkZHMgaXQgdG8gb3VyIGpzRXZlbnRMaXN0ZW5lcnMgbWFwLgorICAgIHJldHVy
biBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdCh2YWwpLCB0aGlzLCBpc0lubGluZSku
Z2V0KCk7Cit9CisKK0pTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBKU0RPTUdsb2JhbE9iamVj
dDo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsLCBib29sIGlzSW5saW5lKQoreworICAgIGlmICghdmFsLT5pc09iamVjdCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMg
PSBpc0lubGluZSA/IGQoKS0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzIDogZCgp
LT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7CisgICAgcmV0dXJuIGxpc3RlbmVycy5nZXQo
YXNPYmplY3QodmFsKSk7Cit9CisKK1Bhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXI+IEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbCwgYm9vbCBpc0lubGluZSkKK3sKKyAg
ICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmluZEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbCwgaXNJbmxpbmUpKQorICAgICAgICByZXR1cm4g
bGlzdGVuZXI7CisKKyAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBUaGUgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgY29uc3RydWN0b3IgYWRk
cyBpdCB0byBvdXIganNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzIG1hcC4KKyAgICByZXR1cm4g
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdCh2YWwpLCB0aGlzLCBp
c0lubGluZSkuZ2V0KCk7Cit9CisKK0pTRE9NR2xvYmFsT2JqZWN0OjpMaXN0ZW5lcnNNYXAmIEpT
RE9NR2xvYmFsT2JqZWN0Ojpqc0V2ZW50TGlzdGVuZXJzKCkKK3sKKyAgICByZXR1cm4gZCgpLT5q
c0V2ZW50TGlzdGVuZXJzOworfQorCitKU0RPTUdsb2JhbE9iamVjdDo6TGlzdGVuZXJzTWFwJiBK
U0RPTUdsb2JhbE9iamVjdDo6anNJbmxpbmVFdmVudExpc3RlbmVycygpCit7CisgICAgcmV0dXJu
IGQoKS0+anNJbmxpbmVFdmVudExpc3RlbmVyczsKK30KKworSlNET01HbG9iYWxPYmplY3Q6OlVu
cHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBKU0RPTUdsb2JhbE9iamVjdDo6anNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXJzKCkKK3sKKyAgICByZXR1cm4gZCgpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcnM7Cit9CisKK0pTRE9NR2xvYmFsT2JqZWN0OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYg
SlNET01HbG9iYWxPYmplY3Q6OmpzVW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVycygpCit7
CisgICAgcmV0dXJuIGQoKS0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzOworfQor
Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZlbnQqIGV2dCkKK3sK
KyAgICBkKCktPmV2dCA9IGV2dDsKK30KKworRXZlbnQqIEpTRE9NR2xvYmFsT2JqZWN0OjpjdXJy
ZW50RXZlbnQoKQoreworICAgIHJldHVybiBkKCktPmV2dDsKK30KKworSlNET01HbG9iYWxPYmpl
Y3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkKK3sKKyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1
bWVudCgpKQorICAgICAgICByZXR1cm4gdG9KU0RPTVdpbmRvdyhzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5mcmFtZSgpKTsKKworICAgIC8vIE5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDM3
OTk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNs
YXNzIEV2ZW50OworICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiwgUmVmUHRyPEpTQzo6
U3RydWN0dXJlSUQ+ID4gSlNET01TdHJ1Y3R1cmVNYXA7CkBAIC0zOSwxMiArNDIsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0IDogcHVibGljIEpT
Qzo6SlNHbG9iYWxPYmplY3QgewogICAgICAgICB0eXBlZGVmIEpTQzo6SlNHbG9iYWxPYmplY3Qg
QmFzZTsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0cnVjdCBKU0RPTUdsb2JhbE9iamVjdERh
dGEgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3REYXRhIHsKLSAg
ICAgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwIHN0cnVjdHVyZXM7Ci0gICAgICAgICAgICBKU0RP
TUNvbnN0cnVjdG9yTWFwIGNvbnN0cnVjdG9yczsKLSAgICAgICAgfTsKKyAgICAgICAgc3RydWN0
IEpTRE9NR2xvYmFsT2JqZWN0RGF0YTsKIAogICAgICAgICBKU0RPTUdsb2JhbE9iamVjdChQYXNz
UmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+LCBKU0RPTUdsb2JhbE9iamVjdERhdGEqLCBKU0M6OkpT
T2JqZWN0KiB0aGlzVmFsdWUpOworICAgICAgICB2aXJ0dWFsIH5KU0RPTUdsb2JhbE9iamVjdCgp
OwogCiAgICAgcHVibGljOgogICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcygp
IHsgcmV0dXJuIGQoKS0+c3RydWN0dXJlczsgfQpAQCAtNTIsOCArNTMsNDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0ID0gMDsKIAorICAgICAgICAvLyBGaW5kcyBhIHdy
YXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8gZXhpc3Rpbmcgb25l
LgorICAgICAgICBKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU1Zh
bHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKworICAgICAgICAvLyBGaW5kcyBvciBjcmVh
dGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50TGlzdGVuZXIgb2Jq
ZWN0IGlzIEdDLXByb3RlY3RlZC4KKyAgICAgICAgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+
IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSosIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7CisKKyAgICAgICAgLy8gRmluZHMgYSB3cmFwcGVy
IG9mIGEgR0MtdW5wcm90ZWN0ZWQgSlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4
aXN0aW5nIG9uZS4KKyAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGZpbmRKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSosIGJv
b2wgaXNJbmxpbmUgPSBmYWxzZSk7CisKKyAgICAgICAgLy8gRmluZHMgb3IgY3JlYXRlcyBhIHdy
YXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLiBKUyBFdmVudExpc3RlbmVyIG9iamVjdCBpcyAq
Tk9UKiBHQy1wcm90ZWN0ZWQuCisgICAgICAgIFBhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKworICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIEpTRXZlbnRMaXN0ZW5lcio+IExpc3Rl
bmVyc01hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcio+IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwOworCisgICAgICAg
IExpc3RlbmVyc01hcCYganNFdmVudExpc3RlbmVycygpOworICAgICAgICBMaXN0ZW5lcnNNYXAm
IGpzSW5saW5lRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNN
YXAmIGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOworICAgICAgICBVbnByb3RlY3RlZExp
c3RlbmVyc01hcCYganNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzKCk7CisKKyAgICAg
ICAgdm9pZCBzZXRDdXJyZW50RXZlbnQoRXZlbnQqKTsKKyAgICAgICAgRXZlbnQqIGN1cnJlbnRF
dmVudCgpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIHN0cnVjdCBKU0RPTUdsb2JhbE9iamVjdERhdGEgOiBwdWJsaWMgSlNDOjpKU0ds
b2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3REYXRhIHsKKyAgICAgICAgICAgIEpTRE9NR2xvYmFs
T2JqZWN0RGF0YSgpOworCisgICAgICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCBzdHJ1Y3R1cmVz
OworICAgICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck1hcCBjb25zdHJ1Y3RvcnM7CisKKyAgICAg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpMaXN0ZW5lcnNNYXAganNFdmVudExpc3RlbmVyczsK
KyAgICAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpMaXN0ZW5lcnNNYXAganNJbmxpbmVFdmVu
dExpc3RlbmVyczsKKyAgICAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpVbnByb3RlY3RlZExp
c3RlbmVyc01hcCBqc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7CisgICAgICAgICAgICBKU0RP
TUdsb2JhbE9iamVjdDo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnByb3RlY3RlZElubGlu
ZUV2ZW50TGlzdGVuZXJzOworCisgICAgICAgICAgICBFdmVudCogZXZ0OworICAgICAgICB9Owor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNET01HbG9iYWxPYmplY3REYXRhKiBkKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3REYXRhKj4oSlNDOjpKU1Zhcmlh
YmxlT2JqZWN0OjpkKTsgfQogICAgIH07CkBAIC03OSw2ICsxMTgsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAKKyAgICBKU0RPTUds
b2JhbE9iamVjdCogdG9KU0RPTUdsb2JhbE9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEpTRE9NR2xvYmFsT2JqZWN0
X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9u
IDM3OTk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDYgQEAgY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93
QmFzZTo6c19pbmZvIAogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZURhdGE6OkpT
RE9NV2luZG93QmFzZURhdGEoUGFzc1JlZlB0cjxET01XaW5kb3c+IHdpbmRvdywgSlNET01XaW5k
b3dTaGVsbCogc2hlbGwpCiAgICAgOiBpbXBsKHdpbmRvdykKLSAgICAsIGV2dCgwKQogICAgICwg
cmV0dXJuVmFsdWVTbG90KDApCiAgICAgLCBzaGVsbChzaGVsbCkKIHsKQEAgLTIwMCwyNyArMTk5
LDYgQEAgSlNET01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKCkKICAgICAgICAgZCgpLT5p
bXBsLT5mcmFtZSgpLT5zY3JpcHQoKS0+Y2xlYXJGb3JtZXJXaW5kb3coYXNKU0RPTVdpbmRvdyh0
aGlzKSk7CiAKICAgICBjbGVhckFsbFRpbWVvdXRzKCk7Ci0KLSAgICAvLyBDbGVhciBhbnkgYmFj
a3BvaW50ZXJzIHRvIHRoZSB3aW5kb3cKLSAgICBMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGkyID0g
ZCgpLT5qc0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7Ci0gICAgTGlzdGVuZXJzTWFwOjppdGVyYXRv
ciBlMiA9IGQoKS0+anNFdmVudExpc3RlbmVycy5lbmQoKTsKLSAgICBmb3IgKDsgaTIgIT0gZTI7
ICsraTIpCi0gICAgICAgIGkyLT5zZWNvbmQtPmNsZWFyV2luZG93KCk7Ci0KLSAgICBpMiA9IGQo
KS0+anNJbmxpbmVFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGUyID0gZCgpLT5qc0lubGlu
ZUV2ZW50TGlzdGVuZXJzLmVuZCgpOwotICAgIGZvciAoOyBpMiAhPSBlMjsgKytpMikKLSAgICAg
ICAgaTItPnNlY29uZC0+Y2xlYXJXaW5kb3coKTsKLQotICAgIFVucHJvdGVjdGVkTGlzdGVuZXJz
TWFwOjppdGVyYXRvciBpMSA9IGQoKS0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzLmJlZ2lu
KCk7Ci0gICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGUxID0gZCgpLT5qc1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMuZW5kKCk7Ci0gICAgZm9yICg7IGkxICE9IGUxOyArK2kx
KQotICAgICAgICBpMS0+c2Vjb25kLT5jbGVhcldpbmRvdygpOwotCi0gICAgaTEgPSBkKCktPmpz
VW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGUxID0gZCgpLT5q
c1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMuZW5kKCk7Ci0gICAgZm9yICg7IGkxICE9
IGUxOyArK2kxKQotICAgICAgICBpMS0+c2Vjb25kLT5jbGVhcldpbmRvdygpOwogfQogCiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTVdpbmRvd0Jhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdApAQCAtNzM2LDUxICs3MTQsOSBAQCBib29sIEpTRE9NV2luZG93QmFzZTo6c2hv
dWxkSW50ZXJydXB0U2NyCiAgICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpLT5zaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCk7CiB9CiAKLUpTRXZlbnRMaXN0ZW5lciogSlNET01XaW5kb3dCYXNlOjpm
aW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWUqIHZhbCwgYm9vbCBpc0lubGluZSkKLXsKLSAgICBp
ZiAoIXZhbC0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHZhbCk7Ci0gICAgTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0lu
bGluZSA/IGQoKS0+anNJbmxpbmVFdmVudExpc3RlbmVycyA6IGQoKS0+anNFdmVudExpc3RlbmVy
czsKLSAgICByZXR1cm4gbGlzdGVuZXJzLmdldChvYmplY3QpOwotfQotCi1QYXNzUmVmUHRyPEpT
RXZlbnRMaXN0ZW5lcj4gSlNET01XaW5kb3dCYXNlOjpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCi17Ci0gICAg
aWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNFdmVudExpc3RlbmVyKHZhbCwg
aXNJbmxpbmUpKQotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0KLSAgICBpZiAoIXZhbC0+aXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgSlNFdmVudExpc3RlbmVy
IGNvbnN0cnVjdG9yIGFkZHMgaXQgdG8gb3VyIGpzRXZlbnRMaXN0ZW5lcnMgbWFwLgotICAgIHJl
dHVybiBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdCh2YWwpLCBzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvdyo+KHRoaXMpLCBpc0lubGluZSkuZ2V0KCk7Ci19Ci0KLUpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKiBKU0RPTVdpbmRvd0Jhc2U6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbCwgYm9vbCBpc0lubGluZSkKLXsKLSAg
ICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBVbnByb3Rl
Y3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNJbmxpbmUgPyBkKCktPmpzVW5wcm90ZWN0
ZWRJbmxpbmVFdmVudExpc3RlbmVycyA6IGQoKS0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJz
OwotICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KGFzT2JqZWN0KHZhbCkpOwotfQotCi1QYXNzUmVm
UHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBKU0RPTVdpbmRvd0Jhc2U6OmZpbmRPckNy
ZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
dmFsLCBib29sIGlzSW5saW5lKQotewotICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFsLCBp
c0lubGluZSkpCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLQotICAgIGlmICghdmFsLT5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFRoZSBKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRzIGl0IHRvIG91ciBqc1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcnMgbWFwLgotICAgIHJldHVybiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KHZhbCksIHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGlzSW5s
aW5lKS5nZXQoKTsKLX0KLQogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmNsZWFySGVscGVyT2JqZWN0
UHJvcGVydGllcygpCiB7Ci0gICAgZCgpLT5ldnQgPSAwOworICAgIHNldEN1cnJlbnRFdmVudCgw
KTsKIH0KIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmNsZWFyKCkKQEAgLTc5NCwxNiArNzMwLDYg
QEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmNsZWFyKCkKICAgICBjbGVhckhlbHBlck9iamVjdFBy
b3BlcnRpZXMoKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnNldEN1cnJlbnRFdmVudChF
dmVudCogZXZ0KQotewotICAgIGQoKS0+ZXZ0ID0gZXZ0OwotfQotCi1FdmVudCogSlNET01XaW5k
b3dCYXNlOjpjdXJyZW50RXZlbnQoKQotewotICAgIHJldHVybiBkKCktPmV2dDsKLX0KLQogSlNP
YmplY3QqIEpTRE9NV2luZG93QmFzZTo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHNoZWxsKCk7CkBAIC0xMDU3LDI2ICs5ODMsNiBAQCB2b2lkIEpTRE9NV2lu
ZG93QmFzZTo6ZGlzY29ubmVjdEZyYW1lKCkKICAgICBjbGVhckFsbFRpbWVvdXRzKCk7CiB9CiAK
LUpTRE9NV2luZG93QmFzZTo6TGlzdGVuZXJzTWFwJiBKU0RPTVdpbmRvd0Jhc2U6OmpzRXZlbnRM
aXN0ZW5lcnMoKQotewotICAgIHJldHVybiBkKCktPmpzRXZlbnRMaXN0ZW5lcnM7Ci19Ci0KLUpT
RE9NV2luZG93QmFzZTo6TGlzdGVuZXJzTWFwJiBKU0RPTVdpbmRvd0Jhc2U6OmpzSW5saW5lRXZl
bnRMaXN0ZW5lcnMoKQotewotICAgIHJldHVybiBkKCktPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnM7
Ci19Ci0KLUpTRE9NV2luZG93QmFzZTo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIEpTRE9NV2lu
ZG93QmFzZTo6anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCkKLXsKLSAgICByZXR1cm4gZCgp
LT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7Ci19Ci0KLUpTRE9NV2luZG93QmFzZTo6VW5w
cm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIEpTRE9NV2luZG93QmFzZTo6anNVbnByb3RlY3RlZElubGlu
ZUV2ZW50TGlzdGVuZXJzKCkKLXsKLSAgICByZXR1cm4gZCgpLT5qc1VucHJvdGVjdGVkSW5saW5l
RXZlbnRMaXN0ZW5lcnM7Ci19Ci0KIHZvaWQgRE9NV2luZG93VGltZXI6OmZpcmVkKCkKIHsKICAg
ICB0aW1lck5lc3RpbmdMZXZlbCA9IG1fbmVzdGluZ0xldmVsOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzNzk5NikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDM0ICs3NiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKERPTVdpbmRv
d1RpbWVyKik7CiAKLSAgICAgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0
ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAgICAgICAgSlNFdmVudExpc3Rl
bmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTQzo6SlNWYWx1ZSosIGJvb2wgaXNJbmxpbmUgPSBm
YWxzZSk7Ci0KLSAgICAgICAgLy8gRmluZHMgb3IgY3JlYXRlcyBhIHdyYXBwZXIgb2YgYSBKUyBF
dmVudExpc3RlbmVyLiBKUyBFdmVudExpc3RlbmVyIG9iamVjdCBpcyBHQy1wcm90ZWN0ZWQuCi0g
ICAgICAgIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVKU0V2ZW50TGlz
dGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFs
c2UpOwotCi0gICAgICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEdDLXVucHJvdGVjdGVkIEpT
IEV2ZW50TGlzdGVuZXIsIHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUuCi0gICAgICAgIEpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFsc2UpOwot
Ci0gICAgICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0
ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMgKk5PVCogR0MtcHJvdGVjdGVkLgotICAg
ICAgICBQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSos
IGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7Ci0KICAgICAgICAgdm9pZCBjbGVhcigpOwogCi0gICAg
ICAgIHZvaWQgc2V0Q3VycmVudEV2ZW50KEV2ZW50Kik7Ci0gICAgICAgIEV2ZW50KiBjdXJyZW50
RXZlbnQoKTsKLQogICAgICAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJu
IHZhbHVlIHdoZW4gdGhlIHdpbmRvdyBpcyBjbGVhcmVkLgogICAgICAgICB2b2lkIHNldFJldHVy
blZhbHVlU2xvdChKU0M6OkpTVmFsdWUqKiBzbG90KTsKIAotICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8SlNDOjpKU09iamVjdCosIEpTRXZlbnRMaXN0ZW5lcio+IExpc3RlbmVyc01hcDsKLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcio+IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwOwotCi0gICAgICAgIExpc3RlbmVyc01hcCYg
anNFdmVudExpc3RlbmVycygpOwotICAgICAgICBMaXN0ZW5lcnNNYXAmIGpzSW5saW5lRXZlbnRM
aXN0ZW5lcnMoKTsKLSAgICAgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGpzVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVycygpOwotICAgICAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcCYganNV
bnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzKCk7Ci0KICAgICAgICAgdmlydHVhbCBjb25z
dCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQog
ICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCkBAIC0xMzUsMTEg
KzExMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAgICAgUmVmUHRyPERPTVdp
bmRvdz4gaW1wbDsKIAotICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlOjpMaXN0ZW5lcnNNYXAg
anNFdmVudExpc3RlbmVyczsKLSAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZTo6TGlzdGVuZXJz
TWFwIGpzSW5saW5lRXZlbnRMaXN0ZW5lcnM7Ci0gICAgICAgICAgICBKU0RPTVdpbmRvd0Jhc2U6
OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyczsKLSAg
ICAgICAgICAgIEpTRE9NV2luZG93QmFzZTo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnBy
b3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzOwotICAgICAgICAgICAgRXZlbnQqIGV2dDsKICAg
ICAgICAgICAgIEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsKICAgICAgICAgICAgIEpT
RE9NV2luZG93U2hlbGwqIHNoZWxsOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAzNzk5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjMgKzUzLDM0IEBAIHZvaWQg
SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KICAgICBpZiAoIWxpc3RlbmVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdGhpcy0+d2luZG93
KCk7Ci0gICAgLy8gTnVsbCBjaGVjayBhcyBjbGVhcldpbmRvdygpIGNhbiBjbGVhciB0aGlzIGFu
ZCB3ZSBzdGlsbCBnZXQgY2FsbGVkIGJhY2sgYnkKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgLy8gTnVsbCBjaGVjayBhcyBj
bGVhckdsb2JhbE9iamVjdCgpIGNhbiBjbGVhciB0aGlzIGFuZCB3ZSBzdGlsbCBnZXQgY2FsbGVk
IGJhY2sgYnkKICAgICAvLyB4bWxodHRwcmVxdWVzdCBvYmplY3RzLiBTZWUgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNzUKLSAgICBpZiAoIXdpbmRvdykKKyAgICAv
LyBGSVhNRTogSXMgdGhpcyBjaGVjayBzdGlsbCBuZWNlc3Nhcnk/IFJlcXVlc3RzIGFyZSBzdXBw
b3NlZCB0byBiZSBzdG9wcGVkIGJlZm9yZSBjbGVhckdsb2JhbE9iamVjdCgpIGlzIGNhbGxlZC4K
KyAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFt
ZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICAvLyBUaGUgd2luZG93IG11c3Qgc3RpbGwgYmUgYWN0aXZlIGluIGl0cyBmcmFt
ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjE+Lgot
ICAgIC8vIEZJWE1FOiBBIGJldHRlciBmaXggZm9yIHRoaXMgbWF5IGJlIHRvIGNoYW5nZSBETU9X
aW5kb3c6OmZyYW1lKCkgdG8gbm90IHJldHVybiBhIGZyYW1lIHRoZSBkZXRhY2hlZCB3aW5kb3cg
dXNlZCB0byBiZSBpbi4KLSAgICBpZiAoZnJhbWUtPmRvbVdpbmRvdygpICE9IHdpbmRvdy0+aW1w
bCgpKQotICAgICAgICByZXR1cm47Ci0gICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gZnJh
bWUtPnNjcmlwdCgpOwotICAgIGlmICghc2NyaXB0LT5pc0VuYWJsZWQoKSB8fCBzY3JpcHQtPmlz
UGF1c2VkKCkpCisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBGcmFtZSogZnJhbWUgPSAwOwor
ICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+ZnJhbWUoKTsKKyAgICAgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gVGhlIHdpbmRvdyBt
dXN0IHN0aWxsIGJlIGFjdGl2ZSBpbiBpdHMgZnJhbWUuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTIxPi4KKyAgICAgICAgLy8gRklYTUU6IEEgYmV0dGVy
IGZpeCBmb3IgdGhpcyBtYXkgYmUgdG8gY2hhbmdlIERPTVdpbmRvdzo6ZnJhbWUoKSB0byBub3Qg
cmV0dXJuIGEgZnJhbWUgdGhlIGRldGFjaGVkIHdpbmRvdyB1c2VkIHRvIGJlIGluLgorICAgICAg
ICBpZiAoZnJhbWUtPmRvbVdpbmRvdygpICE9IHdpbmRvdy0+aW1wbCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWVkZWQgZm9yIG90aGVy
IGNvbnRleHRzPworICAgICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHQgPSBmcmFtZS0+c2Ny
aXB0KCk7CisgICAgICAgIGlmICghc2NyaXB0LT5pc0VuYWJsZWQoKSB8fCBzY3JpcHQtPmlzUGF1
c2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBKU1ZhbHVlKiBoYW5kbGVFdmVu
dEZ1bmN0aW9uID0gbGlzdGVuZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVF
dmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTg1LDI5ICs5NiwzMSBAQCB2b2lk
IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAgICAgICAgIEFyZ0xpc3QgYXJn
czsKICAgICAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBldmVudCkpOwogCi0gICAgICAgIEV2
ZW50KiBzYXZlZEV2ZW50ID0gd2luZG93LT5jdXJyZW50RXZlbnQoKTsKLSAgICAgICAgd2luZG93
LT5zZXRDdXJyZW50RXZlbnQoZXZlbnQpOworICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IGds
b2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3Vy
cmVudEV2ZW50KGV2ZW50KTsKIAogICAgICAgICBKU1ZhbHVlKiByZXR2YWw7CiAgICAgICAgIGlm
IChoYW5kbGVFdmVudEZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICB3aW5kb3ctPnN0YXJ0VGltZW91
dENoZWNrKCk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7
CiAgICAgICAgICAgICByZXR2YWwgPSBjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbGlzdGVuZXIsIGFyZ3MpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVlOwogICAgICAgICAgICAgaWYgKGlzV2luZG93RXZl
bnQpCi0gICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gd2luZG93LT5zaGVsbCgpOworICAgICAg
ICAgICAgICAgIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVjdC0+dG9UaGlzT2JqZWN0KGV4ZWMpOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IHRvSlMoZXhlYywg
ZXZlbnQtPmN1cnJlbnRUYXJnZXQoKSk7Ci0gICAgICAgICAgICB3aW5kb3ctPnN0YXJ0VGltZW91
dENoZWNrKCk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7
CiAgICAgICAgICAgICByZXR2YWwgPSBjYWxsKGV4ZWMsIGxpc3RlbmVyLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgICAgIH0KLSAgICAgICAgd2luZG93LT5zdG9w
VGltZW91dENoZWNrKCk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVjaygp
OwogCi0gICAgICAgIHdpbmRvdy0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOworICAgICAg
ICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChzYXZlZEV2ZW50KTsKIAotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCkt
PmNvbnNvbGUoKS0+cmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKLSAgICAgICAgZWxzZSB7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IFJlcG9ydCBleGNlcHRpb25zIGluIG5vbi1Eb2N1bWVudCBjb250ZXh0cy4KKyAgICAgICAg
ICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNv
bGUoKS0+cmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKKyAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICghcmV0dmFsLT5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2ZW50LT5zdG9y
ZXNSZXN1bHRBc1N0cmluZygpKQogICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdChy
ZXR2YWwtPnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIGlmIChtX2lzSW5saW5lKSB7CkBA
IC0xMjksMjMgKzE0MiwyMyBAQCBib29sIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjppc0lubGlu
ZSgpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6
OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5k
b3cqIHdpbmRvdywgYm9vbCBpc0lubGluZSkKK0pTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgaXNJbmxpbmUpCiAgICAgOiBKU0Fic3RyYWN0RXZl
bnRMaXN0ZW5lcihpc0lubGluZSkKICAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBt
X3dpbmRvdyh3aW5kb3cpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiB7CiAg
ICAgaWYgKG1fbGlzdGVuZXIpIHsKICAgICAgICAgSlNET01XaW5kb3c6OlVucHJvdGVjdGVkTGlz
dGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0lubGluZQotICAgICAgICAgICAgPyB3aW5kb3ctPmpz
VW5wcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVycygpIDogd2luZG93LT5qc1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgICAgID8gZ2xvYmFsT2JqZWN0LT5qc1VucHJvdGVj
dGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IGdsb2JhbE9iamVjdC0+anNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXJzKCk7CiAgICAgICAgIGxpc3RlbmVycy5zZXQobV9saXN0ZW5lciwgdGhpcyk7
CiAgICAgfQogfQogCiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6fkpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKCkKIHsKLSAgICBpZiAobV9saXN0ZW5lciAmJiBtX3dpbmRvdykgeworICAg
IGlmIChtX2xpc3RlbmVyICYmIG1fZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIEpTRE9NV2luZG93
OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNJbmxpbmUoKQotICAgICAg
ICAgICAgPyBtX3dpbmRvdy0+anNVbnByb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzKCkgOiBt
X3dpbmRvdy0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgICAgICA/IG1f
Z2xvYmFsT2JqZWN0LT5qc1VucHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IG1fZ2xv
YmFsT2JqZWN0LT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgbGlzdGVu
ZXJzLnJlbW92ZShtX2xpc3RlbmVyKTsKICAgICB9CiB9CkBAIC0xNTUsMTQgKzE2OCwxNCBAQCBK
U09iamVjdCogSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OmxpCiAgICAgcmV0dXJuIG1fbGlz
dGVuZXI7CiB9CiAKLUpTRE9NV2luZG93KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6d2lu
ZG93KCkgY29uc3QKK0pTRE9NR2xvYmFsT2JqZWN0KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cjo6Z2xvYmFsT2JqZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV93aW5kb3c7CisgICAgcmV0
dXJuIG1fZ2xvYmFsT2JqZWN0OwogfQogCi12b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
OjpjbGVhcldpbmRvdygpCit2b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjbGVhckds
b2JhbE9iamVjdCgpCiB7Ci0gICAgbV93aW5kb3cgPSAwOworICAgIG1fZ2xvYmFsT2JqZWN0ID0g
MDsKIH0KIAogdm9pZCBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bWFyaygpCkBAIC0xNzcs
MTQgKzE5MCwxNCBAQCBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgZXZlbnRMCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIo
SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93LCBib29sIGlzSW5saW5lKQor
SlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGxpc3RlbmVyLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGlzSW5saW5lKQogICAgIDogSlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXIoaXNJbmxpbmUpCiAgICAgLCBtX2xpc3RlbmVyKGxpc3RlbmVyKQot
ICAgICwgbV93aW5kb3cod2luZG93KQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
KQogewogICAgIGlmIChtX2xpc3RlbmVyKSB7CiAgICAgICAgIEpTRE9NV2luZG93OjpMaXN0ZW5l
cnNNYXAmIGxpc3RlbmVycyA9IGlzSW5saW5lCi0gICAgICAgICAgICA/IG1fd2luZG93LT5qc0lu
bGluZUV2ZW50TGlzdGVuZXJzKCkgOiBtX3dpbmRvdy0+anNFdmVudExpc3RlbmVycygpOworICAg
ICAgICAgICAgPyBtX2dsb2JhbE9iamVjdC0+anNJbmxpbmVFdmVudExpc3RlbmVycygpIDogbV9n
bG9iYWxPYmplY3QtPmpzRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgbGlzdGVuZXJzLnNldCht
X2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwpAQCAtMTk0LDkgKzIwNyw5
IEBAIEpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWMKIAogSlNFdmVudExp
c3RlbmVyOjp+SlNFdmVudExpc3RlbmVyKCkKIHsKLSAgICBpZiAobV9saXN0ZW5lciAmJiBtX3dp
bmRvdykgeworICAgIGlmIChtX2xpc3RlbmVyICYmIG1fZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAg
IEpTRE9NV2luZG93OjpMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSW5saW5lKCkKLSAgICAg
ICAgICAgID8gbV93aW5kb3ctPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luZG93LT5q
c0V2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgICAgICA/IG1fZ2xvYmFsT2JqZWN0LT5qc0lubGlu
ZUV2ZW50TGlzdGVuZXJzKCkgOiBtX2dsb2JhbE9iamVjdC0+anNFdmVudExpc3RlbmVycygpOwog
ICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKG1fbGlzdGVuZXIpOwogICAgIH0KICNpZm5kZWYgTkRF
QlVHCkBAIC0yMDksMjAgKzIyMiwyMCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjpsaXN0
ZW5lck9iaigpCiAgICAgcmV0dXJuIG1fbGlzdGVuZXI7CiB9CiAKLUpTRE9NV2luZG93KiBKU0V2
ZW50TGlzdGVuZXI6OndpbmRvdygpIGNvbnN0CitKU0RPTUdsb2JhbE9iamVjdCogSlNFdmVudExp
c3RlbmVyOjpnbG9iYWxPYmplY3QoKSBjb25zdAogewotICAgIHJldHVybiBtX3dpbmRvdzsKKyAg
ICByZXR1cm4gbV9nbG9iYWxPYmplY3Q7CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVyOjpjbGVh
cldpbmRvdygpCit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6Y2xlYXJHbG9iYWxPYmplY3QoKQogewot
ICAgIG1fd2luZG93ID0gMDsKKyAgICBtX2dsb2JhbE9iamVjdCA9IDA7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihM
YXp5RXZlbnRMaXN0ZW5lclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFN0cmluZyYgY29kZSwgSlNET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgaW50IGxp
bmVOdW1iZXIpCi0gICAgOiBKU0V2ZW50TGlzdGVuZXIoMCwgd2luZG93LCB0cnVlKQorSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihMYXp5RXZlbnRMaXN0ZW5lclR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9kZSogbm9kZSwgaW50IGxpbmVOdW1iZXIp
CisgICAgOiBKU0V2ZW50TGlzdGVuZXIoMCwgZ2xvYmFsT2JqZWN0LCB0cnVlKQogICAgICwgbV9m
dW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAgICwgbV9jb2RlKGNvZGUpCiAgICAgLCBtX3Bh
cnNlZChmYWxzZSkKQEAgLTI2OSwxOSArMjgyLDI0IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6cGFyc2VDb2RlKCkgY28KICAgICBpZiAobV9wYXJzZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdygpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IGZy
YW1lLT5zY3JpcHQoKTsKLSAgICBpZiAoIXNjcmlwdC0+aXNFbmFibGVkKCkgfHwgc2NyaXB0LT5p
c1BhdXNlZCgpKQotICAgICAgICByZXR1cm47CisgICAgRnJhbWUqIGZyYW1lID0gMDsKKyAgICBp
ZiAoZ2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
dyo+KGdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+ZnJh
bWUoKTsKKyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Ly8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVlZGVkIGZvciBub24tRG9jdW1lbnQgY29udGV4dHM/
CisgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IGZyYW1lLT5zY3JpcHQoKTsKKyAg
ICAgICAgaWYgKCFzY3JpcHQtPmlzRW5hYmxlZCgpIHx8IHNjcmlwdC0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBtX3BhcnNlZCA9IHRydWU7CiAKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAKICAgICBBcmdMaXN0IGFyZ3M7
Ci0gICAgVVN0cmluZyBzb3VyY2VVUkwoZnJhbWUtPmxvYWRlcigpLT51cmwoKS5zdHJpbmcoKSk7
CisgICAgVVN0cmluZyBzb3VyY2VVUkwoZ2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOwogICAgIGFyZ3MuYXBwZW5kKGV2ZW50UGFyYW1ldGVy
TmFtZShtX3R5cGUsIGV4ZWMpKTsKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBtX2Nv
ZGUpKTsKIApAQCAtMzE0LDcgKzMzMiw3IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFy
c2VDb2RlKCkgY28KIAogICAgIGlmIChtX2xpc3RlbmVyKSB7CiAgICAgICAgIEFTU0VSVChpc0lu
bGluZSgpKTsKLSAgICAgICAgSlNET01XaW5kb3c6Okxpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0g
d2luZG93KCktPmpzSW5saW5lRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgSlNET01XaW5kb3c6
Okxpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gZ2xvYmFsT2JqZWN0KCktPmpzSW5saW5lRXZlbnRM
aXN0ZW5lcnMoKTsKICAgICAgICAgbGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCBjb25zdF9jYXN0
PEpTTGF6eUV2ZW50TGlzdGVuZXIqPih0aGlzKSk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAzNzk5NikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50OwotICAgIGNsYXNzIEpT
RE9NV2luZG93OworICAgIGNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIE5vZGU7
CiAKICAgICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3Rl
bmVyIHsKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQpOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU0M6OkpT
T2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBKU0RPTVdp
bmRvdyogd2luZG93KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgaXNJbmxpbmUpCkBAIC00OSw0MyArNDksNDMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIgOiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IGNyZWF0
ZShKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9vbCBpc0lu
bGluZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXI+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgYm9vbCBpc0lubGluZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgd2luZG93
LCBpc0lubGluZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgZ2xvYmFsT2JqZWN0LCBpc0lubGluZSkpOwogICAg
ICAgICB9CiAgICAgICAgIHZpcnR1YWwgfkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKCk7CiAK
ICAgICAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIEpTRE9NV2luZG93KiB3aW5kb3coKSBjb25zdDsKLSAgICAgICAgdm9pZCBj
bGVhcldpbmRvdygpOworICAgICAgICB2aXJ0dWFsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVhckdsb2JhbE9iamVjdCgpOwogICAgICAg
ICB2b2lkIG1hcmsoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyosIGJvb2wgaXNJ
bmxpbmUpOworICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2JqZWN0
KiBsaXN0ZW5lciwgSlNET01HbG9iYWxPYmplY3QqLCBib29sIGlzSW5saW5lKTsKIAogICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBtX2xpc3RlbmVyOwotICAgICAgICBKU0RPTVdpbmRvdyogbV93aW5k
b3c7CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKICAgICB9Owog
CiAgICAgY2xhc3MgSlNFdmVudExpc3RlbmVyIDogcHVibGljIEpTQWJzdHJhY3RFdmVudExpc3Rl
bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0
ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93
LCBib29sIGlzSW5saW5lKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVu
ZXI+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgYm9vbCBpc0lubGluZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHdpbmRvdywgaXNJbmxpbmUp
KTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNFdmVudExpc3RlbmVyKGxpc3Rl
bmVyLCBnbG9iYWxPYmplY3QsIGlzSW5saW5lKSk7CiAgICAgICAgIH0KICAgICAgICAgdmlydHVh
bCB+SlNFdmVudExpc3RlbmVyKCk7CiAKICAgICAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBs
aXN0ZW5lck9iaigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEpTRE9NV2luZG93KiB3aW5kb3co
KSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGVhcldpbmRvdygpOworICAgICAgICB2aXJ0dWFsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVh
ckdsb2JhbE9iamVjdCgpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBKU0V2ZW50TGlzdGVu
ZXIoSlNDOjpKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NV2luZG93KiwgYm9vbCBpc0lubGluZSk7
CisgICAgICAgIEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01H
bG9iYWxPYmplY3QqLCBib29sIGlzSW5saW5lKTsKIAogICAgICAgICBtdXRhYmxlIEpTQzo6UHJv
dGVjdGVkUHRyPEpTQzo6SlNPYmplY3Q+IG1fbGlzdGVuZXI7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0RPTVdpbmRvdz4gbV93aW5kb3c7CisgICAgICAgIEpT
Qzo6UHJvdGVjdGVkUHRyPEpTRE9NR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICB9
OwogCiAgICAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0V2ZW50TGlzdGVu
ZXIgewpAQCAtOTksMTQgKzk5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgd2FzQ3JlYXRlZEZyb21NYXJrdXAoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRl
KExhenlFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBpbnQg
bGluZU51bWJlcikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5l
cj4gY3JlYXRlKExhenlFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBOb2RlKiBub2RlLCBpbnQgbGluZU51bWJlcikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKU0xhenlFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uTmFt
ZSwgY29kZSwgd2luZG93LCBub2RlLCBsaW5lTnVtYmVyKSk7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEpTTGF6eUV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb25OYW1lLCBjb2Rl
LCBnbG9iYWxPYmplY3QsIG5vZGUsIGxpbmVOdW1iZXIpKTsKICAgICAgICAgfQogICAgICAgICB2
aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3Q7CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIoTGF6eUV2ZW50TGlzdGVuZXJUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEpTRE9N
V2luZG93KiwgTm9kZSosIGludCBsaW5lTnVtYmVyKTsKKyAgICAgICAgSlNMYXp5RXZlbnRMaXN0
ZW5lcihMYXp5RXZlbnRMaXN0ZW5lclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFN0cmluZyYgY29kZSwgSlNET01HbG9iYWxPYmplY3QqLCBOb2RlKiwgaW50IGxp
bmVOdW1iZXIpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwYXJzZUNvZGUoKSBjb25z
dDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMzc5OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQXRvbWlj
U3RyaW5nLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKQEAgLTY3LDE4ICs2NywxOCBAQCB2b2lkIEpTTWVzc2FnZVBv
cnQ6Om1hcmsoKQogCiBKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgRE9NV2luZG93KiB3
aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwo
KTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGNvbnN0
IFVTdHJpbmcmIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKIAot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+c3RhcnRDb252ZXJzYXRpb24od2luZG93LT5k
b2N1bWVudCgpLCBtZXNzYWdlKS5nZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgaW1wbCgp
LT5zdGFydENvbnZlcnNhdGlvbihnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgbWVzc2FnZSkuZ2V0KCkpOwogfQogCiBKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0OjphZGRFdmVu
dExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBG
cmFtZSogZnJhbWUgPSBpbXBsKCktPmFzc29jaWF0ZWRGcmFtZSgpOwotICAgIGlmICghZnJhbWUp
CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmpl
Y3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2Jq
ZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBSZWZQdHI8SlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gdG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRP
ckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSkp
OworICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnbG9i
YWxPYmplY3QtPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFy
Z3MuYXQoZXhlYywgMSkpOwogICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMsIDAp
LT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIucmVsZWFzZSgpLCBhcmdzLmF0KGV4ZWMsIDIpLT50
b0Jvb2xlYW4oZXhlYykpOwpAQCAtODcsMTAgKzg3LDEwIEBAIEpTVmFsdWUqIEpTTWVzc2FnZVBv
cnQ6OmFkZEV2ZW50TGlzdGVuZXIKIAogSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
RnJhbWUqIGZyYW1lID0gaW1wbCgpLT5hc3NvY2lhdGVkRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1l
KQorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2Jq
ZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIWdsb2JhbE9i
amVjdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gdG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKKyAgICBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKICAgICBpZiAoIWxp
c3RlbmVyKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPnJlbW92
ZUV2ZW50TGlzdGVuZXIoYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVy
LCBhcmdzLmF0KGV4ZWMsIDIpLT50b0Jvb2xlYW4oZXhlYykpOwpAQCAtMTAwLDEwICsxMDAsMTAg
QEAgSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZQogCiB2b2lkIEpTTWVz
c2FnZVBvcnQ6OnNldE9ubWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQog
ewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+YXNzb2NpYXRlZEZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUds
b2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKLSAgICBpbXBsKCktPnNldE9ubWVzc2FnZSh0
b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIoZXhlYywgdmFsdWUsIHRydWUpKTsKKyAgICBpbXBsKCktPnNldE9ubWVzc2FnZShnbG9iYWxP
YmplY3QtPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVl
LCB0cnVlKSk7CiB9CiAKIEpTVmFsdWUqIEpTTWVzc2FnZVBvcnQ6Om9ubWVzc2FnZShFeGVjU3Rh
dGUqKSBjb25zdApAQCAtMTE2LDEwICsxMTYsMTAgQEAgSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6
b25tZXNzYWdlKEV4ZWNTdAogCiB2b2lkIEpTTWVzc2FnZVBvcnQ6OnNldE9uY2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCkt
PmFzc29jaWF0ZWRGcmFtZSgpOwotICAgIGlmICghZnJhbWUpCisgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47
Ci0gICAgaW1wbCgpLT5zZXRPbmNsb3NlKHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVh
dGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOworICAgIGlt
cGwoKS0+c2V0T25jbG9zZShnbG9iYWxPYmplY3QtPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCB0cnVlKSk7CiB9CiAKIEpTVmFsdWUqIEpTTWVzc2Fn
ZVBvcnQ6Om9uY2xvc2UoRXhlY1N0YXRlKikgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDM3OTk2KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAzLDYgKzE3MDMsMTEgQEAgdm9pZCBEb2N1bWVudDo6Y2xlYXIoKQogICAgIG1fd2luZG93RXZl
bnRMaXN0ZW5lcnMuY2xlYXIoKTsKIH0KIAorY29uc3QgS1VSTCYgRG9jdW1lbnQ6OnVybCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdXJsOworfQorCiB2b2lkIERvY3VtZW50OjpzZXRVUkwoY29u
c3QgS1VSTCYgdXJsKQogewogICAgIGNvbnN0IEtVUkwmIG5ld1VSTCA9IHVybC5pc0VtcHR5KCkg
PyBibGFua1VSTCgpIDogdXJsOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzNzk5NikKKysrIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw3ICs0MTAsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiBtX3dlbGxGb3JtZWQ7
IH0KIAotICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAg
dmlydHVhbCBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCA7CiAgICAgdm9pZCBzZXRVUkwoY29uc3Qg
S1VSTCYpOwogCiAgICAgY29uc3QgS1VSTCYgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFz
ZVVSTDsgfQpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24g
Mzc5OTYpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1dvcmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisg
ICAgICAgIHZpcnR1YWwgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgPSAwOworCiAgICAgICAgIC8v
IEFjdGl2ZSBvYmplY3RzIGFyZSBub3QgZ2FyYmFnZSBjb2xsZWN0ZWQgZXZlbiBpZiBpbmFjY2Vz
c2libGUsIGUuZy4gYmVjYXVzZSB0aGVpciBhY3Rpdml0eSBtYXkgcmVzdWx0IGluIGNhbGxiYWNr
cyBiZWluZyBpbnZva2VkLgogICAgICAgICB2b2lkIHN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAg
ICAgICAgIHZvaWQgY3JlYXRlZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqLCB2b2lk
KiB1cGNhc3RQb2ludGVyKTsK
</data>
<flag name="review"
          id="11335"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>