<?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>42171</bug_id>
          
          <creation_ts>2010-07-13 09:20:12 -0700</creation_ts>
          <short_desc>Web Inspector: Clean-up InspectorBackend code.</short_desc>
          <delta_ts>2010-07-16 06:21:45 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250550</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-07-13 09:20:12 -0700</bug_when>
    <thetext>In the next changes InspectorBackend content will be generated by scripts.
As far as generator is very simple thing all nontrivial function should be 
moved to InspectorController and DOMAgent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250561</commentid>
    <comment_count>1</comment_count>
      <attachid>61385</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-07-13 09:29:45 -0700</bug_when>
    <thetext>Created attachment 61385
[patch] initial version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251021</commentid>
    <comment_count>2</comment_count>
      <attachid>61483</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-07-14 01:28:49 -0700</bug_when>
    <thetext>Created attachment 61483
[patch] second iteration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251252</commentid>
    <comment_count>3</comment_count>
      <attachid>61483</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-07-14 10:00:21 -0700</bug_when>
    <thetext>Comment on attachment 61483
[patch] second iteration

My usual leftover comments =).

&gt; -        [custorResponse=didApplyDomChange] void setAttribute(in long elementId, in String name, in String value, out boolean success);
&gt; +        [customResponse=didApplyDomChange] void setAttribute(in long elementId, in String name, in String value, out boolean success);
&gt; -#if defined(ENABLE_OFFLINE_WEB_APPLICATIONS)
&gt; +#if defined(ENABLE_OFFLINE_WEB_APPLICATIONS) &amp;&amp; ENABLE_OFFLINE_WEB_APPLICATIONS

Thanks!


&gt; +++ b/WebCore/inspector/InspectorBackend.cpp
&gt; -    RefPtr&lt;InspectorResource&gt; resource = m_inspectorController-&gt;resources().get(identifier);
&gt; -    String markup = createMarkup(node);

Since InspectorBackend is now going to be generated it will be great
to remove all of the #includes that are no longer needed.


&gt; +++ b/WebCore/inspector/InspectorController.cpp
&gt; +void InspectorController::getResourceContent(long callId, unsigned long identifier)
&gt; +{
&gt; + ...
&gt; +    else
&gt; +        m_frontend-&gt;didGetResourceContent(callId, &quot;&quot;);
&gt; +}

I know this is just moving code, but I think the &quot;&quot; should be changed
to String() rather than taking the implicit cast. I think that is
the approach we take in other places.


&gt; +++ b/WebCore/inspector/InspectorController.h
&gt; +    void disableMonitoringXHR() {setMonitoringXHR(false); }

Missing a space after the opening brace.


&gt;      InspectorDOMAgent* domAgent() { return m_domAgent.get(); }

Not changed code but could probably use const. &quot;domAgent() const {&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251264</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-07-14 10:22:48 -0700</bug_when>
    <thetext>I think this is a really bad change and it should be rolled out. I&apos;ve spent so much time trying to limit the InspectorController&apos;s responsibilities and drag as much as I could out of it. I wanted InspectorBackend to handle debugging and such as much as possible on its own. The idea was that backend handles all the requests and uses InspectorController only when it needs contorller&apos;s state. That way it could talk directly to DOM agent, future Resource agent and such. You make it all route to InspectorController again and it is again hard to tell which parts of IC&apos;s API are for WebCore clients and which are for the front-end.

I don&apos;t understand why this change is necessary for the remote debugging. All you need is to generate dispatch against InspectorBackend.h and since IDL binding works, generated dispatch should also work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251701</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-14 23:41:53 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think this is a really bad change and it should be rolled out. I&apos;ve spent so much time trying to limit the InspectorController&apos;s responsibilities and drag as much as I could out of it. I wanted InspectorBackend to handle debugging and such as much as possible on its own. The idea was that backend handles all the requests and uses InspectorController only when it needs contorller&apos;s state. That way it could talk directly to DOM agent, future Resource agent and such. You make it all route to InspectorController again and it is again hard to tell which parts of IC&apos;s API are for WebCore clients and which are for the front-end.
&gt; 
AFAIR InspectorBackend were meant to define an interface exposed to the Web Inspector front end and nothing but this. Breaking InspectorController down into smaller pieces with limited responsibility(DOM/Resource/Debugger/Storage.. agents) is another problem. Now we have some debugger methods handled by InspectorBackend itself while others are implemented on InspectorController. What we need here is to extract debugger functionality into its own class. The only debugger method that was moved by Ilya is setPauseOnExceptionsState. I think it&apos;s better to move it to IC instead of providing custom parameter conversion for this method in generated code.  Another change that may be considered bad is moving getResourceContent to IC. But I would argue that having this method implemented on IB doesn&apos;t solve the problem of resource handling concentrated in IC. If we want to resolve this issue we should go ahead and extract resource managing into a separate class. 

&gt; I don&apos;t understand why this change is necessary for the remote debugging. All you need is to generate dispatch against InspectorBackend.h and since IDL binding works, generated dispatch should also work.
If we are going to generate request dispatcher from Inspector.idl we need to get rid of custom logic in  InspectorBackend.cpp and make it delegate all requests to appropriate agents. To avoid blowing up InspectorController we should probably start extracting Resource/Debugger/Storage/.. agents first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251722</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-07-15 00:43:18 -0700</bug_when>
    <thetext>As we discussed offline, InspectorBackend is a server implementation, it should not be generated. What we should generate instead is a dispatch code that converts message strings to calls against its instance.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61385</attachid>
            <date>2010-07-13 09:29:45 -0700</date>
            <delta_ts>2010-07-14 01:28:49 -0700</delta_ts>
            <desc>[patch] initial version.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14359</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTM3NzFmMy4uYjVlYjJkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wNy0xMyAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBDbGVhbi11cCBJbnNwZWN0b3JCYWNr
ZW5kIGNvZGUuIEluIHRoZSBuZXh0IGNoYW5nZXMKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZCBj
b250ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHNjcmlwdHMuIEFzIGZhciBhcworICAgICAgICBn
ZW5lcmF0b3IgaXMgdmVyeSBzaW1wbGUgdGhpbmcgYWxsIG5vbnRyaXZpYWwgZnVuY3Rpb24gc2hv
dWxkIGJlCisgICAgICAgIG1vdmVkIHRvIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIERPTUFnZW50
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIxNzEK
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tl
bmQ6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckJhY2tlbmQ6OnNhdmVTZXNzaW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQmFja2VuZDo6ZW5hYmxlTW9uaXRvcmluZ1hIUik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYWNrZW5kOjpkaXNhYmxlTW9uaXRvcmluZ1hIUik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JCYWNrZW5kOjpnZXRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6cmVsb2FkUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYWNrZW5kOjpjb3B5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5k
OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QmFja2VuZDo6aGlnaGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JC
YWNrZW5kOjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmdldFJlc291cmNlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6aGlkZURPTU5vZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RvcFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjplbmFibGVNb25pdG9yaW5nWEhSKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpc2FibGVNb25pdG9yaW5nWEhSKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
QWdlbnQ6OmNvcHlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpw
dXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oOgorCiAyMDEwLTA3LTEyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKaW5kZXggY2I2YTY4Yi4uNGU1MTMyMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuaWRsCkBAIC0xMTUsNyArMTE1LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGFk
ZEluc3BlY3RlZE5vZGUoaW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIHBlcmZvcm1TZWFy
Y2goaW4gU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1blN5bmNocm9ub3VzbHkpOwogICAgICAg
ICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7Ci0gICAgICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKGluIFN0cmluZyBwYXRoKTsKKyAgICAgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJv
bnRlbmQoaW4gU3RyaW5nIHBhdGgsIG91dCBsb25nIG5vZGVJZCk7CiAKICAgICAgICAgdm9pZCBj
bGVhckNvbnNvbGVNZXNzYWdlcygpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwCmluZGV4IDU3ZWUxOWYuLjA0NTExMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwCkBAIC04NiwxMyArODYsMTMgQEAgSW5zcGVjdG9yQmFja2VuZDo6fkluc3BlY3Rv
ckJhY2tlbmQoKQogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzYXZlQXBwbGljYXRpb25TZXR0aW5n
cyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGluZyhJbnNwZWN0b3JD
b250cm9sbGVyOjpmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUoKSwgc2V0dGluZ3MpOworICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKHNldHRp
bmdzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzYXZlU2Vzc2lvblNldHRpbmdzKGNv
bnN0IFN0cmluZyYgc2V0dGluZ3MpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikK
LSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXNzaW9uU2V0dGluZ3Moc2V0dGlu
Z3MpOworICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNhdmVTZXNzaW9uU2V0dGluZ3Mo
c2V0dGluZ3MpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3JlTGFzdEFjdGl2ZVBh
bmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKQpAQCAtMTA0LDI1ICsxMDQsMjUgQEAgdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVs
TmFtZSkKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZSgpCiB7
CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5zZXRTZWFyY2hpbmdGb3JOb2RlKHRydWUpOworICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmVuYWJsZVNlYXJjaGluZ0Zvck5vZGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSgpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZWFyY2hpbmdG
b3JOb2RlKGZhbHNlKTsKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlU2Vh
cmNoaW5nRm9yTm9kZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZU1vbml0
b3JpbmdYSFIoKQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+c2V0TW9uaXRvcmluZ1hIUih0cnVlKTsKKyAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVNb25pdG9yaW5nWEhSKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQmFja2VuZDo6ZGlzYWJsZU1vbml0b3JpbmdYSFIoKQogewogICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0TW9uaXRv
cmluZ1hIUihmYWxzZSk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZU1v
bml0b3JpbmdYSFIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVSZXNvdXJj
ZVRyYWNraW5nKGJvb2wgYWx3YXlzKQpAQCAtMTM5LDIxICsxMzksMTQgQEAgdm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjpkaXNhYmxlUmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKIAogdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpnZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBp
bnNwZWN0b3JGcm9udGVuZCgpOwotICAgIGlmICghZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBpZiAocmVzb3VyY2Up
Ci0gICAgICAgIGZyb250ZW5kLT5kaWRHZXRSZXNvdXJjZUNvbnRlbnQoY2FsbElkLCByZXNvdXJj
ZS0+c291cmNlU3RyaW5nKCkpOwotICAgIGVsc2UKLSAgICAgICAgZnJvbnRlbmQtPmRpZEdldFJl
c291cmNlQ29udGVudChjYWxsSWQsICIiKTsKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldFJlc291cmNlQ29udGVudChjYWxs
SWQsIGlkZW50aWZpZXIpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbG9hZFBhZ2Uo
KQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVs
ZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHRydWUpOworICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPnJlbG9hZFBhZ2UoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGFydFRpbWVs
aW5lUHJvZmlsZXIoKQpAQCAtMzY4LDExICszNjEsOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6
OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiAKIHZv
aWQgSW5zcGVjdG9yQmFja2VuZDo6Y29weU5vZGUobG9uZyBub2RlSWQpCiB7Ci0gICAgTm9kZSog
bm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFN0cmluZyBtYXJrdXAgPSBjcmVhdGVNYXJrdXAobm9kZSk7Ci0gICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQobWFya3VwKTsKKyAgICBpZiAo
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAg
ICAgZG9tQWdlbnQtPmNvcHlOb2RlKG5vZGVJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6cmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCkBAIC00MTksMTMgKzQwOSw4
IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2VsZWQoKQogCiB2b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwYXRoKQogewotICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3Bl
Y3RvckRPTUFnZW50KCk7Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kID0gaW5zcGVj
dG9yRnJvbnRlbmQoKTsKLSAgICBpZiAoIWRvbUFnZW50IHx8ICFmcm9udGVuZCkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGxvbmcgaWQgPSBkb21BZ2VudC0+cHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKHBhdGgpOwotICAgIGZyb250ZW5kLT5kaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQo
Y2FsbElkLCBpZCk7CisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3Bl
Y3RvckRPTUFnZW50KCkpCisgICAgICAgIGRvbUFnZW50LT5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRl
bmQoY2FsbElkLCBwYXRoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjbGVhckNvbnNv
bGVNZXNzYWdlcygpCkBAIC01MDgsMTQgKzQ5MywxNCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6
OmFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0
ZQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQp
CiB7Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKSkKLSAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7CisgICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHRET01O
b2RlKG5vZGVJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlkZURPTU5vZGVIaWdo
bGlnaHQoKQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aGlkZUhpZ2hsaWdodCgpOworICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiB9CiAKICNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQpAQCAtNjEzLDEzICs1OTgsNiBAQCBJbnNwZWN0b3JGcm9udGVu
ZCogSW5zcGVjdG9yQmFja2VuZDo6aW5zcGVjdG9yRnJvbnRlbmQoKQogICAgIHJldHVybiBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQuZ2V0KCk7CiB9CiAKLU5vZGUqIEluc3BlY3Rv
ckJhY2tlbmQ6Om5vZGVGb3JJZChsb25nIG5vZGVJZCkKLXsKLSAgICBpZiAoSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKLSAgICAgICAgcmV0dXJuIGRv
bUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kOjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291
cmNlKQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDRmZWYzMDIuLjM3YmNjMzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNjYsNyArMjY2LDEyIEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFs
dWUpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyhj
b25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2
ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5ncykKK3sKKyAgICBzZXRT
ZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSgp
LCBzZXR0aW5ncyk7Cit9CisgICAgCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVTZXNz
aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5nc0pTT04pCiB7CiAgICAgbV9zZXNzaW9u
U2V0dGluZ3MgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmdzSlNPTik7CiB9CkBA
IC0zMTIsNiArMzE3LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0KE5v
ZGUqIG5vZGUpCiAgICAgbV9jbGllbnQtPmhpZ2hsaWdodChub2RlKTsKIH0KIAordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRET01Ob2RlKGxvbmcgbm9kZUlkKQoreworICAgIE5v
ZGUqIG5vZGUgPSAwOworICAgIGlmIChtX2RvbUFnZW50ICYmIChub2RlID0gbV9kb21BZ2VudC0+
bm9kZUZvcklkKG5vZGVJZCkpKQorICAgICAgICBoaWdobGlnaHQobm9kZSk7Cit9CisgICAgCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQogewogICAgIGlmICghZW5h
YmxlZCgpKQpAQCAtMjE1OSw2ICsyMTcxLDIzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKQogICAgIG1fc2NyaXB0c1RvRXZhbHVh
dGVPbkxvYWQuY2xlYXIoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNv
dXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAg
ICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW5z
cGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpOwor
ICAgIGlmIChyZXNvdXJjZSkKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0UmVzb3VyY2VDb250
ZW50KGNhbGxJZCwgcmVzb3VyY2UtPnNvdXJjZVN0cmluZygpKTsKKyAgICBlbHNlCisgICAgICAg
IG1fZnJvbnRlbmQtPmRpZEdldFJlc291cmNlQ29udGVudChjYWxsSWQsICIiKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKK3sKKyAgICBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2godHJ1
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZWUwYzlk
Ni4uYjg4ZTliNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAt
MTI3LDE0ICsxMjcsMTkgQEAgcHVibGljOgogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAg
ICAgUGFnZSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsg
fQotCisgICAgdm9pZCByZWxvYWRQYWdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIFN0cmluZyBzZXR0aW5nKGNvbnN0IFN0
cmluZyYga2V5KSBjb25zdDsKICAgICB2b2lkIHNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgc2V0U2Vzc2lvblNldHRpbmdzKGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5n
JiBzZXR0aW5ncyk7CisgICAgdm9pZCBzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKIAogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9pZCBoaWdobGlnaHQoTm9kZSop
OwogICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAgIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShs
b25nIG5vZGVJZCk7CisgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hs
aWdodCgpOyB9CiAKICAgICB2b2lkIHNob3coKTsKICAgICB2b2lkIHNob3dQYW5lbChTcGVjaWFs
UGFuZWxzKTsKQEAgLTI0Niw2ICsyNTEsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldEN1cnJl
bnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsK
ICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyhUaW1lcjxJbnNwZWN0b3JDb250
cm9sbGVyPiogPSAwKTsKICAgICB2b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Cisg
ICAgdm9pZCBzdGFydFByb2ZpbGluZygpIHsgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7
IH0KKyAgICB2b2lkIHN0b3BQcm9maWxpbmcoKSB7IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7IH0KIAogICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSwgYm9v
bCBza2lwUmVjb21waWxlID0gZmFsc2UpOwogICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wg
YWx3YXlzID0gZmFsc2UpOwpAQCAtMjg4LDcgKzI5NSwxMiBAQCBwcml2YXRlOgogCiAgICAgLy8g
Rm9sbG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4K
ICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIGVu
YWJsZVNlYXJjaGluZ0Zvck5vZGUoKSB7IHNldFNlYXJjaGluZ0Zvck5vZGUodHJ1ZSk7IH0KKyAg
ICB2b2lkIGRpc2FibGVTZWFyY2hpbmdGb3JOb2RlKCkgeyBzZXRTZWFyY2hpbmdGb3JOb2RlKGZh
bHNlKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSKGJvb2wgZW5hYmxlZCk7Cisg
ICAgdm9pZCBlbmFibGVNb25pdG9yaW5nWEhSKCkgeyBzZXRNb25pdG9yaW5nWEhSKHRydWUpOyB9
CisgICAgdm9pZCBkaXNhYmxlTW9uaXRvcmluZ1hIUigpIHtzZXRNb25pdG9yaW5nWEhSKGZhbHNl
KTsgfQogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5h
bWUpOwogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCgpIHsgcmV0dXJuIG1fZG9tQWdl
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CkBA
IC0zMjQsNiArMzM2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFJlc291cmNlKEluc3BlY3Rv
clJlc291cmNlKik7CiAgICAgdm9pZCByZW1vdmVSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSop
OwogICAgIEluc3BlY3RvclJlc291cmNlKiBnZXRUcmFja2VkUmVzb3VyY2UodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChsb25nIGNhbGxJZCwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKIAogICAgIHZvaWQgcHJ1bmVSZXNvdXJjZXMoUmVz
b3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDApOwogICAgIHZvaWQg
cmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5lUmVzb3VyY2VzKG1h
cCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA0OTQ2ZmFl
Li4xNjJkMmVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01
OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5vZGUu
aCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckZyb250ZW5k
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTcwLDYgKzcxLDggQEAKICNpbmNsdWRl
ICJYUGF0aFJlc3VsdC5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJtYXJrdXAuaCIKKwogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtMzU0LDE0ICszNTcsNiBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobG9uZyBub2RlSWQpCiAgICAgbV9m
cm9udGVuZC0+c2V0Q2hpbGROb2Rlcyhub2RlSWQsIGNoaWxkcmVuLnJlbGVhc2UoKSk7CiB9CiAK
LWxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgpOwotICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQobm9kZSk7Ci19Ci0KIGxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3RlZE5v
ZGUodW5zaWduZWQgbG9uZyBudW0pCiB7CiAgICAgaWYgKG51bSA8IG1faW5zcGVjdGVkTm9kZXMu
c2l6ZSgpKQpAQCAtMTYzNSw2ICsxNjMwLDI4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sCiAg
ICAgbV9mcm9udGVuZC0+YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChub2RlSWRzLnJlbGVhc2UoKSk7
CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQorewor
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKKyAgICBTdHJpbmcgbWFya3VwID0gY3JlYXRlTWFya3VwKG5vZGUpOworICAg
IFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KG1hcmt1cCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGlmICghbV9mcm9udGVuZCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGxvbmcgaWQgPSAwOworICAgIE5vZGUqIG5vZGUg
PSBub2RlRm9yUGF0aChwYXRoKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgaWQgPSBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKG5vZGUpOworICAgIAorICAgIG1fZnJvbnRlbmQtPmRpZFB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjYWxsSWQsIGlkKTsKK30gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaAppbmRleCA3Y2Q1YTA3Li42ZjljNWZiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmgKQEAgLTEzNSw4ICsxMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIE5vZGUqIG5vZGVGb3JJZChsb25nIG5vZGVJZCk7CiAgICAgICAgIGxvbmcgcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlKTsKICAgICAgICAgdm9pZCBwdXNoQ2hpbGRO
b2Rlc1RvRnJvbnRlbmQobG9uZyBub2RlSWQpOwotICAgICAgICBsb25nIHB1c2hOb2RlQnlQYXRo
VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICB2b2lkIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAgICAg
bG9uZyBpbnNwZWN0ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKTsKKyAgICAgICAgdm9pZCBjb3B5
Tm9kZShsb25nIG5vZGVJZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgQ1NTU3R5
bGVTaGVldCogZ2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61483</attachid>
            <date>2010-07-14 01:28:49 -0700</date>
            <delta_ts>2010-07-14 10:00:21 -0700</delta_ts>
            <desc>[patch] second iteration</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>31126</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTM3NzFmMy4uYzc3ODhmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wNy0xNCAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBDbGVhbi11cCBJbnNwZWN0b3JCYWNr
ZW5kIGNvZGUuIEluIHRoZSBuZXh0IGNoYW5nZXMKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZCBj
b250ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHNjcmlwdHMuIEFzIGZhciBhcworICAgICAgICBn
ZW5lcmF0b3IgaXMgdmVyeSBzaW1wbGUgdGhpbmcgYWxsIG5vbnRyaXZpYWwgZnVuY3Rpb24gc2hv
dWxkIGJlCisgICAgICAgIG1vdmVkIHRvIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIERPTUFnZW50
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIxNzEK
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tl
bmQ6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckJhY2tlbmQ6OnNhdmVTZXNzaW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQmFja2VuZDo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JCYWNrZW5kOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVNb25pdG9yaW5nWEhSKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVNb25pdG9yaW5nWEhSKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmdldFJlc291cmNlQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpyZWxvYWRQYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJhY2tlbmQ6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckJhY2tlbmQ6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
dGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
dGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
dGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
ZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
Y2tlbmQ6OmNvcHlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnB1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNr
ZW5kOjpoaWdobGlnaHRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tl
bmQ6OmhpZGVET01Ob2RlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdodERPTU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UmVzb3VyY2VD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbG9hZFBh
Z2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFByb2ZpbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wUHJvZmlsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVNlYXJjaGluZ0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVNlYXJj
aGluZ0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlTW9uaXRvcmluZ1hIUik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaXNhYmxlTW9uaXRvcmluZ1hIUik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpjb3B5Tm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhU
b0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAg
ICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUucGF1c2Up
OgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUu
cmVzdW1lKToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJv
dG90eXBlLnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVj
dG9yQmFja2VuZFN0dWIucHJvdG90eXBlLnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKC5X
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlLnN0ZXBPdmVyU3RhdGVt
ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl90b2dnbGVQYXVzZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fc3RlcE92ZXJD
bGlja2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9z
dGVwSW50b0NsaWNrZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUuX3N0ZXBPdXRDbGlja2VkKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeSk6CisKIDIwMTAtMDctMTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDBhNDBmMTMuLmQ3MTAz
NGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0yMDAs
NyArMjAwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQogICAgIG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSA9IHBhdXNlOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZVByb2dy
YW0oKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2UoKQogewogICAgIG1fcGF1c2VPbk5l
eHRTdGF0ZW1lbnQgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oCmluZGV4IDZhODIwOWIuLmZkODk3NmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERl
YnVnU2VydmVyLmgKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKICAg
ICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZh
dGVkKGJvb2wgYWN0aXZhdGVkKTsKKyAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7IHNl
dEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CisgICAgdm9pZCBkZWFjdGl2YXRlQnJlYWtw
b2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGZhbHNlKTsgfQogCiAgICAgZW51bSBQ
YXVzZU9uRXhjZXB0aW9uc1N0YXRlIHsKICAgICAgICAgRG9udFBhdXNlT25FeGNlcHRpb25zLApA
QCAtNzYsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0
YXRlOyB9CiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRp
b25zU3RhdGUpOwogCi0gICAgdm9pZCBwYXVzZVByb2dyYW0oKTsKKyAgICB2b2lkIHBhdXNlKCk7
CiAgICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50
KCk7CiAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCmluZGV4IDI2Y2E3ODUuLjcwMjFjMGEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJyZWFr
cG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKKyAgICB2b2lkIGFjdGl2YXRlQnJlYWtw
b2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CisgICAgdm9pZCBkZWFj
dGl2YXRlQnJlYWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGZhbHNlKTsgfQog
CiAgICAgZW51bSBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHsKICAgICAgICAgRG9udFBhdXNlT25F
eGNlcHRpb25zLApAQCAtNjgsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgUGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCk7CiAgICAgdm9pZCBzZXRQYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSk7CiAKLSAgICB2b2lkIHBhdXNlUHJvZ3JhbSgpIHsgfQorICAgIHZvaWQgcGF1c2UoKSB7IH0K
ICAgICB2b2lkIGNvbnRpbnVlUHJvZ3JhbSgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQo
KTsKICAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApp
bmRleCBjYjZhNjhiLi40NzZkMDQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTcwLDEy
ICs3MCwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50
cygpOwogICAgICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogCi0gICAgICAgIHZv
aWQgcGF1c2VJbkRlYnVnZ2VyKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lRGVidWdnZXIoKTsKKyAg
ICAgICAgdm9pZCBwYXVzZSgpOworICAgICAgICB2b2lkIHJlc3VtZSgpOwogCi0gICAgICAgIHZv
aWQgc3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7Ci0gICAgICAgIHZvaWQgc3RlcEludG9T
dGF0ZW1lbnRJbkRlYnVnZ2VyKCk7Ci0gICAgICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRl
YnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKKyAgICAgICAgdm9p
ZCBzdGVwSW50b1N0YXRlbWVudCgpOworICAgICAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCk7
CiAKICAgICAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKGluIGxvbmcgcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSk7CiAKQEAgLTEwMyw3ICsxMDMsNyBAQCBtb2R1bGUgY29yZSB7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKIAogICAgICAg
ICB2b2lkIGdldENoaWxkTm9kZXMoaW4gbG9uZyBub2RlSWQpOwotICAgICAgICBbY3VzdG9yUmVz
cG9uc2U9ZGlkQXBwbHlEb21DaGFuZ2VdIHZvaWQgc2V0QXR0cmlidXRlKGluIGxvbmcgZWxlbWVu
dElkLCBpbiBTdHJpbmcgbmFtZSwgaW4gU3RyaW5nIHZhbHVlLCBvdXQgYm9vbGVhbiBzdWNjZXNz
KTsKKyAgICAgICAgW2N1c3RvbVJlc3BvbnNlPWRpZEFwcGx5RG9tQ2hhbmdlXSB2b2lkIHNldEF0
dHJpYnV0ZShpbiBsb25nIGVsZW1lbnRJZCwgaW4gU3RyaW5nIG5hbWUsIGluIFN0cmluZyB2YWx1
ZSwgb3V0IGJvb2xlYW4gc3VjY2Vzcyk7CiAgICAgICAgIFtjdXN0b21SZXNwb25zZT1kaWRBcHBs
eURvbUNoYW5nZV0gdm9pZCByZW1vdmVBdHRyaWJ1dGUoaW4gbG9uZyBlbGVtZW50SWQsIGluIFN0
cmluZyBuYW1lLCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKICAgICAgICAgdm9pZCBzZXRUZXh0Tm9k
ZVZhbHVlKGluIGxvbmcgbm9kZUlkLCBpbiBTdHJpbmcgdmFsdWUpOwogICAgICAgICB2b2lkIGdl
dEV2ZW50TGlzdGVuZXJzRm9yTm9kZShpbiBsb25nIG5vZGVJZCwgb3V0IGxvbmcgbm9kZUlkLCBv
dXQgQXJyYXkgbGlzdGVuZXJzQXJyYXkpOwpAQCAtMTE1LDcgKzExNSw3IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgdm9pZCBhZGRJbnNwZWN0ZWROb2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAg
ICAgdm9pZCBwZXJmb3JtU2VhcmNoKGluIFN0cmluZyBxdWVyeSwgaW4gYm9vbGVhbiBydW5TeW5j
aHJvbm91c2x5KTsKICAgICAgICAgdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwotICAgICAgICB2b2lk
IHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChpbiBTdHJpbmcgcGF0aCk7CisgICAgICAgIHZvaWQg
cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGluIFN0cmluZyBwYXRoLCBvdXQgbG9uZyBub2RlSWQp
OwogCiAgICAgICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKIApAQCAtMTM4LDcgKzEz
OCw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBnZXRDb29raWVzKCk7CiAgICAgICAg
IHZvaWQgZGVsZXRlQ29va2llKGluIFN0cmluZyBjb29raWVOYW1lLCBpbiBTdHJpbmcgZG9tYWlu
KTsKIAotI2lmIGRlZmluZWQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBk
ZWZpbmVkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICYmIEVOQUJMRV9PRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMKICAgICAgICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlcygpOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggNTdlZTE5
Zi4uOWY3MTMwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTg2
LDEzICs4NiwxMyBAQCBJbnNwZWN0b3JCYWNrZW5kOjp+SW5zcGVjdG9yQmFja2VuZCgpCiB2b2lk
IEluc3BlY3RvckJhY2tlbmQ6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYg
c2V0dGluZ3MpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250
ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSgpLCBzZXR0aW5ncyk7CisgICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3Moc2V0dGluZ3MpOwogfQogCiB2b2lk
IEluc3BlY3RvckJhY2tlbmQ6OnNhdmVTZXNzaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0
aW5ncykKIHsKICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnNldFNlc3Npb25TZXR0aW5ncyhzZXR0aW5ncyk7CisgICAgICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+c2F2ZVNlc3Npb25TZXR0aW5ncyhzZXR0aW5ncyk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5n
JiBwYW5lbE5hbWUpCkBAIC0xMDQsMjUgKzEwNCwyNSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6
OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKQogdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kOjplbmFibGVTZWFyY2hpbmdGb3JOb2RlKCkKIHsKICAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNlYXJj
aGluZ0Zvck5vZGUodHJ1ZSk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxl
U2VhcmNoaW5nRm9yTm9kZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVT
ZWFyY2hpbmdGb3JOb2RlKCkKIHsKICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwor
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVTZWFyY2hpbmdGb3JOb2RlKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxlTW9uaXRvcmluZ1hIUigpCiB7CiAg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5zZXRNb25pdG9yaW5nWEhSKHRydWUpOworICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmVuYWJsZU1vbml0b3JpbmdYSFIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpk
aXNhYmxlTW9uaXRvcmluZ1hIUigpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikK
LSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRNb25pdG9yaW5nWEhSKGZhbHNlKTsK
KyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlTW9uaXRvcmluZ1hIUigpOwog
fQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZVJlc291cmNlVHJhY2tpbmcoYm9vbCBh
bHdheXMpCkBAIC0xMzksMjEgKzEzOSwxNCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2Fi
bGVSZXNvdXJjZVRyYWNraW5nKGJvb2wgYWx3YXlzKQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6
OmdldFJlc291cmNlQ29udGVudChsb25nIGNhbGxJZCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQogewotICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5k
KCk7Ci0gICAgaWYgKCFmcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPElu
c3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3Vy
Y2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChyZXNvdXJjZSkKLSAgICAgICAgZnJvbnRl
bmQtPmRpZEdldFJlc291cmNlQ29udGVudChjYWxsSWQsIHJlc291cmNlLT5zb3VyY2VTdHJpbmco
KSk7Ci0gICAgZWxzZQotICAgICAgICBmcm9udGVuZC0+ZGlkR2V0UmVzb3VyY2VDb250ZW50KGNh
bGxJZCwgIiIpOworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+Z2V0UmVzb3VyY2VDb250ZW50KGNhbGxJZCwgaWRlbnRpZmllcik7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVsb2FkUGFnZSgpCiB7CiAgICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZVJl
ZnJlc2godHJ1ZSk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVsb2FkUGFnZSgp
OwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCkBA
IC0xOTYsNDUgKzE4OSw0NCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bQogCiB2b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OmFjdGl2YXRlQnJlYWtwb2ludHMoKQogewotICAgIFNjcmlwdERlYnVnU2Vy
dmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsKKyAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWN0aXZhdGVCcmVha3BvaW50cygpOwogfQogCiB2b2lkIElu
c3BlY3RvckJhY2tlbmQ6OmRlYWN0aXZhdGVCcmVha3BvaW50cygpCiB7Ci0gICAgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGZhbHNlKTsKKyAgICBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cGF1c2VJbkRlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6cGF1c2UoKQogewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVz
ZVByb2dyYW0oKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2UoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZXN1bWVEZWJ1Z2dlcigpCit2b2lkIEluc3BlY3Rv
ckJhY2tlbmQ6OnJlc3VtZSgpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZXN1bWVEZWJ1Z2dlcigpOworICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnJlc3VtZSgpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tl
bmQ6OnN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6
OnN0ZXBPdmVyU3RhdGVtZW50KCkKIHsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
c3RlcE92ZXJTdGF0ZW1lbnQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwSW50
b1N0YXRlbWVudEluRGVidWdnZXIoKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwSW50b1N0
YXRlbWVudCgpCiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBJbnRvU3Rh
dGVtZW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c3RlcE91dE9mRnVuY3Rpb25J
bkRlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c3RlcE91dE9mRnVuY3Rpb24oKQog
ewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOwog
fQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUobG9u
ZyBwYXVzZVN0YXRlKQogewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKHN0YXRpY19jYXN0PFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlPihwYXVzZVN0YXRlKSk7Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT51cGRh
dGVQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKCkpOworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisg
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShw
YXVzZVN0YXRlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjplZGl0U2NyaXB0U291cmNl
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0Nv
bnRlbnQpCkBAIC0zNjgsMTEgKzM2MCw4IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0RXZl
bnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKIAogdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kOjpjb3B5Tm9kZShsb25nIG5vZGVJZCkKIHsKLSAgICBOb2RlKiBub2RlID0g
bm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIG1hcmt1cCA9IGNyZWF0ZU1hcmt1cChub2RlKTsKLSAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChtYXJrdXApOworICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQorICAgICAgICBkb21B
Z2VudC0+Y29weU5vZGUobm9kZUlkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZW1v
dmVOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKQEAgLTQxOSwxMyArNDA4LDggQEAgdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCgpCiAKIHZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IHBhdGgpCiB7Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9N
QWdlbnQoKTsKLSAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBpbnNwZWN0b3JGcm9u
dGVuZCgpOwotICAgIGlmICghZG9tQWdlbnQgfHwgIWZyb250ZW5kKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgbG9uZyBpZCA9IGRvbUFnZW50LT5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQo
cGF0aCk7Ci0gICAgZnJvbnRlbmQtPmRpZFB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjYWxsSWQs
IGlkKTsKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9N
QWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjYWxs
SWQsIHBhdGgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsZWFyQ29uc29sZU1lc3Nh
Z2VzKCkKQEAgLTUwOCwxNCArNDkyLDE0IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkUnVs
ZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlCiAKIHZv
aWQgSW5zcGVjdG9yQmFja2VuZDo6aGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCkKIHsKLSAg
ICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpKQotICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhpZ2hsaWdodERPTU5vZGUobm9k
ZUlkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpoaWRlRE9NTm9kZUhpZ2hsaWdodCgp
CiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5oaWRlSGlnaGxpZ2h0KCk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aGlkZURPTU5vZGVIaWdobGlnaHQoKTsKIH0KIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCkBAIC02MTMsMTMgKzU5Nyw2IEBAIEluc3BlY3RvckZyb250ZW5kKiBJbnNw
ZWN0b3JCYWNrZW5kOjppbnNwZWN0b3JGcm9udGVuZCgpCiAgICAgcmV0dXJuIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+bV9mcm9udGVuZC5nZXQoKTsKIH0KIAotTm9kZSogSW5zcGVjdG9yQmFja2Vu
ZDo6bm9kZUZvcklkKGxvbmcgbm9kZUlkKQotewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQotICAgICAgICByZXR1cm4gZG9tQWdlbnQt
Pm5vZGVGb3JJZChub2RlSWQpOwotICAgIHJldHVybiAwOwotfQotCiB2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7
CiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaAppbmRleCA0N2NmZGM3Li43OGQzNGI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5oCkBAIC04NiwxMiArODYsMTIgQEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZhdGVC
cmVha3BvaW50cygpOwogICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAKLSAgICB2
b2lkIHBhdXNlSW5EZWJ1Z2dlcigpOwotICAgIHZvaWQgcmVzdW1lRGVidWdnZXIoKTsKKyAgICB2
b2lkIHBhdXNlKCk7CisgICAgdm9pZCByZXN1bWUoKTsKIAotICAgIHZvaWQgc3RlcE92ZXJTdGF0
ZW1lbnRJbkRlYnVnZ2VyKCk7Ci0gICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIo
KTsKLSAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcigpOworICAgIHZvaWQgc3Rl
cE92ZXJTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CisgICAgdm9p
ZCBzdGVwT3V0T2ZGdW5jdGlvbigpOwogCiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKGxvbmcgcGF1c2VTdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwKaW5kZXggMWZjOGExNi4uM2M0NjBhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5pZGwKQEAgLTYwLDEyICs2MCwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQg
YWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50
cygpOwogCi0gICAgICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7Ci0gICAgICAgIHZvaWQgcmVz
dW1lRGVidWdnZXIoKTsKKyAgICAgICAgdm9pZCBwYXVzZSgpOworICAgICAgICB2b2lkIHJlc3Vt
ZSgpOwogCi0gICAgICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7Ci0gICAg
ICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7Ci0gICAgICAgIHZvaWQgc3Rl
cE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1l
bnQoKTsKKyAgICAgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpOworICAgICAgICB2b2lkIHN0
ZXBPdXRPZkZ1bmN0aW9uKCk7CiAKICAgICAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKGluIGxvbmcgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNGZlZjMwMi4uYTlkZTFhMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTI2Niw3ICsyNjYsMTIgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoa2V5LCB2YWx1
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2Vzc2lvblNldHRpbmdzKGNv
bnN0IFN0cmluZyYgc2V0dGluZ3NKU09OKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZl
QXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQoreworICAgIHNldFNl
dHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lKCks
IHNldHRpbmdzKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNl
dHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3NKU09OKQogewogICAgIG1fc2Vzc2lvblNldHRp
bmdzID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nc0pTT04pOwogfQpAQCAtMzEy
LDYgKzMxNywxMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdodChOb2RlKiBu
b2RlKQogICAgIG1fY2xpZW50LT5oaWdobGlnaHQobm9kZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6aGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBu
b2RlID0gMDsKKyAgICBpZiAobV9kb21BZ2VudCAmJiAobm9kZSA9IG1fZG9tQWdlbnQtPm5vZGVG
b3JJZChub2RlSWQpKSkKKyAgICAgICAgaGlnaGxpZ2h0KG5vZGUpOworfQorCiB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQogewogICAgIGlmICghZW5hYmxlZCgpKQpA
QCAtMTc0NiwxMyArMTc1OCwyMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNjcmlw
dFNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKICAgICBtX2Zyb250
ZW5kLT5kaWRHZXRTY3JpcHRTb3VyY2UoY2FsbElkLCBzY3JpcHRTb3VyY2UpOwogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZURlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdW1lKCkKIHsKICAgICBpZiAoIW1fZGVidWdnZXJFbmFibGVkKQogICAgICAg
ICByZXR1cm47CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmNvbnRpbnVlUHJvZ3Jh
bSgpOwogfQogCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFBhdXNlT25FeGNlcHRpb25z
U3RhdGUobG9uZyBwYXVzZVN0YXRlKQoreworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5zZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKHN0YXRpY19jYXN0PFNjcmlwdERlYnVnU2VydmVy
OjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlPihwYXVzZVN0YXRlKSk7CisgICAgaWYgKG1fZnJvbnRl
bmQpCisgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZVBhdXNlT25FeGNlcHRpb25zU3RhdGUoU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSk7Cit9CisK
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpj
dXJyZW50Q2FsbEZyYW1lcygpCiB7CiAgICAgaWYgKCFtX3BhdXNlZFNjcmlwdFN0YXRlKQpAQCAt
MjE1OSw2ICsyMTc4LDIzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQWxsU2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQoKQogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuY2xl
YXIoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQo
bG9uZyBjYWxsSWQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1fZnJv
bnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4g
cmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKHJlc291cmNl
KQorICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRSZXNvdXJjZUNvbnRlbnQoY2FsbElkLCByZXNv
dXJjZS0+c291cmNlU3RyaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlk
R2V0UmVzb3VyY2VDb250ZW50KGNhbGxJZCwgIiIpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlbG9hZFBhZ2UoKQoreworICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
PnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVzaCh0cnVlKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBlZTBjOWQ2Li4wNTc0Y2VlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0xMjcsMTQgKzEyNywxOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKICAgICBQYWdlKiBpbnNwZWN0
ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9CisgICAgdm9pZCByZWxv
YWRQYWdlKCk7CiAKICAgICBTdHJpbmcgc2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICB2b2lkIHNldFNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIHNhdmVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpOworICAg
IHZvaWQgc2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKKwogCiAgICAgdm9pZCBp
bnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGhpZ2hsaWdodChOb2RlKik7CiAgICAgdm9pZCBoaWRl
SGlnaGxpZ2h0KCk7CisgICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGxvbmcgbm9kZUlkKTsKKyAg
ICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCkgeyBoaWRlSGlnaGxpZ2h0KCk7IH0KIAogICAg
IHZvaWQgc2hvdygpOwogICAgIHZvaWQgc2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMpOwpAQCAtMjQ2
LDYgKzI1MSw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOwogICAgIHZvaWQgc3RhcnRV
c2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+KiA9IDApOwog
ICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0YXJ0UHJv
ZmlsaW5nKCkgeyBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQorICAgIHZvaWQgc3Rv
cFByb2ZpbGluZygpIHsgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQogCiAgICAgdm9p
ZCBlbmFibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZhbHNlLCBib29sIHNraXBSZWNvbXBpbGUg
PSBmYWxzZSk7CiAgICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7
CkBAIC0yNjAsNyArMjY3LDggQEAgcHVibGljOgogICAgIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250
ZW50KTsKICAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCk7CiAKLSAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CisgICAgdm9pZCByZXN1
bWUoKTsKKyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUobG9uZyBwYXVzZVN0YXRl
KTsKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3VycmVudENhbGxGcmFt
ZXMoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RM
aW5lLCBTY3JpcHRXb3JsZFR5cGUpOwpAQCAtMjg4LDcgKzI5NiwxMiBAQCBwcml2YXRlOgogCiAg
ICAgLy8gRm9sbG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJu
YWxseS4KICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKKyAgICB2
b2lkIGVuYWJsZVNlYXJjaGluZ0Zvck5vZGUoKSB7IHNldFNlYXJjaGluZ0Zvck5vZGUodHJ1ZSk7
IH0KKyAgICB2b2lkIGRpc2FibGVTZWFyY2hpbmdGb3JOb2RlKCkgeyBzZXRTZWFyY2hpbmdGb3JO
b2RlKGZhbHNlKTsgfQorCiAgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSKGJvb2wgZW5hYmxlZCk7
CisgICAgdm9pZCBlbmFibGVNb25pdG9yaW5nWEhSKCkgeyBzZXRNb25pdG9yaW5nWEhSKHRydWUp
OyB9CisgICAgdm9pZCBkaXNhYmxlTW9uaXRvcmluZ1hIUigpIHtzZXRNb25pdG9yaW5nWEhSKGZh
bHNlKTsgfQogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5l
bE5hbWUpOwogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCgpIHsgcmV0dXJuIG1fZG9t
QWdlbnQuZ2V0KCk7IH0KICAgICB2b2lkIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7
CkBAIC0zMjQsNiArMzM3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFJlc291cmNlKEluc3Bl
Y3RvclJlc291cmNlKik7CiAgICAgdm9pZCByZW1vdmVSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJj
ZSopOwogICAgIEluc3BlY3RvclJlc291cmNlKiBnZXRUcmFja2VkUmVzb3VyY2UodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKTsKKyAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChsb25nIGNhbGxJ
ZCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKIAogICAgIHZvaWQgcHJ1bmVSZXNvdXJjZXMo
UmVzb3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDApOwogICAgIHZv
aWQgcmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5lUmVzb3VyY2Vz
KG1hcCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA0OTQ2
ZmFlLi5lM2QxYmY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBA
IC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTcwLDYgKzcxLDggQEAKICNpbmNs
dWRlICJYUGF0aFJlc3VsdC5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJtYXJrdXAuaCIKKwogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtMzU0LDE0ICszNTcsNiBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobG9uZyBub2RlSWQpCiAgICAg
bV9mcm9udGVuZC0+c2V0Q2hpbGROb2Rlcyhub2RlSWQsIGNoaWxkcmVuLnJlbGVhc2UoKSk7CiB9
CiAKLWxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgpOwot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobm9kZSk7Ci19Ci0KIGxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3Rl
ZE5vZGUodW5zaWduZWQgbG9uZyBudW0pCiB7CiAgICAgaWYgKG51bSA8IG1faW5zcGVjdGVkTm9k
ZXMuc2l6ZSgpKQpAQCAtMTYzNSw2ICsxNjMwLDI4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29s
CiAgICAgbV9mcm9udGVuZC0+YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChub2RlSWRzLnJlbGVhc2Uo
KSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQor
eworICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgbWFya3VwID0gY3JlYXRlTWFya3VwKG5vZGUpOwor
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KG1hcmt1
cCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGlmICghbV9mcm9udGVu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbG9uZyBpZCA9IDA7CisgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JQYXRoKHBhdGgpOworICAgIGlmIChub2RlKQorICAgICAgICBpZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQobm9kZSk7CisKKyAgICBtX2Zyb250ZW5kLT5kaWRQdXNoTm9kZUJ5UGF0
aFRvRnJvbnRlbmQoY2FsbElkLCBpZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaAppbmRleCA3Y2Q1YTA3Li42ZjljNWZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmgKQEAgLTEzNSw4ICsxMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IE5vZGUqIG5vZGVGb3JJZChsb25nIG5vZGVJZCk7CiAgICAgICAgIGxvbmcgcHVzaE5vZGVQYXRo
VG9Gcm9udGVuZChOb2RlKiBub2RlKTsKICAgICAgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJv
bnRlbmQobG9uZyBub2RlSWQpOwotICAgICAgICBsb25nIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9u
dGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAgICAgbG9uZyBpbnNw
ZWN0ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKTsKKyAgICAgICAgdm9pZCBjb3B5Tm9kZShsb25n
IG5vZGVJZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCog
Z2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKaW5kZXggNzYx
ZTg3Ni4uODU3ZTAyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckJhY2tlbmRTdHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwpAQCAtMTg0LDcgKzE4NCw3IEBAIFdlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRzQWN0aXZhdGVkID0gZmFsc2U7CiAgICAgfSwKIAotICAgIHBhdXNlSW5EZWJ1Z2dlcjogZnVu
Y3Rpb24oKQorICAgIHBhdXNlOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKQEAgLTIwMyw3
ICsyMDMsNyBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0g
ewogICAgICAgICBXZWJJbnNwZWN0b3IuZGlkR2V0U2NyaXB0U291cmNlKGNhbGxJZCwgbnVsbCk7
CiAgICAgfSwKIAotICAgIHJlc3VtZURlYnVnZ2VyOiBmdW5jdGlvbigpCisgICAgcmVzdW1lOiBm
dW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKQEAgLTI0MywxNSArMjQzLDE1IEBAIFdlYkluc3Bl
Y3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBb
XTsKICAgICB9LAogCi0gICAgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyOiBmdW5jdGlvbigp
CisgICAgc3RlcEludG9TdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgfSwKIAotICAg
IHN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcjogZnVuY3Rpb24oKQorICAgIHN0ZXBPdXRPZkZ1
bmN0aW9uOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKLSAgICBzdGVwT3ZlclN0YXRlbWVu
dEluRGVidWdnZXI6IGZ1bmN0aW9uKCkKKyAgICBzdGVwT3ZlclN0YXRlbWVudDogZnVuY3Rpb24o
KQogICAgIHsKICAgICB9LAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcwppbmRleCAzYzRhMGJlLi4zOTJiYjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTkzMSwxMSArOTMxLDExIEBAIFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7
CiAgICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMuX3dh
aXRpbmdUb1BhdXNlID0gZmFsc2U7Ci0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlc3Vt
ZURlYnVnZ2VyKCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlc3VtZSgpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhpcy5fc3RlcHBpbmcgPSBmYWxzZTsKICAgICAg
ICAgICAgIHRoaXMuX3dhaXRpbmdUb1BhdXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucGF1c2VJbkRlYnVnZ2VyKCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnBhdXNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9jbGVhckludGVyZmFjZSgpOwpA
QCAtOTQ4LDcgKzk0OCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0g
ewogCiAgICAgICAgIHRoaXMuX2NsZWFySW50ZXJmYWNlKCk7CiAKLSAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5zdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKTsKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5zdGVwT3ZlclN0YXRlbWVudCgpOwogICAgIH0sCiAKICAgICBfc3RlcEludG9DbGlj
a2VkOiBmdW5jdGlvbigpCkBAIC05NTgsNyArOTU4LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY2xlYXJJbnRlcmZhY2UoKTsKIAot
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwor
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnN0ZXBJbnRvU3RhdGVtZW50KCk7CiAgICAgfSwKIAog
ICAgIF9zdGVwT3V0Q2xpY2tlZDogZnVuY3Rpb24oKQpAQCAtOTY4LDcgKzk2OCw3IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2NsZWFy
SW50ZXJmYWNlKCk7CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zdGVwT3V0T2ZGdW5jdGlv
bkluRGVidWdnZXIoKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zdGVwT3V0T2ZGdW5jdGlv
bigpOwogICAgIH0sCiAKICAgICBfdG9nZ2xlQnJlYWtwb2ludHNDbGlja2VkOiBmdW5jdGlvbigp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNDBiZWVjNy4uMjIxMjk5ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcApAQCAtMjk5Myw3ICsyOTkzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29udGlu
dWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3MK
ICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikgJiYg
VVNFKEpTQykKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAg
ICBpZiAocGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkKLSAgICAgICAgICAgIHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+cmVzdW1lRGVidWdnZXIoKTsKKyAgICAgICAgICAgIHBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+cmVzdW1lKCk7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDUzZjc2NjIuLmFjMWNmMjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDEwLTA3LTE0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJJbnNwZWN0
b3I6IENsZWFuLXVwIEluc3BlY3RvckJhY2tlbmQgY29kZS4gSW4gdGhlIG5leHQgY2hhbmdlcwor
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kIGNvbnRlbnQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgc2Ny
aXB0cy4gQXMgZmFyIGFzCisgICAgICAgIGdlbmVyYXRvciBpcyB2ZXJ5IHNpbXBsZSB0aGluZyBh
bGwgbm9udHJpdmlhbCBmdW5jdGlvbiBzaG91bGQgYmUKKyAgICAgICAgbW92ZWQgdG8gSW5zcGVj
dG9yQ29udHJvbGxlciBhbmQgRE9NQWdlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MjE3MQorCisgICAgICAgICogc3JjL2pzL0luc3BlY3RvckNv
bnRyb2xsZXJJbXBsLmpzOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwp
OgorICAgICAgICAoLmRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVz
ZSk6CisgICAgICAgICguZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnJl
c3VtZSk6CisgICAgICAgICguZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
LnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKC5kZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5k
SW1wbC5wcm90b3R5cGUuc3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoLmRldnRvb2xzLklu
c3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAg
IChlbHNlLmRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZSk6CisK
IDIwMTAtMDctMTMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0lu
c3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCmluZGV4IGNiZTYwN2QuLmNhYTBkODEgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwpAQCAt
MTExLDEwICsxMTEsMTAgQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlv
bigpCiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVtb3Zl
QnJlYWtwb2ludCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0
ZV8oImFjdGl2YXRlQnJlYWtwb2ludHMiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250
cm9sbGVyRGVsZWdhdGVfKCJkZWFjdGl2YXRlQnJlYWtwb2ludHMiKTsKLSAgICB0aGlzLmluc3Rh
bGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZXN1bWVEZWJ1Z2dlciIpOwotICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBJbnRvU3RhdGVtZW50
SW5EZWJ1Z2dlciIpOwotICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0
ZV8oInN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlciIpOwotICAgIHRoaXMuaW5zdGFsbEluc3Bl
Y3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlciIpOwor
ICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlc3VtZSIpOwor
ICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBJbnRvU3Rh
dGVtZW50Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygi
c3RlcE91dE9mRnVuY3Rpb24iKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVy
RGVsZWdhdGVfKCJzdGVwT3ZlclN0YXRlbWVudCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3Rv
ckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiKTsKICAgICB9
CiB9OwpAQCAtMTY2LDMxICsxNjYsMzEgQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwu
cHJvdG90eXBlLmRlYWN0aXZhdGVCcmVha3BvaW50cyA9IGZ1bmN0aW9uKCkKIH07CiAKIAotZGV2
dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnBhdXNlSW5EZWJ1Z2dlciA9IGZ1
bmN0aW9uKCkKK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZSA9
IGZ1bmN0aW9uKCkKIHsKICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucGF1
c2VFeGVjdXRpb24oKTsKIH07CiAKIAotZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJv
dG90eXBlLnJlc3VtZURlYnVnZ2VyID0gZnVuY3Rpb24oKQorZGV2dG9vbHMuSW5zcGVjdG9yQmFj
a2VuZEltcGwucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBkZXZ0b29scy50
b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzdW1lRXhlY3V0aW9uKCk7CiB9OwogCiAKLWRldnRv
b2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwSW50b1N0YXRlbWVudEluRGVi
dWdnZXIgPSBmdW5jdGlvbigpCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5
cGUuc3RlcEludG9TdGF0ZW1lbnQgPSBmdW5jdGlvbigpCiB7CiAgICAgZGV2dG9vbHMudG9vbHMu
Z2V0RGVidWdnZXJBZ2VudCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7CiB9OwogCiAKLWRldnRvb2xz
Lkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdn
ZXIgPSBmdW5jdGlvbigpCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUu
c3RlcE91dE9mRnVuY3Rpb24gPSBmdW5jdGlvbigpCiB7CiAgICAgZGV2dG9vbHMudG9vbHMuZ2V0
RGVidWdnZXJBZ2VudCgpLnN0ZXBPdXRPZkZ1bmN0aW9uKCk7CiB9OwogCiAKLWRldnRvb2xzLklu
c3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIg
PSBmdW5jdGlvbigpCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc3Rl
cE92ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbigpCiB7CiAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVi
dWdnZXJBZ2VudCgpLnN0ZXBPdmVyU3RhdGVtZW50KCk7CiB9OwpAQCAtMjI3LDcgKzIyNyw3IEBA
IGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRQYXVzZU9uRXhjZXB0
aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKQogCiB9IGVsc2UgewogCi1kZXZ0b29scy5JbnNwZWN0b3JC
YWNrZW5kSW1wbC5wcm90b3R5cGUucGF1c2VJbkRlYnVnZ2VyID0gZnVuY3Rpb24oKQorZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKQogewog
ICAgIFJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yLkRlYnVnZ2VyUGF1c2VTY3JpcHQoKTsK
IH07Cg==
</data>
<flag name="review"
          id="49521"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>