<?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>49974</bug_id>
          
          <creation_ts>2010-11-23 07:34:38 -0800</creation_ts>
          <short_desc>Web Inspector: Request JSON-serialized heap profile.</short_desc>
          <delta_ts>2010-11-29 16:19:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312835</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-23 07:34:38 -0800</bug_when>
    <thetext>This is the first step in migrating to new heap profiles.

This change still requests old (aggregated) profiles, but using JSON serialization mechanism.
This makes heap profiling API simple, and makes saving heap snapshots possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312837</commentid>
    <comment_count>1</comment_count>
      <attachid>74661</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-23 07:44:44 -0800</bug_when>
    <thetext>Created attachment 74661
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312847</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-23 08:03:23 -0800</bug_when>
    <thetext>Attachment 74661 did not build on win:
Build output: http://queues.webkit.org/results/6316008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312850</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-23 08:06:05 -0800</bug_when>
    <thetext>Attachment 74661 did not build on qt:
Build output: http://queues.webkit.org/results/6411018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312851</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-23 08:07:46 -0800</bug_when>
    <thetext>Attachment 74661 did not build on mac:
Build output: http://queues.webkit.org/results/6342014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312859</commentid>
    <comment_count>5</comment_count>
      <attachid>74670</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-23 08:21:43 -0800</bug_when>
    <thetext>Created attachment 74670
fix WK compilation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312988</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-23 13:07:38 -0800</bug_when>
    <thetext>Removed [chromium] from title since this appears to affect more than Chromium files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312998</commentid>
    <comment_count>7</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-23 13:35:14 -0800</bug_when>
    <thetext>David, although formally you&apos;re right, in fact this code does work only in Chromium. For JSC, there is only a stub in bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313259</commentid>
    <comment_count>8</comment_count>
      <attachid>74670</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-24 06:06:12 -0800</bug_when>
    <thetext>Comment on attachment 74670
fix WK compilation

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

&gt; WebCore/ChangeLog:5
&gt; +        [Chromium] Request JSON-serialized heap profile.

Please use Web Inspector prefix. It would be nice to see more details on the change in the ChangeLog.

&gt; WebCore/bindings/js/ScriptHeapSnapshot.h:44
&gt; +        virtual void WriteChunk(const String&amp; chunk) = 0;

OutputStream&apos;s API is fairly conservative: Write, Flush and Close.

&gt; WebCore/bindings/v8/ScriptHeapSnapshot.cpp:56
&gt; +class OutputStreamAdaptor : public v8::OutputStream {

Adapter?

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:38
&gt; +    get done() {

{ on the next line.

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:42
&gt; +    get isElement() {

ditto x 7

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:145
&gt; +        this._nodeTypeOffset = meta.fields.indexOf(&apos;type&apos;);

This does not sound optimal:

for (var i = 0; i &lt; fields.length; ++i)
  map [fields[i]] = i;

this._nodeNameOffset = map[&apos;name&apos;];
this._nodeIdOffset = map[&apos;id&apos;];

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:147
&gt; +        this._nodeIdOffset = meta.fields.indexOf(&apos;id&apos;);

Please use double quotes.

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:435
&gt; +        if (!this._loadedCallbacks[uid]) return;

return on the next line please.

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:443
&gt; +        this._loadedCallbacks[uid].callback(profile);

this._loadedCallbacks[uid](profile); (bind other arguments should you need them).

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:538
&gt; +            if (node.isHidden) {

No { } for single lines.

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:539
&gt; +                result.lowlevels[node.name] = { count: node.instancesCount, size: node.selfSize, type: node.name };

{count</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313338</commentid>
    <comment_count>9</comment_count>
      <attachid>74670</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-24 09:24:27 -0800</bug_when>
    <thetext>Comment on attachment 74670
fix WK compilation

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

&gt;&gt; WebCore/ChangeLog:5
&gt;&gt; +        [Chromium] Request JSON-serialized heap profile.
&gt; 
&gt; Please use Web Inspector prefix. It would be nice to see more details on the change in the ChangeLog.

Details provided.

&gt;&gt; WebCore/bindings/js/ScriptHeapSnapshot.h:44
&gt;&gt; +        virtual void WriteChunk(const String&amp; chunk) = 0;
&gt; 
&gt; OutputStream&apos;s API is fairly conservative: Write, Flush and Close.

I don&apos;t need Flush. Changed to Write and Close.

&gt;&gt; WebCore/bindings/v8/ScriptHeapSnapshot.cpp:56
&gt;&gt; +class OutputStreamAdaptor : public v8::OutputStream {
&gt; 
&gt; Adapter?

Both &quot;Adaptor&quot; and &quot;Adapter&quot; are valid. But as I see, &quot;Adapter&quot; is used more frequently in WK sources. Changing to &quot;Adapter&quot;.

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:38
&gt;&gt; +    get done() {
&gt; 
&gt; { on the next line.

Fixed

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:42
&gt;&gt; +    get isElement() {
&gt; 
&gt; ditto x 7

Fixed

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:145
&gt;&gt; +        this._nodeTypeOffset = meta.fields.indexOf(&apos;type&apos;);
&gt; 
&gt; This does not sound optimal:
&gt; 
&gt; for (var i = 0; i &lt; fields.length; ++i)
&gt;   map [fields[i]] = i;
&gt; 
&gt; this._nodeNameOffset = map[&apos;name&apos;];
&gt; this._nodeIdOffset = map[&apos;id&apos;];

This array has &lt; 10 elements, and this code runs only once, so using linear search is fine.

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:147
&gt;&gt; +        this._nodeIdOffset = meta.fields.indexOf(&apos;id&apos;);
&gt; 
&gt; Please use double quotes.

Done.

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:435
&gt;&gt; +        if (!this._loadedCallbacks[uid]) return;
&gt; 
&gt; return on the next line please.

Done.

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:443
&gt;&gt; +        this._loadedCallbacks[uid].callback(profile);
&gt; 
&gt; this._loadedCallbacks[uid](profile); (bind other arguments should you need them).

Fixed.

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:538
&gt;&gt; +            if (node.isHidden) {
&gt; 
&gt; No { } for single lines.

Fixed.

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:539
&gt;&gt; +                result.lowlevels[node.name] = { count: node.instancesCount, size: node.selfSize, type: node.name };
&gt; 
&gt; {count

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313430</commentid>
    <comment_count>10</comment_count>
      <attachid>74786</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-24 13:07:07 -0800</bug_when>
    <thetext>Created attachment 74786
Pavel&apos;s comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313437</commentid>
    <comment_count>11</comment_count>
      <attachid>74788</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-24 13:28:12 -0800</bug_when>
    <thetext>Created attachment 74788
Previous patch rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314588</commentid>
    <comment_count>12</comment_count>
      <attachid>74788</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-29 13:20:06 -0800</bug_when>
    <thetext>Comment on attachment 74788
Previous patch rebased

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

&gt; WebCore/bindings/js/ScriptHeapSnapshot.h:43
&gt; +        virtual ~OutputStream() {}

{ }

&gt; WebCore/bindings/js/ScriptHeapSnapshot.h:53
&gt; +    void writeJSON(OutputStream*) {}

{ }

&gt; WebCore/inspector/front-end/HeapSnapshotView.js:73
&gt; +    get _nameOrIndex()

We don&apos;t use getters for private fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314714</commentid>
    <comment_count>13</comment_count>
      <attachid>74788</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-29 16:17:59 -0800</bug_when>
    <thetext>Comment on attachment 74788
Previous patch rebased

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

&gt;&gt; WebCore/bindings/js/ScriptHeapSnapshot.h:43
&gt;&gt; +        virtual ~OutputStream() {}
&gt; 
&gt; { }

Fixed

&gt;&gt; WebCore/bindings/js/ScriptHeapSnapshot.h:53
&gt;&gt; +    void writeJSON(OutputStream*) {}
&gt; 
&gt; { }

Fixed

&gt;&gt; WebCore/inspector/front-end/HeapSnapshotView.js:73
&gt;&gt; +    get _nameOrIndex()
&gt; 
&gt; We don&apos;t use getters for private fields.

Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314717</commentid>
    <comment_count>14</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-11-29 16:19:21 -0800</bug_when>
    <thetext>Manually committed as https://trac.webkit.org/changeset/72843:


2010-11-29  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        WebInspector: Request JSON-serialized heap snapshot from JS engine.
        This simplifies heap snapshots interaction and API. Instead of
        having objects representing snapshot entities, the whole snapshot
        is transferred to WebInspector and parsed there.

        https://bugs.webkit.org/show_bug.cgi?id=49974

        * bindings/js/ScriptHeapSnapshot.h:
        (WebCore::ScriptHeapSnapshot::OutputStream::~OutputStream):
        (WebCore::ScriptHeapSnapshot::~ScriptHeapSnapshot):
        (WebCore::ScriptHeapSnapshot::writeJSON):
        (WebCore::ScriptHeapSnapshot::ScriptHeapSnapshot):
        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::writeJSON):
        * bindings/v8/ScriptHeapSnapshot.h:
        (WebCore::ScriptHeapSnapshot::OutputStream::~OutputStream):
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfile):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotEdgesIterator):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get done):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get isElement):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get isHidden):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get name):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.next):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get node):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get nodeIndex):
        (WebInspector.HeapSnapshotEdgesIterator.prototype._getNameOrIndex):
        (WebInspector.HeapSnapshotEdgesIterator.prototype._getType):
        (WebInspector.HeapSnapshotNodeWrapper):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get edges):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get edgesCount):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get instancesCount):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get isHidden):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get name):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get selfSize):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getName):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getEdges):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getType):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype.get rootEdges):
        (WebInspector.HeapSnapshotView.prototype.snapshotLoaded):
        (WebInspector.HeapSnapshotView.prototype._loadProfile.processLoadedSnapshot):
        (WebInspector.HeapSnapshotView.prototype._loadProfile):
        (WebInspector.HeapSnapshotView.prototype._convertSnapshot):
        (WebInspector.HeapSnapshotView.prototype._prepareProfile.mergeRetainers):
        (WebInspector.HeapSnapshotView.prototype._prepareProfile):
        (WebInspector.HeapSnapshotView.prototype._sortData):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype.finishHeapSnapshot):
        * inspector/front-end/inspector.js:
        (WebInspector.addHeapSnapshotChunk):
        (WebInspector.finishHeapSnapshot):</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74661</attachid>
            <date>2010-11-23 07:44:44 -0800</date>
            <delta_ts>2010-11-23 08:21:43 -0800</delta_ts>
            <desc>patch</desc>
            <filename>49974-patch</filename>
            <type>text/plain</type>
            <size>21008</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzVhMWMzMS4uMzMyZjk5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAxMC0xMS0yMyAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVxdWVzdCBKU09OLXNlcmlhbGl6ZWQg
aGVhcCBwcm9maWxlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTk3NAorCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6d3JpdGVKU09OKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtOjp+T3V0cHV0U3RyZWFtKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjpnZXRQcm9maWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZXNJdGVyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJ
dGVyYXRvci5wcm90b3R5cGUuZ2V0IGRvbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBpc0VsZW1lbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBpc0hp
ZGRlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvci5w
cm90b3R5cGUuZ2V0IG5hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VzSXRlcmF0b3IucHJvdG90eXBlLm5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBub2RlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZS5nZXQgbm9kZUluZGV4
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3Rv
dHlwZS5nZXQgX25hbWVPckluZGV4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZS5nZXQgX3R5cGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGVkZ2VzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGVkZ2VzQ291bnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlw
ZS5nZXQgaW5zdGFuY2VzQ291bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgaXNIaWRkZW4pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgbmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBzZWxm
U2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJv
dG90eXBlLmdldCBfbmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZVdyYXBwZXIucHJvdG90eXBlLmdldCBfZWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgX3R5cGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90LnByb3RvdHlwZS5faW5pdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5nZXQgcm9vdEVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZS5zbmFwc2hvdExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2xvYWRQcm9maWxlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fY29udmVydFNuYXBzaG90KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fc29ydERh
dGEpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuZmluaXNoSGVhcFNuYXBzaG90
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5hZGRIZWFwU25hcHNob3RDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuZmluaXNoSGVhcFNuYXBzaG90KToKKwogMjAxMC0xMS0yMyAgQWxleGFuZGVyIFBhdmxvdiAg
PGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5jcHAKaW5kZXggODg1
ZDAzOS4uNTEwZDk4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFw
U25hcHNob3QuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90
LmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx2OC1wcm9m
aWxlci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNTAsNTAgKzUxLDI5IEBAIHVuc2lnbmVkIGludCBTY3JpcHRIZWFwU25hcHNob3Q6
OnVpZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc25hcHNob3QtPkdldFVpZCgpOwogfQogCi1zdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yKGNv
bnN0IHY4OjpIZWFwR3JhcGhOb2RlKiByb290KQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvd0xldmVscyA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZW50cmll
cyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gY2hpbGRyZW4gPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwLCBjb3VudCA9IHJvb3QtPkdldENoaWxkcmVuQ291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIG5vZGUgPSByb290LT5HZXRDaGlsZChp
KS0+R2V0VG9Ob2RlKCk7Ci0gICAgICAgIGlmIChub2RlLT5HZXRUeXBlKCkgPT0gdjg6OkhlYXBH
cmFwaE5vZGU6OmtJbnRlcm5hbCkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbG93TGV2ZWwgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbG93
TGV2ZWwtPnNldE51bWJlcigiY291bnQiLCBub2RlLT5HZXRJbnN0YW5jZXNDb3VudCgpKTsKLSAg
ICAgICAgICAgIGxvd0xldmVsLT5zZXROdW1iZXIoInNpemUiLCBub2RlLT5HZXRTZWxmU2l6ZSgp
KTsKLSAgICAgICAgICAgIGxvd0xldmVsLT5zZXRTdHJpbmcoInR5cGUiLCB0b1dlYkNvcmVTdHJp
bmcobm9kZS0+R2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICBsb3dMZXZlbHMtPnNldE9iamVjdCh0
b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSwgbG93TGV2ZWwpOwotICAgICAgICB9IGVs
c2UgaWYgKG5vZGUtPkdldEluc3RhbmNlc0NvdW50KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFtZSIsIHRvV2ViQ29yZVN0cmlu
Zyhub2RlLT5HZXROYW1lKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXROdW1iZXIoImNvdW50
Iiwgbm9kZS0+R2V0SW5zdGFuY2VzQ291bnQoKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0TnVt
YmVyKCJzaXplIiwgbm9kZS0+R2V0U2VsZlNpemUoKSk7Ci0gICAgICAgICAgICBlbnRyaWVzLT5z
ZXRPYmplY3QodG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUoKSksIGVudHJ5KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVudHJ5ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmco
ImNvbnN0cnVjdG9yTmFtZSIsIHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpKTsKLSAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwLCBjb3VudCA9IG5vZGUtPkdldENoaWxkcmVuQ291bnQo
KTsgaiA8IGNvdW50OyArK2opIHsKLSAgICAgICAgICAgICAgICBjb25zdCB2ODo6SGVhcEdyYXBo
RWRnZSogdjhFZGdlID0gbm9kZS0+R2V0Q2hpbGQoaik7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
djg6OkhlYXBHcmFwaE5vZGUqIHY4Q2hpbGQgPSB2OEVkZ2UtPkdldFRvTm9kZSgpOwotICAgICAg
ICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxkID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+c2V0U3RyaW5nKCJjb25zdHJ1Y3Rv
ck5hbWUiLCB0b1dlYkNvcmVTdHJpbmcodjhDaGlsZC0+R2V0TmFtZSgpKSk7Ci0gICAgICAgICAg
ICAgICAgY2hpbGQtPnNldE51bWJlcigiY291bnQiLCB2OEVkZ2UtPkdldE5hbWUoKS0+VG9JbnRl
Z2VyKCktPlZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRPYmplY3QoU3RyaW5n
OjpudW1iZXIocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHY4Q2hpbGQpKSwg
Y2hpbGQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hpbGRyZW4tPnNldE9iamVjdChT
dHJpbmc6Om51bWJlcihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obm9kZSkp
LCBlbnRyeSk7Ci0gICAgICAgIH0KK25hbWVzcGFjZSB7CisKK2NsYXNzIE91dHB1dFN0cmVhbUFk
YXB0b3IgOiBwdWJsaWMgdjg6Ok91dHB1dFN0cmVhbSB7CitwdWJsaWM6CisgICAgT3V0cHV0U3Ry
ZWFtQWRhcHRvcihTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1dFN0cmVhbSogb3V0cHV0KQorICAg
ICAgICA6IG1fb3V0cHV0KG91dHB1dCkgeyB9CisgICAgdm9pZCBFbmRPZlN0cmVhbSgpIHsgbV9v
dXRwdXQtPkVuZE9mU25hcHNob3QoKTsgfQorICAgIGludCBHZXRDaHVua1NpemUoKSB7IHJldHVy
biAxMDI0MDsgfQorICAgIFdyaXRlUmVzdWx0IFdyaXRlQXNjaWlDaHVuayhjaGFyKiBkYXRhLCBp
bnQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fb3V0cHV0LT5Xcml0ZUNodW5rKFN0cmluZyhkYXRh
LCBzaXplKSk7CisgICAgICAgIHJldHVybiBrQ29udGludWU7CiAgICAgfQotICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJsb3dsZXZlbHMiLCBsb3dMZXZlbHMpOwotICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJlbnRyaWVzIiwgZW50cmllcyk7Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoImNoaWxkcmVuIiwg
Y2hpbGRyZW4pOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQorcHJpdmF0ZToKKyAg
ICBTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1dFN0cmVhbSogbV9vdXRwdXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gU2NyaXB0SGVhcFNuYXBz
aG90OjpidWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSBjb25zdAordm9pZCBTY3JpcHRIZWFw
U25hcHNob3Q6OndyaXRlSlNPTihTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1dFN0cmVhbSogc3Ry
ZWFtKQogewotICAgIHJldHVybiBidWlsZEluc3BlY3Rvck9iamVjdEZvcihtX3NuYXBzaG90LT5H
ZXRSb290KCkpOworICAgIE91dHB1dFN0cmVhbUFkYXB0b3Igb3V0cHV0U3RyZWFtKHN0cmVhbSk7
CisgICAgbV9zbmFwc2hvdC0+U2VyaWFsaXplKCZvdXRwdXRTdHJlYW0sIHY4OjpIZWFwU25hcHNo
b3Q6OmtKU09OKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0SGVhcFNuYXBzaG90LmgKaW5kZXggNzk0YTVhOS4uMjk2N2Q2ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCkBAIC00Myw2ICs0MywxMyBAQCBjbGFz
cyBJbnNwZWN0b3JPYmplY3Q7CiAKIGNsYXNzIFNjcmlwdEhlYXBTbmFwc2hvdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNjcmlwdEhlYXBTbmFwc2hvdD4gewogcHVibGljOgorICAgIGNsYXNzIE91dHB1
dFN0cmVhbSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PdXRwdXRTdHJlYW0oKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIFdyaXRlQ2h1bmsoY29uc3QgU3RyaW5nJiBjaHVuaykg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgRW5kT2ZTbmFwc2hvdCgpID0gMDsKKyAgICB9Owor
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBjcmVhdGUoY29uc3Qg
djg6OkhlYXBTbmFwc2hvdCogc25hcHNob3QpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNjcmlwdEhlYXBTbmFwc2hvdChzbmFwc2hvdCkpOwpAQCAtNTEsOCArNTgsNyBAQCBw
dWJsaWM6CiAKICAgICBTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgdWlk
KCkgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRJbnNwZWN0
b3JPYmplY3RGb3JIZWFkKCkgY29uc3Q7CisgICAgdm9pZCB3cml0ZUpTT04oT3V0cHV0U3RyZWFt
KiBzdHJlYW0pOwogCiBwcml2YXRlOgogICAgIFNjcmlwdEhlYXBTbmFwc2hvdChjb25zdCB2ODo6
SGVhcFNuYXBzaG90KiBzbmFwc2hvdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDI5YTNi
YTAuLjJhMTM4OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtNTgsMTAgKzU4LDEyIEBA
IG1vZHVsZSBjb3JlIHsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCiAgICAgICAgIFtub3RpZnldIHZvaWQgYWRk
UHJvZmlsZUhlYWRlcihvdXQgT2JqZWN0IGhlYWRlcik7CisgICAgICAgIFtub3RpZnldIHZvaWQg
YWRkSGVhcFNuYXBzaG90Q2h1bmsob3V0IHVuc2lnbmVkIGxvbmcgdWlkLCBvdXQgU3RyaW5nIGNo
dW5rKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBhdHRhY2hEZWJ1Z2dlcldoZW5TaG93bigpOwog
ICAgICAgICBbbm90aWZ5XSB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpOwogICAgICAgICBbbm90
aWZ5XSB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBm
YWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGRhdGEs
IG91dCBpbnQgZmlyc3RMaW5lLCBvdXQgaW50IGVycm9yTGluZSwgb3V0IFN0cmluZyBlcnJvck1l
c3NhZ2UpOworICAgICAgICBbbm90aWZ5XSB2b2lkIGZpbmlzaEhlYXBTbmFwc2hvdChvdXQgdW5z
aWduZWQgbG9uZyB1aWQpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHBhcnNlZFNjcmlwdFNvdXJj
ZShvdXQgU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmluZyBkYXRhLCBv
dXQgaW50IGZpcnN0TGluZSwgb3V0IGludCBzY3JpcHRXb3JsZFR5cGUpOwogICAgICAgICBbbm90
aWZ5XSB2b2lkIHBhdXNlZFNjcmlwdChvdXQgT2JqZWN0IGRldGFpbHMpOwogICAgICAgICBbbm90
aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRW5hYmxlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCAzZjEwN2Q2Li5hNTNjOWY1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMTU2LDYgKzE1Niwy
MSBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpCiAgICAgICAgICgqaGVhZGVycyktPnB1c2hPYmpl
Y3QoY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpKTsKIH0KIAorbmFtZXNwYWNlIHsK
KworY2xhc3MgT3V0cHV0U3RyZWFtIDogcHVibGljIFNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0
U3RyZWFtIHsKK3B1YmxpYzoKKyAgICBPdXRwdXRTdHJlYW0oSW5zcGVjdG9yRnJvbnRlbmQqIGZy
b250ZW5kLCB1bnNpZ25lZCBsb25nIHVpZCkKKyAgICAgICAgOiBtX2Zyb250ZW5kKGZyb250ZW5k
KSwgbV91aWQodWlkKSB7IH0KKyAgICB2b2lkIFdyaXRlQ2h1bmsoY29uc3QgU3RyaW5nJiBjaHVu
aykgeyBtX2Zyb250ZW5kLT5hZGRIZWFwU25hcHNob3RDaHVuayhtX3VpZCwgY2h1bmspOyB9Cisg
ICAgdm9pZCBFbmRPZlNuYXBzaG90KCkgeyBtX2Zyb250ZW5kLT5maW5pc2hIZWFwU25hcHNob3Qo
bV91aWQpOyB9Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwor
ICAgIHVuc2lnbmVkIGxvbmcgbV91aWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCiB2b2lkIElu
c3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNp
Z25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQogewogICAg
IGlmICh0eXBlID09IENQVVByb2ZpbGVUeXBlKSB7CkBAIC0xNjcsOCArMTgyLDEyIEBAIHZvaWQg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5cGUsIHVu
c2lnbmVkIHVpZCwgUmVmUHRyCiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlw
ZSkgewogICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3Rz
LmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3RzLmVuZCgpKSB7Ci0gICAg
ICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25k
KTsKLSAgICAgICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5z
ZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
ICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlU25hcHNob3RIZWFkZXIoKnNuYXBzaG90KTsKKyAgICAg
ICAgICAgIGlmIChtX2Zyb250ZW5kKSB7CisgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0
cmVhbShtX2Zyb250ZW5kLCB1aWQpOworICAgICAgICAgICAgICAgIHNuYXBzaG90LT53cml0ZUpT
T04oJnN0cmVhbSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCmluZGV4IDZiY2Mw
ZmYuLmY1ZjY4OGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25h
cHNob3RWaWV3LmpzCkBAIC0yNyw2ICsyNywxNDUgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IgPSBm
dW5jdGlvbihzbmFwc2hvdCwgZWRnZXMpCit7CisgICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hv
dDsKKyAgICB0aGlzLl9lZGdlcyA9IGVkZ2VzOworICAgIHRoaXMuX2VkZ2VJbmRleCA9IDA7Cit9
CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsK
KyAgICBnZXQgZG9uZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbmRleCA+PSB0aGlz
Ll9lZGdlcy5sZW5ndGg7CisgICAgfSwKKworICAgIGdldCBpc0VsZW1lbnQoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl90eXBlID09PSB0aGlzLl9zbmFwc2hvdC5fZWRnZUVsZW1lbnRUeXBlOwor
ICAgIH0sCisKKyAgICBnZXQgaXNIaWRkZW4oKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90eXBl
ID09PSB0aGlzLl9zbmFwc2hvdC5fZWRnZUhpZGRlblR5cGU7CisgICAgfSwKKworICAgIGdldCBu
YW1lKCkgeworICAgICAgICByZXR1cm4gdGhpcy5pc0VsZW1lbnQgfHwgdGhpcy5pc0hpZGRlbiA/
IHRoaXMuX25hbWVPckluZGV4IDogdGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fbmFtZU9y
SW5kZXhdOworICAgIH0sCisKKyAgICBuZXh0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5f
ZWRnZUluZGV4ICs9IHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgfSwKKwor
ICAgIGdldCBub2RlKCkgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlV3JhcHBlcih0aGlzLl9zbmFwc2hvdCwgdGhpcy5ub2RlSW5kZXgpOworICAgIH0s
CisKKyAgICBnZXQgbm9kZUluZGV4KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXNbdGhp
cy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUb05vZGVPZmZzZXRdOworICAgIH0s
CisKKyAgICBnZXQgX25hbWVPckluZGV4KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXNb
dGhpcy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VOYW1lT2Zmc2V0XTsKKyAgICB9
LAorCisgICAgZ2V0IF90eXBlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXNbdGhpcy5f
ZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUeXBlT2Zmc2V0XTsKKyAgICB9Cit9Owor
CitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIgPSBmdW5jdGlvbihzbmFwc2hv
dCwgbm9kZUluZGV4KQoreworICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CisgICAgdGhp
cy5fbm9kZXMgPSBzbmFwc2hvdC5fbm9kZXM7CisgICAgdGhpcy5fbm9kZUluZGV4ID0gbm9kZUlu
ZGV4OworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBl
ID0geworICAgIGdldCBlZGdlcygpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9lZGdl
cyk7CisgICAgfSwKKworICAgIGdldCBlZGdlc0NvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3Vu
dE9mZnNldF07CisgICAgfSwKKworICAgIGdldCBpbnN0YW5jZXNDb3VudCgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3Qu
X25vZGVJbnN0YW5jZXNDb3VudE9mZnNldF07CisgICAgfSwKKworICAgIGdldCBpc0hpZGRlbigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gdGhpcy5fc25hcHNob3QuX25v
ZGVIaWRkZW5UeXBlOworICAgIH0sCisKKyAgICBnZXQgbmFtZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fbmFtZV07CisgICAgfSwKKworICAg
IGdldCBzZWxmU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5f
bm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVTZWxmU2l6ZU9mZnNldF07IAorICAgIH0s
CisKKyAgICBnZXQgX25hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3Ro
aXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlTmFtZU9mZnNldF07IAorICAgIH0s
CisKKyAgICBnZXQgX2VkZ2VzKCkKKyAgICB7CisgICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9
IHRoaXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9maXJzdEVkZ2VPZmZzZXQ7CisgICAg
ICAgIHJldHVybiB0aGlzLl9ub2Rlcy5zbGljZShmaXJzdEVkZ2VJbmRleCwgZmlyc3RFZGdlSW5k
ZXggKyB0aGlzLmVkZ2VzQ291bnQgKiB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50KTsK
KyAgICB9LAorCisgICAgZ2V0IF90eXBlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9u
b2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9kZVR5cGVPZmZzZXRdOwor
ICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3QgPSBmdW5jdGlvbihwcm9maWxl
KQoreworICAgIHRoaXMuX3Byb2ZpbGUgPSBwcm9maWxlOworICAgIHRoaXMuX25vZGVzID0gcHJv
ZmlsZS5ub2RlczsKKyAgICB0aGlzLl9zdHJpbmdzID0gcHJvZmlsZS5zdHJpbmdzOworCisgICAg
dGhpcy5faW5pdCgpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9
IHsKKyAgICBfaW5pdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWV0YU5vZGVJ
bmRleCA9IDA7CisgICAgICAgIHRoaXMuX3Jvb3ROb2RlSW5kZXggPSAxOworICAgICAgICB2YXIg
bWV0YSA9IHRoaXMuX25vZGVzW3RoaXMuX21ldGFOb2RlSW5kZXhdOworICAgICAgICB0aGlzLl9u
b2RlVHlwZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoJ3R5cGUnKTsKKyAgICAgICAgdGhp
cy5fbm9kZU5hbWVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCduYW1lJyk7CisgICAgICAg
IHRoaXMuX25vZGVJZE9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoJ2lkJyk7CisgICAgICAg
IHRoaXMuX25vZGVJbnN0YW5jZXNDb3VudE9mZnNldCA9IHRoaXMuX25vZGVJZE9mZnNldDsKKyAg
ICAgICAgdGhpcy5fbm9kZVNlbGZTaXplT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZignc2Vs
Zl9zaXplJyk7CisgICAgICAgIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQgPSBtZXRhLmZpZWxkcy5p
bmRleE9mKCdjaGlsZHJlbl9jb3VudCcpOworICAgICAgICB0aGlzLl9maXJzdEVkZ2VPZmZzZXQg
PSBtZXRhLmZpZWxkcy5pbmRleE9mKCdjaGlsZHJlbicpOworICAgICAgICB0aGlzLl9ub2RlVHlw
ZXMgPSBtZXRhLnR5cGVzW3RoaXMuX25vZGVUeXBlT2Zmc2V0XTsKKyAgICAgICAgdGhpcy5fbm9k
ZUhpZGRlblR5cGUgPSB0aGlzLl9ub2RlVHlwZXMuaW5kZXhPZignaGlkZGVuJyk7CisgICAgICAg
IHZhciBlZGdlc01ldGEgPSBtZXRhLnR5cGVzW3RoaXMuX2ZpcnN0RWRnZU9mZnNldF07CisgICAg
ICAgIHRoaXMuX2VkZ2VGaWVsZHNDb3VudCA9IGVkZ2VzTWV0YS5maWVsZHMubGVuZ3RoOworICAg
ICAgICB0aGlzLl9lZGdlVHlwZU9mZnNldCA9IGVkZ2VzTWV0YS5maWVsZHMuaW5kZXhPZigndHlw
ZScpOworICAgICAgICB0aGlzLl9lZGdlTmFtZU9mZnNldCA9IGVkZ2VzTWV0YS5maWVsZHMuaW5k
ZXhPZignbmFtZV9vcl9pbmRleCcpOworICAgICAgICB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0ID0g
ZWRnZXNNZXRhLmZpZWxkcy5pbmRleE9mKCd0b19ub2RlJyk7CisgICAgICAgIHRoaXMuX2VkZ2VU
eXBlcyA9IGVkZ2VzTWV0YS50eXBlc1t0aGlzLl9lZGdlVHlwZU9mZnNldF07CisgICAgICAgIHRo
aXMuX2VkZ2VFbGVtZW50VHlwZSA9IHRoaXMuX2VkZ2VUeXBlcy5pbmRleE9mKCdlbGVtZW50Jyk7
CisgICAgICAgIHRoaXMuX2VkZ2VIaWRkZW5UeXBlID0gdGhpcy5fZWRnZVR5cGVzLmluZGV4T2Yo
J2hpZGRlbicpOworICAgIH0sCisKKyAgICBnZXQgcm9vdEVkZ2VzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiAobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLCB0
aGlzLl9yb290Tm9kZUluZGV4KSkuZWRnZXM7CisgICAgfQorfTsKIAogV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFZpZXcgPSBmdW5jdGlvbihwYXJlbnQsIHByb2ZpbGUpCiB7CkBAIC05NCw2ICsy
MzMsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwg
cHJvZmlsZSkKICAgICB0aGlzLnBlcmNlbnRCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1
c0JhckJ1dHRvbigiIiwgInBlcmNlbnQtdGltZS1zdGF0dXMtYmFyLWl0ZW0gc3RhdHVzLWJhci1p
dGVtIik7CiAgICAgdGhpcy5wZXJjZW50QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
dGhpcy5fcGVyY2VudENsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCisgICAgdGhpcy5fbG9h
ZGVkQ2FsbGJhY2tzID0gW107CiAgICAgdGhpcy5fbG9hZFByb2ZpbGUodGhpcy5wcm9maWxlLCBw
cm9maWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAKICAgICBmdW5jdGlvbiBwcm9maWxlQ2FsbGJh
Y2socHJvZmlsZSkKQEAgLTI5MCw2ICs0MzAsMjAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl91cGRhdGVTdW1tYXJ5R3JhcGgoKTsK
ICAgICB9LAogCisgICAgc25hcHNob3RMb2FkZWQ6IGZ1bmN0aW9uKHVpZCwgbG9hZGVkU25hcHNo
b3QpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZENhbGxiYWNrc1t1aWRdKSByZXR1
cm47CisgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fbG9hZGVkQ2FsbGJhY2tzW3VpZF0ucHJv
ZmlsZTsKKyAgICAgICAgdmFyIHNuYXBzaG90ID0gdGhpcy5fY29udmVydFNuYXBzaG90KGxvYWRl
ZFNuYXBzaG90KTsKKyAgICAgICAgcHJvZmlsZS5jaGlsZHJlbiA9IHNuYXBzaG90LmNoaWxkcmVu
OworICAgICAgICBwcm9maWxlLmVudHJpZXMgPSBzbmFwc2hvdC5lbnRyaWVzOworICAgICAgICBw
cm9maWxlLmxvd2xldmVscyA9IHNuYXBzaG90Lmxvd2xldmVsczsKKyAgICAgICAgdGhpcy5fcHJl
cGFyZVByb2ZpbGUocHJvZmlsZSk7CisgICAgICAgIHByb2ZpbGUuX2xvYWRlZCA9IHRydWU7Cisg
ICAgICAgIHRoaXMuX2xvYWRlZENhbGxiYWNrc1t1aWRdLmNhbGxiYWNrKHByb2ZpbGUpOworICAg
ICAgICBkZWxldGUgdGhpcy5fbG9hZGVkQ2FsbGJhY2tzW3VpZF07CisgICAgfSwKKwogICAgIF9j
aGFuZ2VCYXNlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5iYXNlU25hcHNo
b3QudWlkID09PSB0aGlzLl9nZXRQcm9maWxlcygpW3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2Vs
ZWN0ZWRJbmRleF0udWlkKQpAQCAtMzMyLDE3ICs0ODYsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFByb2ZpbGUocHJvZmlsZS50eXBlSWQsIHBy
b2ZpbGUudWlkLCBsb2FkZWRDYWxsYmFjay5iaW5kKHRoaXMpKTsKLQotICAgICAgICBmdW5jdGlv
biBsb2FkZWRDYWxsYmFjayhsb2FkZWRTbmFwc2hvdCkgewotICAgICAgICAgICAgcHJvZmlsZS5j
aGlsZHJlbiA9IGxvYWRlZFNuYXBzaG90LmhlYWQuY2hpbGRyZW47Ci0gICAgICAgICAgICBwcm9m
aWxlLmVudHJpZXMgPSBsb2FkZWRTbmFwc2hvdC5oZWFkLmVudHJpZXM7Ci0gICAgICAgICAgICBw
cm9maWxlLmxvd2xldmVscyA9IGxvYWRlZFNuYXBzaG90LmhlYWQubG93bGV2ZWxzOwotICAgICAg
ICAgICAgdGhpcy5fcHJlcGFyZVByb2ZpbGUocHJvZmlsZSk7Ci0gICAgICAgICAgICBwcm9maWxl
Ll9sb2FkZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5wYXJlbnQudXBkYXRlUHJvZmlsZShw
cm9maWxlKTsKLSAgICAgICAgICAgIGNhbGxiYWNrKHByb2ZpbGUpOwotICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2xvYWRlZENhbGxiYWNrc1twcm9maWxlLnVpZF0gPSB7IHByb2ZpbGU6IHByb2Zp
bGUsIGNhbGxiYWNrOiBjYWxsYmFjayB9OworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFBy
b2ZpbGUocHJvZmlsZS50eXBlSWQsIHByb2ZpbGUudWlkKTsKICAgICB9LAogCiAgICAgX21vdXNl
RG93bkluRGF0YUdyaWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMzg0LDYgKzUyOSwyNyBAQCBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVm
cmVzaFNob3dBc1BlcmNlbnRzKCk7CiAgICAgfSwKIAorICAgIF9jb252ZXJ0U25hcHNob3Q6IGZ1
bmN0aW9uKGxvYWRlZFNuYXBzaG90KQorICAgIHsKKyAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QobG9hZGVkU25hcHNob3QpOworICAgICAgICB2YXIg
cmVzdWx0ID0geyBsb3dsZXZlbHM6IHt9LCBlbnRyaWVzOiB7fSwgY2hpbGRyZW46IHt9IH07Cisg
ICAgICAgIGZvciAodmFyIHJvb3RFZGdlcyA9IHNuYXBzaG90LnJvb3RFZGdlczsgIXJvb3RFZGdl
cy5kb25lOyByb290RWRnZXMubmV4dCgpKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHJvb3RF
ZGdlcy5ub2RlOworICAgICAgICAgICAgaWYgKG5vZGUuaXNIaWRkZW4pIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQubG93bGV2ZWxzW25vZGUubmFtZV0gPSB7IGNvdW50OiBub2RlLmluc3RhbmNl
c0NvdW50LCBzaXplOiBub2RlLnNlbGZTaXplLCB0eXBlOiBub2RlLm5hbWUgfTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobm9kZS5pbnN0YW5jZXNDb3VudCkgeworICAgICAgICAgICAgICAgIHJl
c3VsdC5lbnRyaWVzW25vZGUubmFtZV0gPSB7IGNvbnN0cnVjdG9yTmFtZTogbm9kZS5uYW1lLCBj
b3VudDogbm9kZS5pbnN0YW5jZXNDb3VudCwgc2l6ZTogbm9kZS5zZWxmU2l6ZSB9OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7IGNvbnN0cnVjdG9y
TmFtZTogbm9kZS5uYW1lIH07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgZWRnZXMgPSBub2Rl
LmVkZ2VzOyAhZWRnZXMuZG9uZTsgZWRnZXMubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGVudHJ5W2VkZ2VzLm5vZGVJbmRleF0gPSB7IGNvbnN0cnVjdG9yTmFtZTogZWRnZXMubm9kZS5u
YW1lLCBjb3VudDogZWRnZXMubmFtZSB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXN1bHQuY2hpbGRyZW5bcm9vdEVkZ2VzLm5vZGVJbmRleF0gPSBlbnRyeTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKICAg
ICBfcHJlcGFyZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewogICAgICAgICBmb3Ig
KHZhciBwcm9maWxlRW50cnkgaW4gcHJvZmlsZS5lbnRyaWVzKQpAQCAtNDM4LDcgKzYwNCw3IEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFy
IHNvcnRBc2NlbmRpbmcgPSB0aGlzLmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7
CiAgICAgICAgIHZhciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRoaXMuZGF0YUdyaWQuc29ydENv
bHVtbklkZW50aWZpZXI7CiAgICAgICAgIHZhciBzb3J0UHJvcGVydHkgPSB7Ci0gICAgICAgICAg
ICBjb25zOiBbImNvbnMiLCBudWxsXSwKKyAgICAgICAgICAgIGNvbnM6IFsiY29uc3RydWN0b3JO
YW1lIiwgbnVsbF0sCiAgICAgICAgICAgICBjb3VudDogWyJjb3VudCIsIG51bGxdLAogICAgICAg
ICAgICAgc2l6ZTogWyJzaXplIiwgImNvdW50Il0sCiAgICAgICAgICAgICBjb3VudERlbHRhOiB0
aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ID8gWyJjb3VudERlbHRhUGVyY2VudCIsIG51bGxd
IDogWyJjb3VudERlbHRhIiwgbnVsbF0sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Q
cm9maWxlc1BhbmVsLmpzCmluZGV4IDBhYTQxNzQuLjUwNzk1ZTggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0xMjMsNiArMTIzLDcgQEAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLl9wcm9maWxl
cyA9IFtdOwogICAgIHRoaXMuX3Byb2ZpbGVyRW5hYmxlZCA9IFByZWZlcmVuY2VzLnByb2ZpbGVy
QWx3YXlzRW5hYmxlZDsKKyAgICB0aGlzLl90ZW1wSGVhcFNuYXBzaG90cyA9IFtdOwogICAgIHRo
aXMuX3Jlc2V0KCk7CiB9CiAKQEAgLTQxMSw2ICs0MTIsMjUgQEAgV2ViSW5zcGVjdG9yLlByb2Zp
bGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgIH0sCiAKKyAgICBhZGRI
ZWFwU25hcHNob3RDaHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl90ZW1wSGVhcFNuYXBzaG90c1t1aWRdKQorICAgICAgICAgICAgdGhpcy5fdGVtcEhl
YXBTbmFwc2hvdHNbdWlkXSArPSBjaHVuazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhp
cy5fdGVtcEhlYXBTbmFwc2hvdHNbdWlkXSA9IGNodW5rOworICAgIH0sCisKKyAgICBmaW5pc2hI
ZWFwU25hcHNob3Q6IGZ1bmN0aW9uKHVpZCkKKyAgICB7CisgICAgICAgIHZhciBwcm9maWxlID0K
KyAgICAgICAgICAgIHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgaWYgKHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgIHZhciB2aWV3ID0gcHJvZmlsZS5fX3Byb2ZpbGVzUGFuZWxQ
cm9maWxlVHlwZS52aWV3Rm9yUHJvZmlsZShwcm9maWxlKTsKKyAgICAgICAgICAgIHZpZXcuc25h
cHNob3RMb2FkZWQodWlkLCBKU09OLnBhcnNlKHRoaXMuX3RlbXBIZWFwU25hcHNob3RzW3VpZF0p
KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgdGhpcy5fdGVtcEhlYXBTbmFwc2hvdHNbdWlk
XTsKKyAgICB9LAorCiAgICAgc2hvd1ZpZXc6IGZ1bmN0aW9uKHZpZXcpCiAgICAgewogICAgICAg
ICB0aGlzLnNob3dQcm9maWxlKHZpZXcucHJvZmlsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcwppbmRleCA5MjgwN2U2Li5hNGM2NjU3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE1NDQsNiArMTU0NCwxNiBAQCBXZWJJbnNw
ZWN0b3Iuc2V0UmVjb3JkaW5nUHJvZmlsZSA9IGZ1bmN0aW9uKGlzUHJvZmlsaW5nKQogICAgIHRo
aXMucGFuZWxzLnByb2ZpbGVzLnVwZGF0ZVByb2ZpbGVUeXBlQnV0dG9ucygpOwogfQogCitXZWJJ
bnNwZWN0b3IuYWRkSGVhcFNuYXBzaG90Q2h1bmsgPSBmdW5jdGlvbih1aWQsIGNodW5rKQorewor
ICAgIHRoaXMucGFuZWxzLnByb2ZpbGVzLmFkZEhlYXBTbmFwc2hvdENodW5rKHVpZCwgY2h1bmsp
OworfQorCitXZWJJbnNwZWN0b3IuZmluaXNoSGVhcFNuYXBzaG90ID0gZnVuY3Rpb24odWlkKQor
eworICAgIHRoaXMucGFuZWxzLnByb2ZpbGVzLmZpbmlzaEhlYXBTbmFwc2hvdCh1aWQpOworfQor
CiBXZWJJbnNwZWN0b3IuZHJhd0xvYWRpbmdQaWVDaGFydCA9IGZ1bmN0aW9uKGNhbnZhcywgcGVy
Y2VudCkgewogICAgIHZhciBnID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgdmFyIGRh
cmtDb2xvciA9ICJyZ2IoMTIyLCAxNjgsIDIxOCkiOwo=
</data>
<flag name="commit-queue"
          id="65322"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74670</attachid>
            <date>2010-11-23 08:21:43 -0800</date>
            <delta_ts>2010-11-24 13:07:07 -0800</delta_ts>
            <desc>fix WK compilation</desc>
            <filename>49974-patch</filename>
            <type>text/plain</type>
            <size>21964</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzVhMWMzMS4uYmQ0MDYzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMC0xMS0yMyAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVxdWVzdCBKU09OLXNlcmlhbGl6ZWQg
aGVhcCBwcm9maWxlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTk3NAorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1dFN0cmVhbTo6
fk91dHB1dFN0cmVhbSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6d3JpdGVKU09OKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtOjp+T3V0cHV0U3RyZWFtKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjpnZXRQcm9maWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZXNJdGVyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJ
dGVyYXRvci5wcm90b3R5cGUuZ2V0IGRvbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBpc0VsZW1lbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBpc0hp
ZGRlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvci5w
cm90b3R5cGUuZ2V0IG5hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VzSXRlcmF0b3IucHJvdG90eXBlLm5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBub2RlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZS5nZXQgbm9kZUluZGV4
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3Rv
dHlwZS5nZXQgX25hbWVPckluZGV4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZS5nZXQgX3R5cGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGVkZ2VzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGVkZ2VzQ291bnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlw
ZS5nZXQgaW5zdGFuY2VzQ291bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgaXNIaWRkZW4pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgbmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBzZWxm
U2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJv
dG90eXBlLmdldCBfbmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZVdyYXBwZXIucHJvdG90eXBlLmdldCBfZWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgX3R5cGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90LnByb3RvdHlwZS5faW5pdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5nZXQgcm9vdEVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZS5zbmFwc2hvdExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2xvYWRQcm9maWxlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fY29udmVydFNuYXBzaG90KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fc29ydERh
dGEpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuZmluaXNoSGVhcFNuYXBzaG90
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5hZGRIZWFwU25hcHNob3RDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuZmluaXNoSGVhcFNuYXBzaG90KToKKwogMjAxMC0xMS0yMyAgQWxleGFuZGVyIFBhdmxvdiAg
PGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaAppbmRleCBjODFjNzgy
Li4zOGNlYjQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFw
c2hvdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90LmgKQEAg
LTM4LDEyICszOCwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdEhlYXBT
bmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFNjcmlwdEhlYXBTbmFwc2hvdD4gewogcHVibGlj
OgorICAgIGNsYXNzIE91dHB1dFN0cmVhbSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IH5PdXRwdXRTdHJlYW0oKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIFdyaXRlQ2h1bmsoY29u
c3QgU3RyaW5nJiBjaHVuaykgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgRW5kT2ZTbmFwc2hv
dCgpID0gMDsKKyAgICB9OworCiAgICAgdmlydHVhbCB+U2NyaXB0SGVhcFNuYXBzaG90KCkge30K
IAogICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CiAgICAgdW5zaWduZWQg
aW50IHVpZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSBjb25zdCB7IHJldHVybiBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyB9CisgICAgdm9pZCB3cml0ZUpTT04oT3V0cHV0U3RyZWFt
KikgeyB9CiAKIHByaXZhdGU6CiAgICAgU2NyaXB0SGVhcFNuYXBzaG90KCkge30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcAppbmRleCA4ODVkMDM5Li41MTBkOTgx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHY4LXByb2ZpbGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01MCw1
MCArNTEsMjkgQEAgdW5zaWduZWQgaW50IFNjcmlwdEhlYXBTbmFwc2hvdDo6dWlkKCkgY29uc3QK
ICAgICByZXR1cm4gbV9zbmFwc2hvdC0+R2V0VWlkKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3IoY29uc3Qgdjg6OkhlYXBH
cmFwaE5vZGUqIHJvb3QpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG93TGV2ZWxzID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlbnRyaWVzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZHJlbiA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0g
cm9vdC0+R2V0Q2hpbGRyZW5Db3VudCgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBjb25z
dCB2ODo6SGVhcEdyYXBoTm9kZSogbm9kZSA9IHJvb3QtPkdldENoaWxkKGkpLT5HZXRUb05vZGUo
KTsKLSAgICAgICAgaWYgKG5vZGUtPkdldFR5cGUoKSA9PSB2ODo6SGVhcEdyYXBoTm9kZTo6a0lu
dGVybmFsKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb3dMZXZlbCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBsb3dMZXZlbC0+c2V0TnVt
YmVyKCJjb3VudCIsIG5vZGUtPkdldEluc3RhbmNlc0NvdW50KCkpOwotICAgICAgICAgICAgbG93
TGV2ZWwtPnNldE51bWJlcigic2l6ZSIsIG5vZGUtPkdldFNlbGZTaXplKCkpOwotICAgICAgICAg
ICAgbG93TGV2ZWwtPnNldFN0cmluZygidHlwZSIsIHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXRO
YW1lKCkpKTsKLSAgICAgICAgICAgIGxvd0xldmVscy0+c2V0T2JqZWN0KHRvV2ViQ29yZVN0cmlu
Zyhub2RlLT5HZXROYW1lKCkpLCBsb3dMZXZlbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
R2V0SW5zdGFuY2VzQ291bnQoKSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZW50cnkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZW50cnkt
PnNldFN0cmluZygiY29uc3RydWN0b3JOYW1lIiwgdG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5h
bWUoKSkpOwotICAgICAgICAgICAgZW50cnktPnNldE51bWJlcigiY291bnQiLCBub2RlLT5HZXRJ
bnN0YW5jZXNDb3VudCgpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXROdW1iZXIoInNpemUiLCBu
b2RlLT5HZXRTZWxmU2l6ZSgpKTsKLSAgICAgICAgICAgIGVudHJpZXMtPnNldE9iamVjdCh0b1dl
YkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSwgZW50cnkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZW50cnkgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygiY29uc3RydWN0b3JO
YW1lIiwgdG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUoKSkpOwotICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDAsIGNvdW50ID0gbm9kZS0+R2V0Q2hpbGRyZW5Db3VudCgpOyBqIDwgY291bnQ7
ICsraikgewotICAgICAgICAgICAgICAgIGNvbnN0IHY4OjpIZWFwR3JhcGhFZGdlKiB2OEVkZ2Ug
PSBub2RlLT5HZXRDaGlsZChqKTsKLSAgICAgICAgICAgICAgICBjb25zdCB2ODo6SGVhcEdyYXBo
Tm9kZSogdjhDaGlsZCA9IHY4RWRnZS0+R2V0VG9Ob2RlKCk7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFtZSIsIHRvV2Vi
Q29yZVN0cmluZyh2OENoaWxkLT5HZXROYW1lKCkpKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+
c2V0TnVtYmVyKCJjb3VudCIsIHY4RWRnZS0+R2V0TmFtZSgpLT5Ub0ludGVnZXIoKS0+VmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgZW50cnktPnNldE9iamVjdChTdHJpbmc6Om51bWJlcihyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odjhDaGlsZCkpLCBjaGlsZCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjaGlsZHJlbi0+c2V0T2JqZWN0KFN0cmluZzo6bnVtYmVy
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihub2RlKSksIGVudHJ5KTsKLSAg
ICAgICAgfQorbmFtZXNwYWNlIHsKKworY2xhc3MgT3V0cHV0U3RyZWFtQWRhcHRvciA6IHB1Ymxp
YyB2ODo6T3V0cHV0U3RyZWFtIHsKK3B1YmxpYzoKKyAgICBPdXRwdXRTdHJlYW1BZGFwdG9yKFNj
cmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtKiBvdXRwdXQpCisgICAgICAgIDogbV9vdXRw
dXQob3V0cHV0KSB7IH0KKyAgICB2b2lkIEVuZE9mU3RyZWFtKCkgeyBtX291dHB1dC0+RW5kT2ZT
bmFwc2hvdCgpOyB9CisgICAgaW50IEdldENodW5rU2l6ZSgpIHsgcmV0dXJuIDEwMjQwOyB9Cisg
ICAgV3JpdGVSZXN1bHQgV3JpdGVBc2NpaUNodW5rKGNoYXIqIGRhdGEsIGludCBzaXplKQorICAg
IHsKKyAgICAgICAgbV9vdXRwdXQtPldyaXRlQ2h1bmsoU3RyaW5nKGRhdGEsIHNpemUpKTsKKyAg
ICAgICAgcmV0dXJuIGtDb250aW51ZTsKICAgICB9Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoImxv
d2xldmVscyIsIGxvd0xldmVscyk7Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoImVudHJpZXMiLCBl
bnRyaWVzKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgiY2hpbGRyZW4iLCBjaGlsZHJlbik7Ci0g
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19Citwcml2YXRlOgorICAgIFNjcmlwdEhlYXBT
bmFwc2hvdDo6T3V0cHV0U3RyZWFtKiBtX291dHB1dDsKK307CisKK30gLy8gbmFtZXNwYWNlCiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTY3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0Cit2b2lkIFNjcmlwdEhlYXBTbmFwc2hvdDo6d3Jp
dGVKU09OKFNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtKiBzdHJlYW0pCiB7Ci0gICAg
cmV0dXJuIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yKG1fc25hcHNob3QtPkdldFJvb3QoKSk7Cisg
ICAgT3V0cHV0U3RyZWFtQWRhcHRvciBvdXRwdXRTdHJlYW0oc3RyZWFtKTsKKyAgICBtX3NuYXBz
aG90LT5TZXJpYWxpemUoJm91dHB1dFN0cmVhbSwgdjg6OkhlYXBTbmFwc2hvdDo6a0pTT04pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFw
U25hcHNob3QuaAppbmRleCA3OTRhNWE5Li4yOTY3ZDZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0SGVhcFNuYXBzaG90LmgKQEAgLTQzLDYgKzQzLDEzIEBAIGNsYXNzIEluc3BlY3Rvck9i
amVjdDsKIAogY2xhc3MgU2NyaXB0SGVhcFNuYXBzaG90IDogcHVibGljIFJlZkNvdW50ZWQ8U2Ny
aXB0SGVhcFNuYXBzaG90PiB7CiBwdWJsaWM6CisgICAgY2xhc3MgT3V0cHV0U3RyZWFtIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk91dHB1dFN0cmVhbSgpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgV3JpdGVDaHVuayhjb25zdCBTdHJpbmcmIGNodW5rKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBFbmRPZlNuYXBzaG90KCkgPSAwOworICAgIH07CisKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IGNyZWF0ZShjb25zdCB2ODo6SGVhcFNuYXBz
aG90KiBzbmFwc2hvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0
SGVhcFNuYXBzaG90KHNuYXBzaG90KSk7CkBAIC01MSw4ICs1OCw3IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCB1aWQoKSBjb25zdDsKLQot
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvckhl
YWQoKSBjb25zdDsKKyAgICB2b2lkIHdyaXRlSlNPTihPdXRwdXRTdHJlYW0qIHN0cmVhbSk7CiAK
IHByaXZhdGU6CiAgICAgU2NyaXB0SGVhcFNuYXBzaG90KGNvbnN0IHY4OjpIZWFwU25hcHNob3Qq
IHNuYXBzaG90KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggMjlhM2JhMC4uMmExMzg4YyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC01OCwxMCArNTgsMTIgQEAgbW9kdWxlIGNvcmUg
ewogCiAjaWYgZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pB
VkFTQ1JJUFRfREVCVUdHRVIKICAgICAgICAgW25vdGlmeV0gdm9pZCBhZGRQcm9maWxlSGVhZGVy
KG91dCBPYmplY3QgaGVhZGVyKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBhZGRIZWFwU25hcHNo
b3RDaHVuayhvdXQgdW5zaWduZWQgbG9uZyB1aWQsIG91dCBTdHJpbmcgY2h1bmspOwogICAgICAg
ICBbbm90aWZ5XSB2b2lkIGF0dGFjaERlYnVnZ2VyV2hlblNob3duKCk7CiAgICAgICAgIFtub3Rp
ZnldIHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgZGVi
dWdnZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIGZhaWxlZFRvUGFyc2VT
Y3JpcHRTb3VyY2Uob3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwgb3V0IGludCBmaXJz
dExpbmUsIG91dCBpbnQgZXJyb3JMaW5lLCBvdXQgU3RyaW5nIGVycm9yTWVzc2FnZSk7CisgICAg
ICAgIFtub3RpZnldIHZvaWQgZmluaXNoSGVhcFNuYXBzaG90KG91dCB1bnNpZ25lZCBsb25nIHVp
ZCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcGFyc2VkU2NyaXB0U291cmNlKG91dCBTdHJpbmcg
c291cmNlSUQsIG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGRhdGEsIG91dCBpbnQgZmlyc3RM
aW5lLCBvdXQgaW50IHNjcmlwdFdvcmxkVHlwZSk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcGF1
c2VkU2NyaXB0KG91dCBPYmplY3QgZGV0YWlscyk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJv
ZmlsZXJXYXNFbmFibGVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVy
QWdlbnQuY3BwCmluZGV4IDNmMTA3ZDYuLmE1M2M5ZjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0xNTYsNiArMTU2LDIxIEBAIHZvaWQgSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogaGVhZGVycykKICAgICAgICAgKCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVTbmFw
c2hvdEhlYWRlcigqaXQtPnNlY29uZCkpOwogfQogCituYW1lc3BhY2UgeworCitjbGFzcyBPdXRw
dXRTdHJlYW0gOiBwdWJsaWMgU2NyaXB0SGVhcFNuYXBzaG90OjpPdXRwdXRTdHJlYW0geworcHVi
bGljOgorICAgIE91dHB1dFN0cmVhbShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIHVuc2ln
bmVkIGxvbmcgdWlkKQorICAgICAgICA6IG1fZnJvbnRlbmQoZnJvbnRlbmQpLCBtX3VpZCh1aWQp
IHsgfQorICAgIHZvaWQgV3JpdGVDaHVuayhjb25zdCBTdHJpbmcmIGNodW5rKSB7IG1fZnJvbnRl
bmQtPmFkZEhlYXBTbmFwc2hvdENodW5rKG1fdWlkLCBjaHVuayk7IH0KKyAgICB2b2lkIEVuZE9m
U25hcHNob3QoKSB7IG1fZnJvbnRlbmQtPmZpbmlzaEhlYXBTbmFwc2hvdChtX3VpZCk7IH0KK3By
aXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAgdW5zaWduZWQg
bG9uZyBtX3VpZDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKIHZvaWQgSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCiB7CiAgICAgaWYgKHR5cGUgPT0g
Q1BVUHJvZmlsZVR5cGUpIHsKQEAgLTE2Nyw4ICsxODIsMTIgQEAgdm9pZCBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpnZXRQcm9maWxlKGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBS
ZWZQdHIKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gSGVhcFByb2ZpbGVUeXBlKSB7CiAgICAgICAg
IEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuZmluZCh1aWQpOwog
ICAgICAgICBpZiAoaXQgIT0gbV9zbmFwc2hvdHMuZW5kKCkpIHsKLSAgICAgICAgICAgICpwcm9m
aWxlT2JqZWN0ID0gY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpOwotICAgICAgICAg
ICAgKCpwcm9maWxlT2JqZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBT
bmFwc2hvdD4gc25hcHNob3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgKnByb2ZpbGVPYmpl
Y3QgPSBjcmVhdGVTbmFwc2hvdEhlYWRlcigqc25hcHNob3QpOworICAgICAgICAgICAgaWYgKG1f
ZnJvbnRlbmQpIHsKKyAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gc3RyZWFtKG1fZnJvbnRl
bmQsIHVpZCk7CisgICAgICAgICAgICAgICAgc25hcHNob3QtPndyaXRlSlNPTigmc3RyZWFtKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKaW5kZXggNmJjYzBmZi4uZjVmNjg4YiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMK
QEAgLTI3LDYgKzI3LDE0NSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvciA9IGZ1bmN0aW9uKHNuYXBz
aG90LCBlZGdlcykKK3sKKyAgICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBzaG90OworICAgIHRoaXMu
X2VkZ2VzID0gZWRnZXM7CisgICAgdGhpcy5fZWRnZUluZGV4ID0gMDsKK30KKworV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlID0geworICAgIGdldCBkb25l
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZUluZGV4ID49IHRoaXMuX2VkZ2VzLmxlbmd0
aDsKKyAgICB9LAorCisgICAgZ2V0IGlzRWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3R5cGUgPT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlRWxlbWVudFR5cGU7CisgICAgfSwKKworICAg
IGdldCBpc0hpZGRlbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IHRoaXMuX3Nu
YXBzaG90Ll9lZGdlSGlkZGVuVHlwZTsKKyAgICB9LAorCisgICAgZ2V0IG5hbWUoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmlzRWxlbWVudCB8fCB0aGlzLmlzSGlkZGVuID8gdGhpcy5fbmFtZU9y
SW5kZXggOiB0aGlzLl9zbmFwc2hvdC5fc3RyaW5nc1t0aGlzLl9uYW1lT3JJbmRleF07CisgICAg
fSwKKworICAgIG5leHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLl9lZGdlSW5kZXggKz0g
dGhpcy5fc25hcHNob3QuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICB9LAorCisgICAgZ2V0IG5vZGUo
KSB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFw
cGVyKHRoaXMuX3NuYXBzaG90LCB0aGlzLm5vZGVJbmRleCk7CisgICAgfSwKKworICAgIGdldCBu
b2RlSW5kZXgoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlc1t0aGlzLl9lZGdlSW5kZXgg
KyB0aGlzLl9zbmFwc2hvdC5fZWRnZVRvTm9kZU9mZnNldF07CisgICAgfSwKKworICAgIGdldCBf
bmFtZU9ySW5kZXgoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlc1t0aGlzLl9lZGdlSW5k
ZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZU5hbWVPZmZzZXRdOworICAgIH0sCisKKyAgICBnZXQg
X3R5cGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlc1t0aGlzLl9lZGdlSW5kZXggKyB0
aGlzLl9zbmFwc2hvdC5fZWRnZVR5cGVPZmZzZXRdOworICAgIH0KK307CisKK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3ROb2RlV3JhcHBlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBub2RlSW5kZXgp
Cit7CisgICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICB0aGlzLl9ub2RlcyA9IHNu
YXBzaG90Ll9ub2RlczsKKyAgICB0aGlzLl9ub2RlSW5kZXggPSBub2RlSW5kZXg7Cit9CisKK1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUgPSB7CisgICAgZ2V0
IGVkZ2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEVkZ2VzSXRlcmF0b3IodGhpcy5fc25hcHNob3QsIHRoaXMuX2VkZ2VzKTsKKyAgICB9LAor
CisgICAgZ2V0IGVkZ2VzQ291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVz
W3RoaXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9lZGdlc0NvdW50T2Zmc2V0XTsKKyAg
ICB9LAorCisgICAgZ2V0IGluc3RhbmNlc0NvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9kZUluc3RhbmNl
c0NvdW50T2Zmc2V0XTsKKyAgICB9LAorCisgICAgZ2V0IGlzSGlkZGVuKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl90eXBlID09PSB0aGlzLl9zbmFwc2hvdC5fbm9kZUhpZGRlblR5cGU7
CisgICAgfSwKKworICAgIGdldCBuYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9z
bmFwc2hvdC5fc3RyaW5nc1t0aGlzLl9uYW1lXTsKKyAgICB9LAorCisgICAgZ2V0IHNlbGZTaXpl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0
aGlzLl9zbmFwc2hvdC5fbm9kZVNlbGZTaXplT2Zmc2V0XTsgCisgICAgfSwKKworICAgIGdldCBf
bmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4
ICsgdGhpcy5fc25hcHNob3QuX25vZGVOYW1lT2Zmc2V0XTsgCisgICAgfSwKKworICAgIGdldCBf
ZWRnZXMoKQorICAgIHsKKyAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gdGhpcy5fbm9kZUlu
ZGV4ICsgdGhpcy5fc25hcHNob3QuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX25vZGVzLnNsaWNlKGZpcnN0RWRnZUluZGV4LCBmaXJzdEVkZ2VJbmRleCArIHRoaXMuZWRn
ZXNDb3VudCAqIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQpOworICAgIH0sCisKKyAg
ICBnZXQgX3R5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMuX25v
ZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlVHlwZU9mZnNldF07CisgICAgfQorfTsKKwor
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdCA9IGZ1bmN0aW9uKHByb2ZpbGUpCit7CisgICAgdGhp
cy5fcHJvZmlsZSA9IHByb2ZpbGU7CisgICAgdGhpcy5fbm9kZXMgPSBwcm9maWxlLm5vZGVzOwor
ICAgIHRoaXMuX3N0cmluZ3MgPSBwcm9maWxlLnN0cmluZ3M7CisKKyAgICB0aGlzLl9pbml0KCk7
Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0geworICAgIF9pbml0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tZXRhTm9kZUluZGV4ID0gMDsKKyAg
ICAgICAgdGhpcy5fcm9vdE5vZGVJbmRleCA9IDE7CisgICAgICAgIHZhciBtZXRhID0gdGhpcy5f
bm9kZXNbdGhpcy5fbWV0YU5vZGVJbmRleF07CisgICAgICAgIHRoaXMuX25vZGVUeXBlT2Zmc2V0
ID0gbWV0YS5maWVsZHMuaW5kZXhPZigndHlwZScpOworICAgICAgICB0aGlzLl9ub2RlTmFtZU9m
ZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoJ25hbWUnKTsKKyAgICAgICAgdGhpcy5fbm9kZUlk
T2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZignaWQnKTsKKyAgICAgICAgdGhpcy5fbm9kZUlu
c3RhbmNlc0NvdW50T2Zmc2V0ID0gdGhpcy5fbm9kZUlkT2Zmc2V0OworICAgICAgICB0aGlzLl9u
b2RlU2VsZlNpemVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCdzZWxmX3NpemUnKTsKKyAg
ICAgICAgdGhpcy5fZWRnZXNDb3VudE9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoJ2NoaWxk
cmVuX2NvdW50Jyk7CisgICAgICAgIHRoaXMuX2ZpcnN0RWRnZU9mZnNldCA9IG1ldGEuZmllbGRz
LmluZGV4T2YoJ2NoaWxkcmVuJyk7CisgICAgICAgIHRoaXMuX25vZGVUeXBlcyA9IG1ldGEudHlw
ZXNbdGhpcy5fbm9kZVR5cGVPZmZzZXRdOworICAgICAgICB0aGlzLl9ub2RlSGlkZGVuVHlwZSA9
IHRoaXMuX25vZGVUeXBlcy5pbmRleE9mKCdoaWRkZW4nKTsKKyAgICAgICAgdmFyIGVkZ2VzTWV0
YSA9IG1ldGEudHlwZXNbdGhpcy5fZmlyc3RFZGdlT2Zmc2V0XTsKKyAgICAgICAgdGhpcy5fZWRn
ZUZpZWxkc0NvdW50ID0gZWRnZXNNZXRhLmZpZWxkcy5sZW5ndGg7CisgICAgICAgIHRoaXMuX2Vk
Z2VUeXBlT2Zmc2V0ID0gZWRnZXNNZXRhLmZpZWxkcy5pbmRleE9mKCd0eXBlJyk7CisgICAgICAg
IHRoaXMuX2VkZ2VOYW1lT2Zmc2V0ID0gZWRnZXNNZXRhLmZpZWxkcy5pbmRleE9mKCduYW1lX29y
X2luZGV4Jyk7CisgICAgICAgIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXQgPSBlZGdlc01ldGEuZmll
bGRzLmluZGV4T2YoJ3RvX25vZGUnKTsKKyAgICAgICAgdGhpcy5fZWRnZVR5cGVzID0gZWRnZXNN
ZXRhLnR5cGVzW3RoaXMuX2VkZ2VUeXBlT2Zmc2V0XTsKKyAgICAgICAgdGhpcy5fZWRnZUVsZW1l
bnRUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmluZGV4T2YoJ2VsZW1lbnQnKTsKKyAgICAgICAgdGhp
cy5fZWRnZUhpZGRlblR5cGUgPSB0aGlzLl9lZGdlVHlwZXMuaW5kZXhPZignaGlkZGVuJyk7Cisg
ICAgfSwKKworICAgIGdldCByb290RWRnZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChuZXcg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMsIHRoaXMuX3Jvb3ROb2Rl
SW5kZXgpKS5lZGdlczsKKyAgICB9Cit9OwogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmll
dyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKIHsKQEAgLTk0LDYgKzIzMyw3IEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFyZW50LCBwcm9maWxlKQogICAg
IHRoaXMucGVyY2VudEJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKCIi
LCAicGVyY2VudC10aW1lLXN0YXR1cy1iYXItaXRlbSBzdGF0dXMtYmFyLWl0ZW0iKTsKICAgICB0
aGlzLnBlcmNlbnRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9wZXJjZW50
Q2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAKKyAgICB0aGlzLl9sb2FkZWRDYWxsYmFja3Mg
PSBbXTsKICAgICB0aGlzLl9sb2FkUHJvZmlsZSh0aGlzLnByb2ZpbGUsIHByb2ZpbGVDYWxsYmFj
ay5iaW5kKHRoaXMpKTsKIAogICAgIGZ1bmN0aW9uIHByb2ZpbGVDYWxsYmFjayhwcm9maWxlKQpA
QCAtMjkwLDYgKzQzMCwyMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVN1bW1hcnlHcmFwaCgpOwogICAgIH0sCiAKKyAg
ICBzbmFwc2hvdExvYWRlZDogZnVuY3Rpb24odWlkLCBsb2FkZWRTbmFwc2hvdCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fbG9hZGVkQ2FsbGJhY2tzW3VpZF0pIHJldHVybjsKKyAgICAgICAg
dmFyIHByb2ZpbGUgPSB0aGlzLl9sb2FkZWRDYWxsYmFja3NbdWlkXS5wcm9maWxlOworICAgICAg
ICB2YXIgc25hcHNob3QgPSB0aGlzLl9jb252ZXJ0U25hcHNob3QobG9hZGVkU25hcHNob3QpOwor
ICAgICAgICBwcm9maWxlLmNoaWxkcmVuID0gc25hcHNob3QuY2hpbGRyZW47CisgICAgICAgIHBy
b2ZpbGUuZW50cmllcyA9IHNuYXBzaG90LmVudHJpZXM7CisgICAgICAgIHByb2ZpbGUubG93bGV2
ZWxzID0gc25hcHNob3QubG93bGV2ZWxzOworICAgICAgICB0aGlzLl9wcmVwYXJlUHJvZmlsZShw
cm9maWxlKTsKKyAgICAgICAgcHJvZmlsZS5fbG9hZGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5f
bG9hZGVkQ2FsbGJhY2tzW3VpZF0uY2FsbGJhY2socHJvZmlsZSk7CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9sb2FkZWRDYWxsYmFja3NbdWlkXTsKKyAgICB9LAorCiAgICAgX2NoYW5nZUJhc2U6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdC51aWQgPT09IHRo
aXMuX2dldFByb2ZpbGVzKClbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XS51
aWQpCkBAIC0zMzIsMTcgKzQ4Niw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIElu
c3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZShwcm9maWxlLnR5cGVJZCwgcHJvZmlsZS51aWQsIGxv
YWRlZENhbGxiYWNrLmJpbmQodGhpcykpOwotCi0gICAgICAgIGZ1bmN0aW9uIGxvYWRlZENhbGxi
YWNrKGxvYWRlZFNuYXBzaG90KSB7Ci0gICAgICAgICAgICBwcm9maWxlLmNoaWxkcmVuID0gbG9h
ZGVkU25hcHNob3QuaGVhZC5jaGlsZHJlbjsKLSAgICAgICAgICAgIHByb2ZpbGUuZW50cmllcyA9
IGxvYWRlZFNuYXBzaG90LmhlYWQuZW50cmllczsKLSAgICAgICAgICAgIHByb2ZpbGUubG93bGV2
ZWxzID0gbG9hZGVkU25hcHNob3QuaGVhZC5sb3dsZXZlbHM7Ci0gICAgICAgICAgICB0aGlzLl9w
cmVwYXJlUHJvZmlsZShwcm9maWxlKTsKLSAgICAgICAgICAgIHByb2ZpbGUuX2xvYWRlZCA9IHRy
dWU7Ci0gICAgICAgICAgICB0aGlzLnBhcmVudC51cGRhdGVQcm9maWxlKHByb2ZpbGUpOwotICAg
ICAgICAgICAgY2FsbGJhY2socHJvZmlsZSk7Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy5fbG9h
ZGVkQ2FsbGJhY2tzW3Byb2ZpbGUudWlkXSA9IHsgcHJvZmlsZTogcHJvZmlsZSwgY2FsbGJhY2s6
IGNhbGxiYWNrIH07CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZShwcm9maWxl
LnR5cGVJZCwgcHJvZmlsZS51aWQpOwogICAgIH0sCiAKICAgICBfbW91c2VEb3duSW5EYXRhR3Jp
ZDogZnVuY3Rpb24oZXZlbnQpCkBAIC0zODQsNiArNTI5LDI3IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5yZWZyZXNoU2hvd0FzUGVy
Y2VudHMoKTsKICAgICB9LAogCisgICAgX2NvbnZlcnRTbmFwc2hvdDogZnVuY3Rpb24obG9hZGVk
U25hcHNob3QpCisgICAgeworICAgICAgICB2YXIgc25hcHNob3QgPSBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdChsb2FkZWRTbmFwc2hvdCk7CisgICAgICAgIHZhciByZXN1bHQgPSB7IGxv
d2xldmVsczoge30sIGVudHJpZXM6IHt9LCBjaGlsZHJlbjoge30gfTsKKyAgICAgICAgZm9yICh2
YXIgcm9vdEVkZ2VzID0gc25hcHNob3Qucm9vdEVkZ2VzOyAhcm9vdEVkZ2VzLmRvbmU7IHJvb3RF
ZGdlcy5uZXh0KCkpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gcm9vdEVkZ2VzLm5vZGU7Cisg
ICAgICAgICAgICBpZiAobm9kZS5pc0hpZGRlbikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5s
b3dsZXZlbHNbbm9kZS5uYW1lXSA9IHsgY291bnQ6IG5vZGUuaW5zdGFuY2VzQ291bnQsIHNpemU6
IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUubmFtZSB9OworICAgICAgICAgICAgfSBlbHNlIGlm
IChub2RlLmluc3RhbmNlc0NvdW50KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmVudHJpZXNb
bm9kZS5uYW1lXSA9IHsgY29uc3RydWN0b3JOYW1lOiBub2RlLm5hbWUsIGNvdW50OiBub2RlLmlu
c3RhbmNlc0NvdW50LCBzaXplOiBub2RlLnNlbGZTaXplIH07CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsgY29uc3RydWN0b3JOYW1lOiBub2RlLm5h
bWUgfTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBlZGdlcyA9IG5vZGUuZWRnZXM7ICFlZGdl
cy5kb25lOyBlZGdlcy5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnlbZWRnZXMu
bm9kZUluZGV4XSA9IHsgY29uc3RydWN0b3JOYW1lOiBlZGdlcy5ub2RlLm5hbWUsIGNvdW50OiBl
ZGdlcy5uYW1lIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5j
aGlsZHJlbltyb290RWRnZXMubm9kZUluZGV4XSA9IGVudHJ5OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKwogICAgIF9wcmVwYXJlUHJv
ZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7CiAgICAgICAgIGZvciAodmFyIHByb2ZpbGVF
bnRyeSBpbiBwcm9maWxlLmVudHJpZXMpCkBAIC00MzgsNyArNjA0LDcgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc29ydEFzY2VuZGlu
ZyA9IHRoaXMuZGF0YUdyaWQuc29ydE9yZGVyID09PSAiYXNjZW5kaW5nIjsKICAgICAgICAgdmFy
IHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5kYXRhR3JpZC5zb3J0Q29sdW1uSWRlbnRpZmll
cjsKICAgICAgICAgdmFyIHNvcnRQcm9wZXJ0eSA9IHsKLSAgICAgICAgICAgIGNvbnM6IFsiY29u
cyIsIG51bGxdLAorICAgICAgICAgICAgY29uczogWyJjb25zdHJ1Y3Rvck5hbWUiLCBudWxsXSwK
ICAgICAgICAgICAgIGNvdW50OiBbImNvdW50IiwgbnVsbF0sCiAgICAgICAgICAgICBzaXplOiBb
InNpemUiLCAiY291bnQiXSwKICAgICAgICAgICAgIGNvdW50RGVsdGE6IHRoaXMuc2hvd0NvdW50
RGVsdGFBc1BlcmNlbnQgPyBbImNvdW50RGVsdGFQZXJjZW50IiwgbnVsbF0gOiBbImNvdW50RGVs
dGEiLCBudWxsXSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlc1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwu
anMKaW5kZXggMGFhNDE3NC4uNTA3OTVlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Byb2ZpbGVzUGFuZWwuanMKQEAgLTEyMyw2ICsxMjMsNyBAQCBXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuX3Byb2ZpbGVzID0gW107CiAgICAg
dGhpcy5fcHJvZmlsZXJFbmFibGVkID0gUHJlZmVyZW5jZXMucHJvZmlsZXJBbHdheXNFbmFibGVk
OworICAgIHRoaXMuX3RlbXBIZWFwU25hcHNob3RzID0gW107CiAgICAgdGhpcy5fcmVzZXQoKTsK
IH0KIApAQCAtNDExLDYgKzQxMiwyNSBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgfSwKIAorICAgIGFkZEhlYXBTbmFwc2hvdENo
dW5rOiBmdW5jdGlvbih1aWQsIGNodW5rKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3RlbXBI
ZWFwU25hcHNob3RzW3VpZF0pCisgICAgICAgICAgICB0aGlzLl90ZW1wSGVhcFNuYXBzaG90c1t1
aWRdICs9IGNodW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl90ZW1wSGVhcFNu
YXBzaG90c1t1aWRdID0gY2h1bms7CisgICAgfSwKKworICAgIGZpbmlzaEhlYXBTbmFwc2hvdDog
ZnVuY3Rpb24odWlkKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGUgPQorICAgICAgICAgICAg
dGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOworICAgICAgICBpZiAocHJvZmlsZSkgeworICAg
ICAgICAgICAgdmFyIHZpZXcgPSBwcm9maWxlLl9fcHJvZmlsZXNQYW5lbFByb2ZpbGVUeXBlLnZp
ZXdGb3JQcm9maWxlKHByb2ZpbGUpOworICAgICAgICAgICAgdmlldy5zbmFwc2hvdExvYWRlZCh1
aWQsIEpTT04ucGFyc2UodGhpcy5fdGVtcEhlYXBTbmFwc2hvdHNbdWlkXSkpOworICAgICAgICB9
CisgICAgICAgIGRlbGV0ZSB0aGlzLl90ZW1wSGVhcFNuYXBzaG90c1t1aWRdOworICAgIH0sCisK
ICAgICBzaG93VmlldzogZnVuY3Rpb24odmlldykKICAgICB7CiAgICAgICAgIHRoaXMuc2hvd1By
b2ZpbGUodmlldy5wcm9maWxlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCmluZGV4IDkyODA3ZTYuLmE0YzY2NTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcwpAQCAtMTU0NCw2ICsxNTQ0LDE2IEBAIFdlYkluc3BlY3Rvci5zZXRSZWNv
cmRpbmdQcm9maWxlID0gZnVuY3Rpb24oaXNQcm9maWxpbmcpCiAgICAgdGhpcy5wYW5lbHMucHJv
ZmlsZXMudXBkYXRlUHJvZmlsZVR5cGVCdXR0b25zKCk7CiB9CiAKK1dlYkluc3BlY3Rvci5hZGRI
ZWFwU25hcHNob3RDaHVuayA9IGZ1bmN0aW9uKHVpZCwgY2h1bmspCit7CisgICAgdGhpcy5wYW5l
bHMucHJvZmlsZXMuYWRkSGVhcFNuYXBzaG90Q2h1bmsodWlkLCBjaHVuayk7Cit9CisKK1dlYklu
c3BlY3Rvci5maW5pc2hIZWFwU25hcHNob3QgPSBmdW5jdGlvbih1aWQpCit7CisgICAgdGhpcy5w
YW5lbHMucHJvZmlsZXMuZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7Cit9CisKIFdlYkluc3BlY3Rv
ci5kcmF3TG9hZGluZ1BpZUNoYXJ0ID0gZnVuY3Rpb24oY2FudmFzLCBwZXJjZW50KSB7CiAgICAg
dmFyIGcgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICB2YXIgZGFya0NvbG9yID0gInJn
YigxMjIsIDE2OCwgMjE4KSI7Cg==
</data>
<flag name="review"
          id="65332"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="65333"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74786</attachid>
            <date>2010-11-24 13:07:07 -0800</date>
            <delta_ts>2010-11-24 13:28:12 -0800</delta_ts>
            <desc>Pavel&apos;s comments addressed</desc>
            <filename>49974-patch</filename>
            <type>text/plain</type>
            <size>23723</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzVhMWMzMS4uNTlkOWZkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0xMS0yMyAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYkluc3BlY3RvcjogUmVxdWVzdCBKU09OLXNlcmlhbGl6
ZWQgaGVhcCBzbmFwc2hvdCBmcm9tIEpTIGVuZ2luZS4KKyAgICAgICAgVGhpcyBzaW1wbGlmaWVz
IGhlYXAgc25hcHNob3RzIGludGVyYWN0aW9uIGFuZCBBUEkuIEluc3RlYWQgb2YKKyAgICAgICAg
aGF2aW5nIG9iamVjdHMgcmVwcmVzZW50aW5nIHNuYXBzaG90IGVudGl0aWVzLCB0aGUgd2hvbGUg
c25hcHNob3QKKyAgICAgICAgaXMgdHJhbnNmZXJyZWQgdG8gV2ViSW5zcGVjdG9yIGFuZCBwYXJz
ZWQgdGhlcmUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ5OTc0CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtOjp+T3V0
cHV0U3RyZWFtKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90Ojp3cml0ZUpTT04pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0SGVhcFNuYXBzaG90OjpPdXRwdXRTdHJlYW06On5PdXRwdXRTdHJlYW0pOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdl
c0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJh
dG9yLnByb3RvdHlwZS5nZXQgZG9uZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUuZ2V0IGlzRWxlbWVudCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUuZ2V0IGlzSGlkZGVu
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3Rv
dHlwZS5nZXQgbmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJ
dGVyYXRvci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUuZ2V0IG5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBub2RlSW5kZXgpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBl
LmdldCBfbmFtZU9ySW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBfdHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgZWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgZWRnZXNDb3VudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdl
dCBpbnN0YW5jZXNDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZVdyYXBwZXIucHJvdG90eXBlLmdldCBpc0hpZGRlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBuYW1lKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IHNlbGZTaXpl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5
cGUuZ2V0IF9uYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3Jh
cHBlci5wcm90b3R5cGUuZ2V0IF9lZGdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBfdHlwZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3Qu
cHJvdG90eXBlLl9pbml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJv
dG90eXBlLmdldCByb290RWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcucHJvdG90eXBlLnNuYXBzaG90TG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fbG9hZFByb2ZpbGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9jb252ZXJ0U25hcHNob3QpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9zb3J0RGF0YSk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBy
b2ZpbGVzUGFuZWwucHJvdG90eXBlLmFkZEhlYXBTbmFwc2hvdENodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5maW5pc2hIZWFwU25hcHNob3QpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmFkZEhlYXBTbmFwc2hvdENodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5m
aW5pc2hIZWFwU25hcHNob3QpOgorCiAyMDEwLTExLTIzICBBbGV4YW5kZXIgUGF2bG92ICA8YXBh
dmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90LmggYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5oCmluZGV4IGM4MWM3ODIuLmQw
MjBlZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaApAQCAtMzgs
MTIgKzM4LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0SGVhcFNuYXBz
aG90IDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0SGVhcFNuYXBzaG90PiB7CiBwdWJsaWM6Cisg
ICAgY2xhc3MgT3V0cHV0U3RyZWFtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk91
dHB1dFN0cmVhbSgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoY29uc3QgU3RyaW5n
JiBjaHVuaykgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgQ2xvc2UoKSA9IDA7CisgICAgfTsK
KwogICAgIHZpcnR1YWwgflNjcmlwdEhlYXBTbmFwc2hvdCgpIHt9CiAKICAgICBTdHJpbmcgdGl0
bGUoKSBjb25zdCB7IHJldHVybiAiIjsgfQogICAgIHVuc2lnbmVkIGludCB1aWQoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3JIZWFkKCkgY29uc3QgeyByZXR1cm4gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsgfQorICAgIHZvaWQgd3JpdGVKU09OKE91dHB1dFN0cmVhbSopIHsgfQogCiBwcml2YXRl
OgogICAgIFNjcmlwdEhlYXBTbmFwc2hvdCgpIHt9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dEhlYXBTbmFwc2hvdC5jcHAKaW5kZXggODg1ZDAzOS4uYzM1ZDUwOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSA8djguaD4KICNpbmNsdWRlIDx2OC1wcm9maWxlci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTAsNTAgKzUxLDI5IEBAIHVuc2ln
bmVkIGludCBTY3JpcHRIZWFwU25hcHNob3Q6OnVpZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc25h
cHNob3QtPkdldFVpZCgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yKGNvbnN0IHY4OjpIZWFwR3JhcGhOb2RlKiByb290KQot
ewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGxvd0xldmVscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZW50cmllcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGRyZW4gPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGZvciAoaW50IGkgPSAwLCBjb3VudCA9IHJvb3QtPkdldENoaWxkcmVu
Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5v
ZGUqIG5vZGUgPSByb290LT5HZXRDaGlsZChpKS0+R2V0VG9Ob2RlKCk7Ci0gICAgICAgIGlmIChu
b2RlLT5HZXRUeXBlKCkgPT0gdjg6OkhlYXBHcmFwaE5vZGU6OmtJbnRlcm5hbCkgewotICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG93TGV2ZWwgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgICAgICAgICAgbG93TGV2ZWwtPnNldE51bWJlcigiY291bnQiLCBub2Rl
LT5HZXRJbnN0YW5jZXNDb3VudCgpKTsKLSAgICAgICAgICAgIGxvd0xldmVsLT5zZXROdW1iZXIo
InNpemUiLCBub2RlLT5HZXRTZWxmU2l6ZSgpKTsKLSAgICAgICAgICAgIGxvd0xldmVsLT5zZXRT
dHJpbmcoInR5cGUiLCB0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSk7Ci0gICAgICAg
ICAgICBsb3dMZXZlbHMtPnNldE9iamVjdCh0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgp
KSwgbG93TGV2ZWwpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPkdldEluc3RhbmNlc0NvdW50
KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0
cnVjdG9yTmFtZSIsIHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpKTsKLSAgICAgICAg
ICAgIGVudHJ5LT5zZXROdW1iZXIoImNvdW50Iiwgbm9kZS0+R2V0SW5zdGFuY2VzQ291bnQoKSk7
Ci0gICAgICAgICAgICBlbnRyeS0+c2V0TnVtYmVyKCJzaXplIiwgbm9kZS0+R2V0U2VsZlNpemUo
KSk7Ci0gICAgICAgICAgICBlbnRyaWVzLT5zZXRPYmplY3QodG9XZWJDb3JlU3RyaW5nKG5vZGUt
PkdldE5hbWUoKSksIGVudHJ5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFtZSIsIHRvV2ViQ29yZVN0
cmluZyhub2RlLT5HZXROYW1lKCkpKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwLCBjb3Vu
dCA9IG5vZGUtPkdldENoaWxkcmVuQ291bnQoKTsgaiA8IGNvdW50OyArK2opIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCB2ODo6SGVhcEdyYXBoRWRnZSogdjhFZGdlID0gbm9kZS0+R2V0Q2hpbGQo
aik7Ci0gICAgICAgICAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIHY4Q2hpbGQgPSB2
OEVkZ2UtPkdldFRvTm9kZSgpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGNoaWxkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBj
aGlsZC0+c2V0U3RyaW5nKCJjb25zdHJ1Y3Rvck5hbWUiLCB0b1dlYkNvcmVTdHJpbmcodjhDaGls
ZC0+R2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPnNldE51bWJlcigiY291bnQi
LCB2OEVkZ2UtPkdldE5hbWUoKS0+VG9JbnRlZ2VyKCktPlZhbHVlKCkpOwotICAgICAgICAgICAg
ICAgIGVudHJ5LT5zZXRPYmplY3QoU3RyaW5nOjpudW1iZXIocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KHY4Q2hpbGQpKSwgY2hpbGQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2hpbGRyZW4tPnNldE9iamVjdChTdHJpbmc6Om51bWJlcihyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4obm9kZSkpLCBlbnRyeSk7Ci0gICAgICAgIH0KK25hbWVzcGFj
ZSB7CisKK2NsYXNzIE91dHB1dFN0cmVhbUFkYXB0ZXIgOiBwdWJsaWMgdjg6Ok91dHB1dFN0cmVh
bSB7CitwdWJsaWM6CisgICAgT3V0cHV0U3RyZWFtQWRhcHRlcihTY3JpcHRIZWFwU25hcHNob3Q6
Ok91dHB1dFN0cmVhbSogb3V0cHV0KQorICAgICAgICA6IG1fb3V0cHV0KG91dHB1dCkgeyB9Cisg
ICAgdm9pZCBFbmRPZlN0cmVhbSgpIHsgbV9vdXRwdXQtPkNsb3NlKCk7IH0KKyAgICBpbnQgR2V0
Q2h1bmtTaXplKCkgeyByZXR1cm4gMTAyNDA7IH0KKyAgICBXcml0ZVJlc3VsdCBXcml0ZUFzY2lp
Q2h1bmsoY2hhciogZGF0YSwgaW50IHNpemUpCisgICAgeworICAgICAgICBtX291dHB1dC0+V3Jp
dGUoU3RyaW5nKGRhdGEsIHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGtDb250aW51ZTsKICAgICB9
Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoImxvd2xldmVscyIsIGxvd0xldmVscyk7Ci0gICAgcmVz
dWx0LT5zZXRPYmplY3QoImVudHJpZXMiLCBlbnRyaWVzKTsKLSAgICByZXN1bHQtPnNldE9iamVj
dCgiY2hpbGRyZW4iLCBjaGlsZHJlbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19
Citwcml2YXRlOgorICAgIFNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtKiBtX291dHB1
dDsKK307CisKK30gLy8gbmFtZXNwYWNlCiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBT
Y3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0Cit2
b2lkIFNjcmlwdEhlYXBTbmFwc2hvdDo6d3JpdGVKU09OKFNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0
cHV0U3RyZWFtKiBzdHJlYW0pCiB7Ci0gICAgcmV0dXJuIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
KG1fc25hcHNob3QtPkdldFJvb3QoKSk7CisgICAgT3V0cHV0U3RyZWFtQWRhcHRlciBvdXRwdXRT
dHJlYW0oc3RyZWFtKTsKKyAgICBtX3NuYXBzaG90LT5TZXJpYWxpemUoJm91dHB1dFN0cmVhbSwg
djg6OkhlYXBTbmFwc2hvdDo6a0pTT04pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaAppbmRleCA3OTRhNWE5Li5kM2Fl
MDIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmgKQEAgLTQzLDYg
KzQzLDEzIEBAIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIAogY2xhc3MgU2NyaXB0SGVhcFNuYXBz
aG90IDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0SGVhcFNuYXBzaG90PiB7CiBwdWJsaWM6Cisg
ICAgY2xhc3MgT3V0cHV0U3RyZWFtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk91
dHB1dFN0cmVhbSgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoY29uc3QgU3RyaW5n
JiBjaHVuaykgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgQ2xvc2UoKSA9IDA7CisgICAgfTsK
KwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gY3JlYXRlKGNvbnN0
IHY4OjpIZWFwU25hcHNob3QqIHNuYXBzaG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTY3JpcHRIZWFwU25hcHNob3Qoc25hcHNob3QpKTsKQEAgLTUxLDggKzU4LDcgQEAg
cHVibGljOgogCiAgICAgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IHVp
ZCgpIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0OworICAgIHZvaWQgd3JpdGVKU09OKE91dHB1dFN0cmVh
bSogc3RyZWFtKTsKIAogcHJpdmF0ZToKICAgICBTY3JpcHRIZWFwU25hcHNob3QoY29uc3Qgdjg6
OkhlYXBTbmFwc2hvdCogc25hcHNob3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAyOWEz
YmEwLi4yYTEzODhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTU4LDEwICs1OCwxMiBA
QCBtb2R1bGUgY29yZSB7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VS
KSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgogICAgICAgICBbbm90aWZ5XSB2b2lkIGFk
ZFByb2ZpbGVIZWFkZXIob3V0IE9iamVjdCBoZWFkZXIpOworICAgICAgICBbbm90aWZ5XSB2b2lk
IGFkZEhlYXBTbmFwc2hvdENodW5rKG91dCB1bnNpZ25lZCBsb25nIHVpZCwgb3V0IFN0cmluZyBj
aHVuayk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oKTsK
ICAgICAgICAgW25vdGlmeV0gdm9pZCBkZWJ1Z2dlcldhc0VuYWJsZWQoKTsKICAgICAgICAgW25v
dGlmeV0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQg
ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmluZyBkYXRh
LCBvdXQgaW50IGZpcnN0TGluZSwgb3V0IGludCBlcnJvckxpbmUsIG91dCBTdHJpbmcgZXJyb3JN
ZXNzYWdlKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBmaW5pc2hIZWFwU25hcHNob3Qob3V0IHVu
c2lnbmVkIGxvbmcgdWlkKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwYXJzZWRTY3JpcHRTb3Vy
Y2Uob3V0IFN0cmluZyBzb3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwg
b3V0IGludCBmaXJzdExpbmUsIG91dCBpbnQgc2NyaXB0V29ybGRUeXBlKTsKICAgICAgICAgW25v
dGlmeV0gdm9pZCBwYXVzZWRTY3JpcHQob3V0IE9iamVjdCBkZXRhaWxzKTsKICAgICAgICAgW25v
dGlmeV0gdm9pZCBwcm9maWxlcldhc0VuYWJsZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggM2YxMDdkNi4uOTJjYzI2MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTE1Niw2ICsxNTYs
MjEgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQogICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2Jq
ZWN0KGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7CiB9CiAKK25hbWVzcGFjZSB7
CisKK2NsYXNzIE91dHB1dFN0cmVhbSA6IHB1YmxpYyBTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1
dFN0cmVhbSB7CitwdWJsaWM6CisgICAgT3V0cHV0U3RyZWFtKEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCwgdW5zaWduZWQgbG9uZyB1aWQpCisgICAgICAgIDogbV9mcm9udGVuZChmcm9udGVu
ZCksIG1fdWlkKHVpZCkgeyB9CisgICAgdm9pZCBXcml0ZShjb25zdCBTdHJpbmcmIGNodW5rKSB7
IG1fZnJvbnRlbmQtPmFkZEhlYXBTbmFwc2hvdENodW5rKG1fdWlkLCBjaHVuayk7IH0KKyAgICB2
b2lkIENsb3NlKCkgeyBtX2Zyb250ZW5kLT5maW5pc2hIZWFwU25hcHNob3QobV91aWQpOyB9Citw
cml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOworICAgIHVuc2lnbmVk
IGxvbmcgbV91aWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCiB2b2lkIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGUoY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQogewogICAgIGlmICh0eXBlID09
IENQVVByb2ZpbGVUeXBlKSB7CkBAIC0xNjcsOCArMTgyLDEyIEBAIHZvaWQgSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCwg
UmVmUHRyCiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlwZSkgewogICAgICAg
ICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmZpbmQodWlkKTsK
ICAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3RzLmVuZCgpKSB7Ci0gICAgICAgICAgICAqcHJv
ZmlsZU9iamVjdCA9IGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKTsKLSAgICAgICAg
ICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTY3JpcHRIZWFw
U25hcHNob3Q+IHNuYXBzaG90ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICpwcm9maWxlT2Jq
ZWN0ID0gY3JlYXRlU25hcHNob3RIZWFkZXIoKnNuYXBzaG90KTsKKyAgICAgICAgICAgIGlmICht
X2Zyb250ZW5kKSB7CisgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250
ZW5kLCB1aWQpOworICAgICAgICAgICAgICAgIHNuYXBzaG90LT53cml0ZUpTT04oJnN0cmVhbSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCmluZGV4IDZiY2MwZmYuLjA4ZDViYjkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3Lmpz
CkBAIC0yNyw2ICsyNywxNTQgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IgPSBmdW5jdGlvbihzbmFw
c2hvdCwgZWRnZXMpCit7CisgICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICB0aGlz
Ll9lZGdlcyA9IGVkZ2VzOworICAgIHRoaXMuX2VkZ2VJbmRleCA9IDA7Cit9CisKK1dlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgZG9u
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZUluZGV4ID49IHRoaXMuX2VkZ2Vz
Lmxlbmd0aDsKKyAgICB9LAorCisgICAgZ2V0IGlzRWxlbWVudCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fdHlwZSA9PT0gdGhpcy5fc25hcHNob3QuX2VkZ2VFbGVtZW50VHlwZTsKKyAg
ICB9LAorCisgICAgZ2V0IGlzSGlkZGVuKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90
eXBlID09PSB0aGlzLl9zbmFwc2hvdC5fZWRnZUhpZGRlblR5cGU7CisgICAgfSwKKworICAgIGdl
dCBuYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmlzRWxlbWVudCB8fCB0aGlzLmlz
SGlkZGVuID8gdGhpcy5fbmFtZU9ySW5kZXggOiB0aGlzLl9zbmFwc2hvdC5fc3RyaW5nc1t0aGlz
Ll9uYW1lT3JJbmRleF07CisgICAgfSwKKworICAgIG5leHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2VkZ2VJbmRleCArPSB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50
OworICAgIH0sCisKKyAgICBnZXQgbm9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLl9zbmFwc2hvdCwgdGhpcy5u
b2RlSW5kZXgpOworICAgIH0sCisKKyAgICBnZXQgbm9kZUluZGV4KCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9lZGdlc1t0aGlzLl9lZGdlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRn
ZVRvTm9kZU9mZnNldF07CisgICAgfSwKKworICAgIGdldCBfbmFtZU9ySW5kZXgoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzW3RoaXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBz
aG90Ll9lZGdlTmFtZU9mZnNldF07CisgICAgfSwKKworICAgIGdldCBfdHlwZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXNbdGhpcy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNo
b3QuX2VkZ2VUeXBlT2Zmc2V0XTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Tm9kZVdyYXBwZXIgPSBmdW5jdGlvbihzbmFwc2hvdCwgbm9kZUluZGV4KQoreworICAgIHRo
aXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CisgICAgdGhpcy5fbm9kZXMgPSBzbmFwc2hvdC5fbm9k
ZXM7CisgICAgdGhpcy5fbm9kZUluZGV4ID0gbm9kZUluZGV4OworfQorCitXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlID0geworICAgIGdldCBlZGdlcygpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0
ZXJhdG9yKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9lZGdlcyk7CisgICAgfSwKKworICAgIGdldCBl
ZGdlc0NvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2Rl
SW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9mZnNldF07CisgICAgfSwKKworICAg
IGdldCBpbnN0YW5jZXNDb3VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNb
dGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJbnN0YW5jZXNDb3VudE9mZnNl
dF07CisgICAgfSwKKworICAgIGdldCBpc0hpZGRlbigpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fdHlwZSA9PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5UeXBlOworICAgIH0sCisK
KyAgICBnZXQgbmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX3N0
cmluZ3NbdGhpcy5fbmFtZV07CisgICAgfSwKKworICAgIGdldCBzZWxmU2l6ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNo
b3QuX25vZGVTZWxmU2l6ZU9mZnNldF07IAorICAgIH0sCisKKyAgICBnZXQgX25hbWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMuX25vZGVJbmRleCArIHRoaXMuX3Nu
YXBzaG90Ll9ub2RlTmFtZU9mZnNldF07IAorICAgIH0sCisKKyAgICBnZXQgX2VkZ2VzKCkKKyAg
ICB7CisgICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IHRoaXMuX25vZGVJbmRleCArIHRoaXMu
X3NuYXBzaG90Ll9maXJzdEVkZ2VPZmZzZXQ7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rlcy5z
bGljZShmaXJzdEVkZ2VJbmRleCwgZmlyc3RFZGdlSW5kZXggKyB0aGlzLmVkZ2VzQ291bnQgKiB0
aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50KTsKKyAgICB9LAorCisgICAgZ2V0IF90eXBl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0
aGlzLl9zbmFwc2hvdC5fbm9kZVR5cGVPZmZzZXRdOworICAgIH0KK307CisKK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QgPSBmdW5jdGlvbihwcm9maWxlKQoreworICAgIHRoaXMuX3Byb2ZpbGUg
PSBwcm9maWxlOworICAgIHRoaXMuX25vZGVzID0gcHJvZmlsZS5ub2RlczsKKyAgICB0aGlzLl9z
dHJpbmdzID0gcHJvZmlsZS5zdHJpbmdzOworCisgICAgdGhpcy5faW5pdCgpOworfQorCitXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKKyAgICBfaW5pdDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5fbWV0YU5vZGVJbmRleCA9IDA7CisgICAgICAgIHRoaXMu
X3Jvb3ROb2RlSW5kZXggPSAxOworICAgICAgICB2YXIgbWV0YSA9IHRoaXMuX25vZGVzW3RoaXMu
X21ldGFOb2RlSW5kZXhdOworICAgICAgICB0aGlzLl9ub2RlVHlwZU9mZnNldCA9IG1ldGEuZmll
bGRzLmluZGV4T2YoInR5cGUiKTsKKyAgICAgICAgdGhpcy5fbm9kZU5hbWVPZmZzZXQgPSBtZXRh
LmZpZWxkcy5pbmRleE9mKCJuYW1lIik7CisgICAgICAgIHRoaXMuX25vZGVJZE9mZnNldCA9IG1l
dGEuZmllbGRzLmluZGV4T2YoImlkIik7CisgICAgICAgIHRoaXMuX25vZGVJbnN0YW5jZXNDb3Vu
dE9mZnNldCA9IHRoaXMuX25vZGVJZE9mZnNldDsKKyAgICAgICAgdGhpcy5fbm9kZVNlbGZTaXpl
T2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigic2VsZl9zaXplIik7CisgICAgICAgIHRoaXMu
X2VkZ2VzQ291bnRPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbl9jb3VudCIp
OworICAgICAgICB0aGlzLl9maXJzdEVkZ2VPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJj
aGlsZHJlbiIpOworICAgICAgICB0aGlzLl9ub2RlVHlwZXMgPSBtZXRhLnR5cGVzW3RoaXMuX25v
ZGVUeXBlT2Zmc2V0XTsKKyAgICAgICAgdGhpcy5fbm9kZUhpZGRlblR5cGUgPSB0aGlzLl9ub2Rl
VHlwZXMuaW5kZXhPZigiaGlkZGVuIik7CisgICAgICAgIHZhciBlZGdlc01ldGEgPSBtZXRhLnR5
cGVzW3RoaXMuX2ZpcnN0RWRnZU9mZnNldF07CisgICAgICAgIHRoaXMuX2VkZ2VGaWVsZHNDb3Vu
dCA9IGVkZ2VzTWV0YS5maWVsZHMubGVuZ3RoOworICAgICAgICB0aGlzLl9lZGdlVHlwZU9mZnNl
dCA9IGVkZ2VzTWV0YS5maWVsZHMuaW5kZXhPZigidHlwZSIpOworICAgICAgICB0aGlzLl9lZGdl
TmFtZU9mZnNldCA9IGVkZ2VzTWV0YS5maWVsZHMuaW5kZXhPZigibmFtZV9vcl9pbmRleCIpOwor
ICAgICAgICB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0ID0gZWRnZXNNZXRhLmZpZWxkcy5pbmRleE9m
KCJ0b19ub2RlIik7CisgICAgICAgIHRoaXMuX2VkZ2VUeXBlcyA9IGVkZ2VzTWV0YS50eXBlc1t0
aGlzLl9lZGdlVHlwZU9mZnNldF07CisgICAgICAgIHRoaXMuX2VkZ2VFbGVtZW50VHlwZSA9IHRo
aXMuX2VkZ2VUeXBlcy5pbmRleE9mKCJlbGVtZW50Iik7CisgICAgICAgIHRoaXMuX2VkZ2VIaWRk
ZW5UeXBlID0gdGhpcy5fZWRnZVR5cGVzLmluZGV4T2YoImhpZGRlbiIpOworICAgIH0sCisKKyAg
ICBnZXQgcm9vdEVkZ2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiAobmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLCB0aGlzLl9yb290Tm9kZUluZGV4KSkuZWRn
ZXM7CisgICAgfQorfTsKIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcgPSBmdW5jdGlv
bihwYXJlbnQsIHByb2ZpbGUpCiB7CkBAIC05NCw2ICsyNDIsNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKICAgICB0aGlzLnBlcmNl
bnRCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgInBlcmNlbnQt
dGltZS1zdGF0dXMtYmFyLWl0ZW0gc3RhdHVzLWJhci1pdGVtIik7CiAgICAgdGhpcy5wZXJjZW50
QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcGVyY2VudENsaWNrZWQuYmlu
ZCh0aGlzKSwgZmFsc2UpOwogCisgICAgdGhpcy5fbG9hZGVkQ2FsbGJhY2tzID0gW107CiAgICAg
dGhpcy5fbG9hZFByb2ZpbGUodGhpcy5wcm9maWxlLCBwcm9maWxlQ2FsbGJhY2suYmluZCh0aGlz
KSk7CiAKICAgICBmdW5jdGlvbiBwcm9maWxlQ2FsbGJhY2socHJvZmlsZSkKQEAgLTI5MCw2ICs0
MzksMTQgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLl91cGRhdGVTdW1tYXJ5R3JhcGgoKTsKICAgICB9LAogCisgICAgc25hcHNob3RM
b2FkZWQ6IGZ1bmN0aW9uKHVpZCwgbG9hZGVkU25hcHNob3QpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMuX2xvYWRlZENhbGxiYWNrc1t1aWRdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLl9sb2FkZWRDYWxsYmFja3NbdWlkXShsb2FkZWRTbmFwc2hvdCk7CisgICAgICAgIGRl
bGV0ZSB0aGlzLl9sb2FkZWRDYWxsYmFja3NbdWlkXTsKKyAgICB9LAorCiAgICAgX2NoYW5nZUJh
c2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdC51aWQg
PT09IHRoaXMuX2dldFByb2ZpbGVzKClbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZElu
ZGV4XS51aWQpCkBAIC0zMzIsMTUgKzQ4OSwxNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFByb2ZpbGUocHJvZmlsZS50eXBlSWQsIHByb2ZpbGUu
dWlkLCBsb2FkZWRDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbG9hZGVkQ2Fs
bGJhY2tzW3Byb2ZpbGUudWlkXSA9IHByb2Nlc3NMb2FkZWRTbmFwc2hvdC5iaW5kKHRoaXMpOwor
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFByb2ZpbGUocHJvZmlsZS50eXBlSWQsIHByb2Zp
bGUudWlkKTsKIAotICAgICAgICBmdW5jdGlvbiBsb2FkZWRDYWxsYmFjayhsb2FkZWRTbmFwc2hv
dCkgewotICAgICAgICAgICAgcHJvZmlsZS5jaGlsZHJlbiA9IGxvYWRlZFNuYXBzaG90LmhlYWQu
Y2hpbGRyZW47Ci0gICAgICAgICAgICBwcm9maWxlLmVudHJpZXMgPSBsb2FkZWRTbmFwc2hvdC5o
ZWFkLmVudHJpZXM7Ci0gICAgICAgICAgICBwcm9maWxlLmxvd2xldmVscyA9IGxvYWRlZFNuYXBz
aG90LmhlYWQubG93bGV2ZWxzOworICAgICAgICBmdW5jdGlvbiBwcm9jZXNzTG9hZGVkU25hcHNo
b3QobG9hZGVkU25hcHNob3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9
IHRoaXMuX2NvbnZlcnRTbmFwc2hvdChsb2FkZWRTbmFwc2hvdCk7CisgICAgICAgICAgICBwcm9m
aWxlLmNoaWxkcmVuID0gc25hcHNob3QuY2hpbGRyZW47CisgICAgICAgICAgICBwcm9maWxlLmVu
dHJpZXMgPSBzbmFwc2hvdC5lbnRyaWVzOworICAgICAgICAgICAgcHJvZmlsZS5sb3dsZXZlbHMg
PSBzbmFwc2hvdC5sb3dsZXZlbHM7CiAgICAgICAgICAgICB0aGlzLl9wcmVwYXJlUHJvZmlsZShw
cm9maWxlKTsKICAgICAgICAgICAgIHByb2ZpbGUuX2xvYWRlZCA9IHRydWU7Ci0gICAgICAgICAg
ICB0aGlzLnBhcmVudC51cGRhdGVQcm9maWxlKHByb2ZpbGUpOwogICAgICAgICAgICAgY2FsbGJh
Y2socHJvZmlsZSk7CiAgICAgICAgIH0KICAgICB9LApAQCAtMzg0LDYgKzU0MywyNiBAQCBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVm
cmVzaFNob3dBc1BlcmNlbnRzKCk7CiAgICAgfSwKIAorICAgIF9jb252ZXJ0U25hcHNob3Q6IGZ1
bmN0aW9uKGxvYWRlZFNuYXBzaG90KQorICAgIHsKKyAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QobG9hZGVkU25hcHNob3QpOworICAgICAgICB2YXIg
cmVzdWx0ID0ge2xvd2xldmVsczoge30sIGVudHJpZXM6IHt9LCBjaGlsZHJlbjoge319OworICAg
ICAgICBmb3IgKHZhciByb290RWRnZXMgPSBzbmFwc2hvdC5yb290RWRnZXM7ICFyb290RWRnZXMu
ZG9uZTsgcm9vdEVkZ2VzLm5leHQoKSkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSByb290RWRn
ZXMubm9kZTsKKyAgICAgICAgICAgIGlmIChub2RlLmlzSGlkZGVuKQorICAgICAgICAgICAgICAg
IHJlc3VsdC5sb3dsZXZlbHNbbm9kZS5uYW1lXSA9IHtjb3VudDogbm9kZS5pbnN0YW5jZXNDb3Vu
dCwgc2l6ZTogbm9kZS5zZWxmU2l6ZSwgdHlwZTogbm9kZS5uYW1lfTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUuaW5zdGFuY2VzQ291bnQpCisgICAgICAgICAgICAgICAgcmVzdWx0LmVudHJp
ZXNbbm9kZS5uYW1lXSA9IHtjb25zdHJ1Y3Rvck5hbWU6IG5vZGUubmFtZSwgY291bnQ6IG5vZGUu
aW5zdGFuY2VzQ291bnQsIHNpemU6IG5vZGUuc2VsZlNpemV9OworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0ge2NvbnN0cnVjdG9yTmFtZTogbm9kZS5uYW1l
fTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBlZGdlcyA9IG5vZGUuZWRnZXM7ICFlZGdlcy5k
b25lOyBlZGdlcy5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5W2VkZ2VzLm5vZGVJ
bmRleF0gPSB7Y29uc3RydWN0b3JOYW1lOiBlZGdlcy5ub2RlLm5hbWUsIGNvdW50OiBlZGdlcy5u
YW1lfTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW5bcm9vdEVkZ2VzLm5vZGVJbmRl
eF0gPSBlbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0sCisKICAgICBfcHJlcGFyZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCiAg
ICAgewogICAgICAgICBmb3IgKHZhciBwcm9maWxlRW50cnkgaW4gcHJvZmlsZS5lbnRyaWVzKQpA
QCAtMzkyLDEyICs1NzEsMTIgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90
eXBlID0gewogCiAgICAgICAgIGZvciAodmFyIGFkZHIgaW4gcHJvZmlsZS5jaGlsZHJlbikgewog
ICAgICAgICAgICAgdmFyIHJldGFpbmVyID0gcHJvZmlsZS5jaGlsZHJlblthZGRyXTsKLSAgICAg
ICAgICAgIHZhciByZXRhaW5lcklkID0gcmV0YWluZXIuY29uc3RydWN0b3JOYW1lICsgJzonICsg
YWRkcjsKKyAgICAgICAgICAgIHZhciByZXRhaW5lcklkID0gcmV0YWluZXIuY29uc3RydWN0b3JO
YW1lICsgIjoiICsgYWRkcjsKICAgICAgICAgICAgIGZvciAodmFyIGNoaWxkQWRkciBpbiByZXRh
aW5lcikgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZEFkZHIgPT09ICdjb25zdHJ1Y3Rvck5h
bWUnKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRBZGRyID09PSAiY29uc3Ry
dWN0b3JOYW1lIikgY29udGludWU7CiAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSByZXRhaW5l
cltjaGlsZEFkZHJdOwotICAgICAgICAgICAgICAgIHZhciBpdGVtSWQgPSBpdGVtLmNvbnN0cnVj
dG9yTmFtZSArICc6JyArIGNoaWxkQWRkcjsKLSAgICAgICAgICAgICAgICBpZiAoKGl0ZW0uY29u
c3RydWN0b3JOYW1lID09PSAnT2JqZWN0JyB8fCBpdGVtLmNvbnN0cnVjdG9yTmFtZSA9PT0gJ0Fy
cmF5JykpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbUlkID0gaXRlbS5jb25zdHJ1Y3Rvck5h
bWUgKyAiOiIgKyBjaGlsZEFkZHI7CisgICAgICAgICAgICAgICAgaWYgKChpdGVtLmNvbnN0cnVj
dG9yTmFtZSA9PT0gIk9iamVjdCIgfHwgaXRlbS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJBcnJheSIp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGl0ZW1JZCBpbiBwcm9maWxlLmNsdXN0ZXJz
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuY2x1c3RlcnNbaXRlbUlkXSA9IHsg
Y29uc3RydWN0b3JOYW1lOiBpdGVtSWQsIHJldGFpbmVyczoge30gfTsKICAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VSZXRhaW5lcnMocHJvZmlsZS5jbHVzdGVyc1tpdGVtSWRdLCBpdGVtKTsKQEAg
LTQxMiw3ICs1OTEsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICAgICBlbnRyeS5yZXRhaW5lcnNbcmV0YWluZXIuY29uc3RydWN0b3JO
YW1lXSA9IHsgY29uc3RydWN0b3JOYW1lOiByZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUsIGNvdW50
OiAwLCBjbHVzdGVyczoge30gfTsKICAgICAgICAgICAgIHZhciByZXRhaW5lckVudHJ5ID0gZW50
cnkucmV0YWluZXJzW3JldGFpbmVyLmNvbnN0cnVjdG9yTmFtZV07CiAgICAgICAgICAgICByZXRh
aW5lckVudHJ5LmNvdW50ICs9IGl0ZW0uY291bnQ7Ci0gICAgICAgICAgICBpZiAocmV0YWluZXIu
Y29uc3RydWN0b3JOYW1lID09PSAnT2JqZWN0JyB8fCByZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUg
PT09ICdBcnJheScpCisgICAgICAgICAgICBpZiAocmV0YWluZXIuY29uc3RydWN0b3JOYW1lID09
PSAiT2JqZWN0IiB8fCByZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUgPT09ICJBcnJheSIpCiAgICAg
ICAgICAgICAgICAgcmV0YWluZXJFbnRyeS5jbHVzdGVyc1tyZXRhaW5lcklkXSA9IHRydWU7CiAg
ICAgICAgIH0KICAgICB9LApAQCAtNDM4LDcgKzYxNyw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHNvcnRBc2NlbmRpbmcgPSB0aGlz
LmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7CiAgICAgICAgIHZhciBzb3J0Q29s
dW1uSWRlbnRpZmllciA9IHRoaXMuZGF0YUdyaWQuc29ydENvbHVtbklkZW50aWZpZXI7CiAgICAg
ICAgIHZhciBzb3J0UHJvcGVydHkgPSB7Ci0gICAgICAgICAgICBjb25zOiBbImNvbnMiLCBudWxs
XSwKKyAgICAgICAgICAgIGNvbnM6IFsiY29uc3RydWN0b3JOYW1lIiwgbnVsbF0sCiAgICAgICAg
ICAgICBjb3VudDogWyJjb3VudCIsIG51bGxdLAogICAgICAgICAgICAgc2l6ZTogWyJzaXplIiwg
ImNvdW50Il0sCiAgICAgICAgICAgICBjb3VudERlbHRhOiB0aGlzLnNob3dDb3VudERlbHRhQXNQ
ZXJjZW50ID8gWyJjb3VudERlbHRhUGVyY2VudCIsIG51bGxdIDogWyJjb3VudERlbHRhIiwgbnVs
bF0sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5l
bC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4
IDBhYTQxNzQuLjUwNzk1ZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlc1BhbmVsLmpzCkBAIC0xMjMsNiArMTIzLDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLl9wcm9maWxlcyA9IFtdOwogICAgIHRoaXMuX3By
b2ZpbGVyRW5hYmxlZCA9IFByZWZlcmVuY2VzLnByb2ZpbGVyQWx3YXlzRW5hYmxlZDsKKyAgICB0
aGlzLl90ZW1wSGVhcFNuYXBzaG90cyA9IFtdOwogICAgIHRoaXMuX3Jlc2V0KCk7CiB9CiAKQEAg
LTQxMSw2ICs0MTIsMjUgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgfQogICAgIH0sCiAKKyAgICBhZGRIZWFwU25hcHNob3RDaHVuazogZnVu
Y3Rpb24odWlkLCBjaHVuaykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90ZW1wSGVhcFNuYXBz
aG90c1t1aWRdKQorICAgICAgICAgICAgdGhpcy5fdGVtcEhlYXBTbmFwc2hvdHNbdWlkXSArPSBj
aHVuazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fdGVtcEhlYXBTbmFwc2hvdHNb
dWlkXSA9IGNodW5rOworICAgIH0sCisKKyAgICBmaW5pc2hIZWFwU25hcHNob3Q6IGZ1bmN0aW9u
KHVpZCkKKyAgICB7CisgICAgICAgIHZhciBwcm9maWxlID0KKyAgICAgICAgICAgIHRoaXMuX3By
b2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAg
IHZhciB2aWV3ID0gcHJvZmlsZS5fX3Byb2ZpbGVzUGFuZWxQcm9maWxlVHlwZS52aWV3Rm9yUHJv
ZmlsZShwcm9maWxlKTsKKyAgICAgICAgICAgIHZpZXcuc25hcHNob3RMb2FkZWQodWlkLCBKU09O
LnBhcnNlKHRoaXMuX3RlbXBIZWFwU25hcHNob3RzW3VpZF0pKTsKKyAgICAgICAgfQorICAgICAg
ICBkZWxldGUgdGhpcy5fdGVtcEhlYXBTbmFwc2hvdHNbdWlkXTsKKyAgICB9LAorCiAgICAgc2hv
d1ZpZXc6IGZ1bmN0aW9uKHZpZXcpCiAgICAgewogICAgICAgICB0aGlzLnNob3dQcm9maWxlKHZp
ZXcucHJvZmlsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRl
eCA5MjgwN2U2Li5hNGM2NjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKQEAgLTE1NDQsNiArMTU0NCwxNiBAQCBXZWJJbnNwZWN0b3Iuc2V0UmVjb3JkaW5nUHJv
ZmlsZSA9IGZ1bmN0aW9uKGlzUHJvZmlsaW5nKQogICAgIHRoaXMucGFuZWxzLnByb2ZpbGVzLnVw
ZGF0ZVByb2ZpbGVUeXBlQnV0dG9ucygpOwogfQogCitXZWJJbnNwZWN0b3IuYWRkSGVhcFNuYXBz
aG90Q2h1bmsgPSBmdW5jdGlvbih1aWQsIGNodW5rKQoreworICAgIHRoaXMucGFuZWxzLnByb2Zp
bGVzLmFkZEhlYXBTbmFwc2hvdENodW5rKHVpZCwgY2h1bmspOworfQorCitXZWJJbnNwZWN0b3Iu
ZmluaXNoSGVhcFNuYXBzaG90ID0gZnVuY3Rpb24odWlkKQoreworICAgIHRoaXMucGFuZWxzLnBy
b2ZpbGVzLmZpbmlzaEhlYXBTbmFwc2hvdCh1aWQpOworfQorCiBXZWJJbnNwZWN0b3IuZHJhd0xv
YWRpbmdQaWVDaGFydCA9IGZ1bmN0aW9uKGNhbnZhcywgcGVyY2VudCkgewogICAgIHZhciBnID0g
Y2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgdmFyIGRhcmtDb2xvciA9ICJyZ2IoMTIyLCAx
NjgsIDIxOCkiOwo=
</data>
<flag name="commit-queue"
          id="65470"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74788</attachid>
            <date>2010-11-24 13:28:12 -0800</date>
            <delta_ts>2010-11-29 16:17:59 -0800</delta_ts>
            <desc>Previous patch rebased</desc>
            <filename>49974-patch</filename>
            <type>text/plain</type>
            <size>23766</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDk1Y2FhMC4uNTRhMzkzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0xMS0yNCAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYkluc3BlY3RvcjogUmVxdWVzdCBKU09OLXNlcmlhbGl6
ZWQgaGVhcCBzbmFwc2hvdCBmcm9tIEpTIGVuZ2luZS4KKyAgICAgICAgVGhpcyBzaW1wbGlmaWVz
IGhlYXAgc25hcHNob3RzIGludGVyYWN0aW9uIGFuZCBBUEkuIEluc3RlYWQgb2YKKyAgICAgICAg
aGF2aW5nIG9iamVjdHMgcmVwcmVzZW50aW5nIHNuYXBzaG90IGVudGl0aWVzLCB0aGUgd2hvbGUg
c25hcHNob3QKKyAgICAgICAgaXMgdHJhbnNmZXJyZWQgdG8gV2ViSW5zcGVjdG9yIGFuZCBwYXJz
ZWQgdGhlcmUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ5OTc0CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6T3V0cHV0U3RyZWFtOjp+T3V0
cHV0U3RyZWFtKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90Ojp3cml0ZUpTT04pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0SGVhcFNuYXBzaG90OjpPdXRwdXRTdHJlYW06On5PdXRwdXRTdHJlYW0pOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdl
c0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJh
dG9yLnByb3RvdHlwZS5nZXQgZG9uZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUuZ2V0IGlzRWxlbWVudCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUuZ2V0IGlzSGlkZGVu
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3Rv
dHlwZS5nZXQgbmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJ
dGVyYXRvci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUuZ2V0IG5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBub2RlSW5kZXgpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBl
LmdldCBfbmFtZU9ySW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VzSXRlcmF0b3IucHJvdG90eXBlLmdldCBfdHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgZWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgZWRnZXNDb3VudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdl
dCBpbnN0YW5jZXNDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZVdyYXBwZXIucHJvdG90eXBlLmdldCBpc0hpZGRlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBuYW1lKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IHNlbGZTaXpl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5
cGUuZ2V0IF9uYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3Jh
cHBlci5wcm90b3R5cGUuZ2V0IF9lZGdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBfdHlwZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3Qu
cHJvdG90eXBlLl9pbml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJv
dG90eXBlLmdldCByb290RWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcucHJvdG90eXBlLnNuYXBzaG90TG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fbG9hZFByb2ZpbGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9jb252ZXJ0U25hcHNob3QpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9zb3J0RGF0YSk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBy
b2ZpbGVzUGFuZWwucHJvdG90eXBlLmFkZEhlYXBTbmFwc2hvdENodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5maW5pc2hIZWFwU25hcHNob3QpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmFkZEhlYXBTbmFwc2hvdENodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5m
aW5pc2hIZWFwU25hcHNob3QpOgorCiAyMDEwLTExLTI0ICBOaWNvbGFzIER1ZnJlc25lICA8bmlj
b2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFy
dGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFw
U25hcHNob3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90LmgKaW5k
ZXggYTk0MzJhZC4uN2U2Mzg4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRIZWFwU25hcHNob3QuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFw
c2hvdC5oCkBAIC0zOCwxNCArMzgsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JpcHRIZWFwU25hcHNob3QgOiBwdWJsaWMgUmVmQ291bnRlZDxTY3JpcHRIZWFwU25hcHNob3Q+
IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBPdXRwdXRTdHJlYW0geworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+T3V0cHV0U3RyZWFtKCkge30KKyAgICAgICAgdmlydHVhbCB2b2lkIFdyaXRl
KGNvbnN0IFN0cmluZyYgY2h1bmspID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIENsb3NlKCkg
PSAwOworICAgIH07CisKICAgICB2aXJ0dWFsIH5TY3JpcHRIZWFwU25hcHNob3QoKSB7fQogCiAg
ICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KICAgICB1bnNpZ25lZCBpbnQg
dWlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkg
Y29uc3QgeyByZXR1cm4gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsgfQotI2VuZGlmCisgICAg
dm9pZCB3cml0ZUpTT04oT3V0cHV0U3RyZWFtKikge30KIAogcHJpdmF0ZToKICAgICBTY3JpcHRI
ZWFwU25hcHNob3QoKSB7fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRI
ZWFwU25hcHNob3QuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3Qu
Y3BwCmluZGV4IDg4NWQwMzkuLmMzNWQ1MDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dEhlYXBTbmFwc2hvdC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgPHY4Lmg+CiAjaW5j
bHVkZSA8djgtcHJvZmlsZXIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTUwLDUwICs1MSwyOSBAQCB1bnNpZ25lZCBpbnQgU2NyaXB0
SGVhcFNuYXBzaG90Ojp1aWQoKSBjb25zdAogICAgIHJldHVybiBtX3NuYXBzaG90LT5HZXRVaWQo
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rv
ck9iamVjdEZvcihjb25zdCB2ODo6SGVhcEdyYXBoTm9kZSogcm9vdCkKLXsKLSAgICB2ODo6SGFu
ZGxlU2NvcGUgc2NvcGU7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb3dM
ZXZlbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGVudHJpZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGNoaWxkcmVuID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBmb3IgKGludCBpID0gMCwgY291bnQgPSByb290LT5HZXRDaGlsZHJlbkNvdW50KCk7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IHY4OjpIZWFwR3JhcGhOb2RlKiBub2RlID0gcm9v
dC0+R2V0Q2hpbGQoaSktPkdldFRvTm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+R2V0VHlwZSgp
ID09IHY4OjpIZWFwR3JhcGhOb2RlOjprSW50ZXJuYWwpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGxvd0xldmVsID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIGxvd0xldmVsLT5zZXROdW1iZXIoImNvdW50Iiwgbm9kZS0+R2V0SW5zdGFuY2Vz
Q291bnQoKSk7Ci0gICAgICAgICAgICBsb3dMZXZlbC0+c2V0TnVtYmVyKCJzaXplIiwgbm9kZS0+
R2V0U2VsZlNpemUoKSk7Ci0gICAgICAgICAgICBsb3dMZXZlbC0+c2V0U3RyaW5nKCJ0eXBlIiwg
dG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUoKSkpOwotICAgICAgICAgICAgbG93TGV2ZWxz
LT5zZXRPYmplY3QodG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUoKSksIGxvd0xldmVsKTsK
LSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5HZXRJbnN0YW5jZXNDb3VudCgpKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlbnRyeSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJjb25zdHJ1Y3Rvck5hbWUiLCB0
b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0
TnVtYmVyKCJjb3VudCIsIG5vZGUtPkdldEluc3RhbmNlc0NvdW50KCkpOwotICAgICAgICAgICAg
ZW50cnktPnNldE51bWJlcigic2l6ZSIsIG5vZGUtPkdldFNlbGZTaXplKCkpOwotICAgICAgICAg
ICAgZW50cmllcy0+c2V0T2JqZWN0KHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpLCBl
bnRyeSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBlbnRyeSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBlbnRy
eS0+c2V0U3RyaW5nKCJjb25zdHJ1Y3Rvck5hbWUiLCB0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0
TmFtZSgpKSk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMCwgY291bnQgPSBub2RlLT5HZXRD
aGlsZHJlbkNvdW50KCk7IGogPCBjb3VudDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
djg6OkhlYXBHcmFwaEVkZ2UqIHY4RWRnZSA9IG5vZGUtPkdldENoaWxkKGopOwotICAgICAgICAg
ICAgICAgIGNvbnN0IHY4OjpIZWFwR3JhcGhOb2RlKiB2OENoaWxkID0gdjhFZGdlLT5HZXRUb05v
ZGUoKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPnNldFN0cmlu
ZygiY29uc3RydWN0b3JOYW1lIiwgdG9XZWJDb3JlU3RyaW5nKHY4Q2hpbGQtPkdldE5hbWUoKSkp
OwotICAgICAgICAgICAgICAgIGNoaWxkLT5zZXROdW1iZXIoImNvdW50IiwgdjhFZGdlLT5HZXRO
YW1lKCktPlRvSW50ZWdlcigpLT5WYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBlbnRyeS0+c2V0
T2JqZWN0KFN0cmluZzo6bnVtYmVyKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
Pih2OENoaWxkKSksIGNoaWxkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoaWxkcmVu
LT5zZXRPYmplY3QoU3RyaW5nOjpudW1iZXIocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KG5vZGUpKSwgZW50cnkpOwotICAgICAgICB9CituYW1lc3BhY2UgeworCitjbGFzcyBP
dXRwdXRTdHJlYW1BZGFwdGVyIDogcHVibGljIHY4OjpPdXRwdXRTdHJlYW0geworcHVibGljOgor
ICAgIE91dHB1dFN0cmVhbUFkYXB0ZXIoU2NyaXB0SGVhcFNuYXBzaG90OjpPdXRwdXRTdHJlYW0q
IG91dHB1dCkKKyAgICAgICAgOiBtX291dHB1dChvdXRwdXQpIHsgfQorICAgIHZvaWQgRW5kT2ZT
dHJlYW0oKSB7IG1fb3V0cHV0LT5DbG9zZSgpOyB9CisgICAgaW50IEdldENodW5rU2l6ZSgpIHsg
cmV0dXJuIDEwMjQwOyB9CisgICAgV3JpdGVSZXN1bHQgV3JpdGVBc2NpaUNodW5rKGNoYXIqIGRh
dGEsIGludCBzaXplKQorICAgIHsKKyAgICAgICAgbV9vdXRwdXQtPldyaXRlKFN0cmluZyhkYXRh
LCBzaXplKSk7CisgICAgICAgIHJldHVybiBrQ29udGludWU7CiAgICAgfQotICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJsb3dsZXZlbHMiLCBsb3dMZXZlbHMpOwotICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJlbnRyaWVzIiwgZW50cmllcyk7Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoImNoaWxkcmVuIiwg
Y2hpbGRyZW4pOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQorcHJpdmF0ZToKKyAg
ICBTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1dFN0cmVhbSogbV9vdXRwdXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gU2NyaXB0SGVhcFNuYXBz
aG90OjpidWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSBjb25zdAordm9pZCBTY3JpcHRIZWFw
U25hcHNob3Q6OndyaXRlSlNPTihTY3JpcHRIZWFwU25hcHNob3Q6Ok91dHB1dFN0cmVhbSogc3Ry
ZWFtKQogewotICAgIHJldHVybiBidWlsZEluc3BlY3Rvck9iamVjdEZvcihtX3NuYXBzaG90LT5H
ZXRSb290KCkpOworICAgIE91dHB1dFN0cmVhbUFkYXB0ZXIgb3V0cHV0U3RyZWFtKHN0cmVhbSk7
CisgICAgbV9zbmFwc2hvdC0+U2VyaWFsaXplKCZvdXRwdXRTdHJlYW0sIHY4OjpIZWFwU25hcHNo
b3Q6OmtKU09OKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0SGVhcFNuYXBzaG90LmgKaW5kZXggNzk0YTVhOS4uZDNhZTAyMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCkBAIC00Myw2ICs0MywxMyBAQCBjbGFz
cyBJbnNwZWN0b3JPYmplY3Q7CiAKIGNsYXNzIFNjcmlwdEhlYXBTbmFwc2hvdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNjcmlwdEhlYXBTbmFwc2hvdD4gewogcHVibGljOgorICAgIGNsYXNzIE91dHB1
dFN0cmVhbSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PdXRwdXRTdHJlYW0oKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIFdyaXRlKGNvbnN0IFN0cmluZyYgY2h1bmspID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIENsb3NlKCkgPSAwOworICAgIH07CisKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IGNyZWF0ZShjb25zdCB2ODo6SGVhcFNuYXBz
aG90KiBzbmFwc2hvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0
SGVhcFNuYXBzaG90KHNuYXBzaG90KSk7CkBAIC01MSw4ICs1OCw3IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCB1aWQoKSBjb25zdDsKLQot
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvckhl
YWQoKSBjb25zdDsKKyAgICB2b2lkIHdyaXRlSlNPTihPdXRwdXRTdHJlYW0qIHN0cmVhbSk7CiAK
IHByaXZhdGU6CiAgICAgU2NyaXB0SGVhcFNuYXBzaG90KGNvbnN0IHY4OjpIZWFwU25hcHNob3Qq
IHNuYXBzaG90KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggZTgwODZhNi4uNjU4OTEyNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC01OCwxMCArNTgsMTIgQEAgbW9kdWxlIGNvcmUg
ewogCiAjaWYgZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pB
VkFTQ1JJUFRfREVCVUdHRVIKICAgICAgICAgW25vdGlmeV0gdm9pZCBhZGRQcm9maWxlSGVhZGVy
KG91dCBPYmplY3QgaGVhZGVyKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBhZGRIZWFwU25hcHNo
b3RDaHVuayhvdXQgdW5zaWduZWQgbG9uZyB1aWQsIG91dCBTdHJpbmcgY2h1bmspOwogICAgICAg
ICBbbm90aWZ5XSB2b2lkIGF0dGFjaERlYnVnZ2VyV2hlblNob3duKCk7CiAgICAgICAgIFtub3Rp
ZnldIHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgZGVi
dWdnZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIGZhaWxlZFRvUGFyc2VT
Y3JpcHRTb3VyY2Uob3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwgb3V0IGludCBmaXJz
dExpbmUsIG91dCBpbnQgZXJyb3JMaW5lLCBvdXQgU3RyaW5nIGVycm9yTWVzc2FnZSk7CisgICAg
ICAgIFtub3RpZnldIHZvaWQgZmluaXNoSGVhcFNuYXBzaG90KG91dCB1bnNpZ25lZCBsb25nIHVp
ZCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcGFyc2VkU2NyaXB0U291cmNlKG91dCBTdHJpbmcg
c291cmNlSUQsIG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGRhdGEsIG91dCBpbnQgZmlyc3RM
aW5lLCBvdXQgaW50IHNjcmlwdFdvcmxkVHlwZSk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcGF1
c2VkU2NyaXB0KG91dCBPYmplY3QgZGV0YWlscyk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJv
ZmlsZXJXYXNFbmFibGVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVy
QWdlbnQuY3BwCmluZGV4IDEyNDg2NzcuLjZkNTM2NGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0xNTYsNiArMTU2LDIxIEBAIHZvaWQgSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogaGVhZGVycykKICAgICAgICAgKCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVTbmFw
c2hvdEhlYWRlcigqaXQtPnNlY29uZCkpOwogfQogCituYW1lc3BhY2UgeworCitjbGFzcyBPdXRw
dXRTdHJlYW0gOiBwdWJsaWMgU2NyaXB0SGVhcFNuYXBzaG90OjpPdXRwdXRTdHJlYW0geworcHVi
bGljOgorICAgIE91dHB1dFN0cmVhbShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIHVuc2ln
bmVkIGxvbmcgdWlkKQorICAgICAgICA6IG1fZnJvbnRlbmQoZnJvbnRlbmQpLCBtX3VpZCh1aWQp
IHsgfQorICAgIHZvaWQgV3JpdGUoY29uc3QgU3RyaW5nJiBjaHVuaykgeyBtX2Zyb250ZW5kLT5h
ZGRIZWFwU25hcHNob3RDaHVuayhtX3VpZCwgY2h1bmspOyB9CisgICAgdm9pZCBDbG9zZSgpIHsg
bV9mcm9udGVuZC0+ZmluaXNoSGVhcFNuYXBzaG90KG1fdWlkKTsgfQorcHJpdmF0ZToKKyAgICBJ
bnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKKyAgICB1bnNpZ25lZCBsb25nIG1fdWlkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UKKwogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQ
cm9maWxlKGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiogcHJvZmlsZU9iamVjdCkKIHsKICAgICBpZiAodHlwZSA9PSBDUFVQcm9maWxlVHlw
ZSkgewpAQCAtMTY3LDggKzE4MiwxMiBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6Omdl
dFByb2ZpbGUoY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQsIFJlZlB0cgogICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBIZWFwUHJvZmlsZVR5cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChp
dCAhPSBtX3NuYXBzaG90cy5lbmQoKSkgewotICAgICAgICAgICAgKnByb2ZpbGVPYmplY3QgPSBj
cmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICAoKnByb2ZpbGVP
YmplY3QpLT5zZXRPYmplY3QoImhlYWQiLCBpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVj
dEZvckhlYWQoKSk7CisgICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFw
c2hvdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVNu
YXBzaG90SGVhZGVyKCpzbmFwc2hvdCk7CisgICAgICAgICAgICBpZiAobV9mcm9udGVuZCkgewor
ICAgICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBzdHJlYW0obV9mcm9udGVuZCwgdWlkKTsKKyAg
ICAgICAgICAgICAgICBzbmFwc2hvdC0+d3JpdGVKU09OKCZzdHJlYW0pOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90Vmlldy5qcwppbmRleCA2YmNjMGZmLi4wOGQ1YmI5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcwpAQCAtMjcsNiArMjcs
MTU0IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yID0gZnVuY3Rpb24oc25hcHNob3QsIGVkZ2VzKQor
eworICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CisgICAgdGhpcy5fZWRnZXMgPSBlZGdl
czsKKyAgICB0aGlzLl9lZGdlSW5kZXggPSAwOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGRvbmUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbmRleCA+PSB0aGlzLl9lZGdlcy5sZW5ndGg7CisgICAg
fSwKKworICAgIGdldCBpc0VsZW1lbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3R5
cGUgPT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlRWxlbWVudFR5cGU7CisgICAgfSwKKworICAgIGdl
dCBpc0hpZGRlbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gdGhpcy5f
c25hcHNob3QuX2VkZ2VIaWRkZW5UeXBlOworICAgIH0sCisKKyAgICBnZXQgbmFtZSgpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5pc0VsZW1lbnQgfHwgdGhpcy5pc0hpZGRlbiA/IHRoaXMu
X25hbWVPckluZGV4IDogdGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fbmFtZU9ySW5kZXhd
OworICAgIH0sCisKKyAgICBuZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9l
ZGdlSW5kZXggKz0gdGhpcy5fc25hcHNob3QuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICB9LAorCisg
ICAgZ2V0IG5vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZVdyYXBwZXIodGhpcy5fc25hcHNob3QsIHRoaXMubm9kZUluZGV4KTsKKyAg
ICB9LAorCisgICAgZ2V0IG5vZGVJbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
ZWRnZXNbdGhpcy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUb05vZGVPZmZzZXRd
OworICAgIH0sCisKKyAgICBnZXQgX25hbWVPckluZGV4KCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9lZGdlc1t0aGlzLl9lZGdlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZU5hbWVP
ZmZzZXRdOworICAgIH0sCisKKyAgICBnZXQgX3R5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2VkZ2VzW3RoaXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9lZGdlVHlwZU9m
ZnNldF07CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVy
ID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKK3sKKyAgICB0aGlzLl9zbmFwc2hvdCA9
IHNuYXBzaG90OworICAgIHRoaXMuX25vZGVzID0gc25hcHNob3QuX25vZGVzOworICAgIHRoaXMu
X25vZGVJbmRleCA9IG5vZGVJbmRleDsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGVXcmFwcGVyLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgZWRnZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvcih0aGlzLl9z
bmFwc2hvdCwgdGhpcy5fZWRnZXMpOworICAgIH0sCisKKyAgICBnZXQgZWRnZXNDb3VudCgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5f
c25hcHNob3QuX2VkZ2VzQ291bnRPZmZzZXRdOworICAgIH0sCisKKyAgICBnZXQgaW5zdGFuY2Vz
Q291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMuX25vZGVJbmRl
eCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlSW5zdGFuY2VzQ291bnRPZmZzZXRdOworICAgIH0sCisK
KyAgICBnZXQgaXNIaWRkZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09
IHRoaXMuX3NuYXBzaG90Ll9ub2RlSGlkZGVuVHlwZTsKKyAgICB9LAorCisgICAgZ2V0IG5hbWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9zdHJpbmdzW3RoaXMuX25h
bWVdOworICAgIH0sCisKKyAgICBnZXQgc2VsZlNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX25vZGVzW3RoaXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlU2VsZlNp
emVPZmZzZXRdOyAKKyAgICB9LAorCisgICAgZ2V0IF9uYW1lKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9kZU5h
bWVPZmZzZXRdOyAKKyAgICB9LAorCisgICAgZ2V0IF9lZGdlcygpCisgICAgeworICAgICAgICB2
YXIgZmlyc3RFZGdlSW5kZXggPSB0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZmly
c3RFZGdlT2Zmc2V0OworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXMuc2xpY2UoZmlyc3RFZGdl
SW5kZXgsIGZpcnN0RWRnZUluZGV4ICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25hcHNob3Qu
X2VkZ2VGaWVsZHNDb3VudCk7CisgICAgfSwKKworICAgIGdldCBfdHlwZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3Qu
X25vZGVUeXBlT2Zmc2V0XTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
ID0gZnVuY3Rpb24ocHJvZmlsZSkKK3sKKyAgICB0aGlzLl9wcm9maWxlID0gcHJvZmlsZTsKKyAg
ICB0aGlzLl9ub2RlcyA9IHByb2ZpbGUubm9kZXM7CisgICAgdGhpcy5fc3RyaW5ncyA9IHByb2Zp
bGUuc3RyaW5nczsKKworICAgIHRoaXMuX2luaXQoKTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUgPSB7CisgICAgX2luaXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX21ldGFOb2RlSW5kZXggPSAwOworICAgICAgICB0aGlzLl9yb290Tm9kZUluZGV4
ID0gMTsKKyAgICAgICAgdmFyIG1ldGEgPSB0aGlzLl9ub2Rlc1t0aGlzLl9tZXRhTm9kZUluZGV4
XTsKKyAgICAgICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJ0
eXBlIik7CisgICAgICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhP
ZigibmFtZSIpOworICAgICAgICB0aGlzLl9ub2RlSWRPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRl
eE9mKCJpZCIpOworICAgICAgICB0aGlzLl9ub2RlSW5zdGFuY2VzQ291bnRPZmZzZXQgPSB0aGlz
Ll9ub2RlSWRPZmZzZXQ7CisgICAgICAgIHRoaXMuX25vZGVTZWxmU2l6ZU9mZnNldCA9IG1ldGEu
ZmllbGRzLmluZGV4T2YoInNlbGZfc2l6ZSIpOworICAgICAgICB0aGlzLl9lZGdlc0NvdW50T2Zm
c2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigiY2hpbGRyZW5fY291bnQiKTsKKyAgICAgICAgdGhp
cy5fZmlyc3RFZGdlT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigiY2hpbGRyZW4iKTsKKyAg
ICAgICAgdGhpcy5fbm9kZVR5cGVzID0gbWV0YS50eXBlc1t0aGlzLl9ub2RlVHlwZU9mZnNldF07
CisgICAgICAgIHRoaXMuX25vZGVIaWRkZW5UeXBlID0gdGhpcy5fbm9kZVR5cGVzLmluZGV4T2Yo
ImhpZGRlbiIpOworICAgICAgICB2YXIgZWRnZXNNZXRhID0gbWV0YS50eXBlc1t0aGlzLl9maXJz
dEVkZ2VPZmZzZXRdOworICAgICAgICB0aGlzLl9lZGdlRmllbGRzQ291bnQgPSBlZGdlc01ldGEu
ZmllbGRzLmxlbmd0aDsKKyAgICAgICAgdGhpcy5fZWRnZVR5cGVPZmZzZXQgPSBlZGdlc01ldGEu
ZmllbGRzLmluZGV4T2YoInR5cGUiKTsKKyAgICAgICAgdGhpcy5fZWRnZU5hbWVPZmZzZXQgPSBl
ZGdlc01ldGEuZmllbGRzLmluZGV4T2YoIm5hbWVfb3JfaW5kZXgiKTsKKyAgICAgICAgdGhpcy5f
ZWRnZVRvTm9kZU9mZnNldCA9IGVkZ2VzTWV0YS5maWVsZHMuaW5kZXhPZigidG9fbm9kZSIpOwor
ICAgICAgICB0aGlzLl9lZGdlVHlwZXMgPSBlZGdlc01ldGEudHlwZXNbdGhpcy5fZWRnZVR5cGVP
ZmZzZXRdOworICAgICAgICB0aGlzLl9lZGdlRWxlbWVudFR5cGUgPSB0aGlzLl9lZGdlVHlwZXMu
aW5kZXhPZigiZWxlbWVudCIpOworICAgICAgICB0aGlzLl9lZGdlSGlkZGVuVHlwZSA9IHRoaXMu
X2VkZ2VUeXBlcy5pbmRleE9mKCJoaWRkZW4iKTsKKyAgICB9LAorCisgICAgZ2V0IHJvb3RFZGdl
cygpCisgICAgeworICAgICAgICByZXR1cm4gKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZVdyYXBwZXIodGhpcywgdGhpcy5fcm9vdE5vZGVJbmRleCkpLmVkZ2VzOworICAgIH0KK307
CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFyZW50LCBwcm9m
aWxlKQogewpAQCAtOTQsNiArMjQyLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcg
PSBmdW5jdGlvbihwYXJlbnQsIHByb2ZpbGUpCiAgICAgdGhpcy5wZXJjZW50QnV0dG9uID0gbmV3
IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oIiIsICJwZXJjZW50LXRpbWUtc3RhdHVzLWJh
ci1pdGVtIHN0YXR1cy1iYXItaXRlbSIpOwogICAgIHRoaXMucGVyY2VudEJ1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3BlcmNlbnRDbGlja2VkLmJpbmQodGhpcyksIGZhbHNl
KTsKIAorICAgIHRoaXMuX2xvYWRlZENhbGxiYWNrcyA9IFtdOwogICAgIHRoaXMuX2xvYWRQcm9m
aWxlKHRoaXMucHJvZmlsZSwgcHJvZmlsZUNhbGxiYWNrLmJpbmQodGhpcykpOwogCiAgICAgZnVu
Y3Rpb24gcHJvZmlsZUNhbGxiYWNrKHByb2ZpbGUpCkBAIC0yOTAsNiArNDM5LDE0IEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdXBk
YXRlU3VtbWFyeUdyYXBoKCk7CiAgICAgfSwKIAorICAgIHNuYXBzaG90TG9hZGVkOiBmdW5jdGlv
bih1aWQsIGxvYWRlZFNuYXBzaG90KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWRD
YWxsYmFja3NbdWlkXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fbG9hZGVk
Q2FsbGJhY2tzW3VpZF0obG9hZGVkU25hcHNob3QpOworICAgICAgICBkZWxldGUgdGhpcy5fbG9h
ZGVkQ2FsbGJhY2tzW3VpZF07CisgICAgfSwKKwogICAgIF9jaGFuZ2VCYXNlOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICBpZiAodGhpcy5iYXNlU25hcHNob3QudWlkID09PSB0aGlzLl9nZXRQ
cm9maWxlcygpW3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleF0udWlkKQpAQCAt
MzMyLDE1ICs0ODksMTcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5nZXRQcm9maWxlKHByb2ZpbGUudHlwZUlkLCBwcm9maWxlLnVpZCwgbG9hZGVkQ2Fs
bGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2xvYWRlZENhbGxiYWNrc1twcm9maWxl
LnVpZF0gPSBwcm9jZXNzTG9hZGVkU25hcHNob3QuYmluZCh0aGlzKTsKKyAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5nZXRQcm9maWxlKHByb2ZpbGUudHlwZUlkLCBwcm9maWxlLnVpZCk7CiAKLSAg
ICAgICAgZnVuY3Rpb24gbG9hZGVkQ2FsbGJhY2sobG9hZGVkU25hcHNob3QpIHsKLSAgICAgICAg
ICAgIHByb2ZpbGUuY2hpbGRyZW4gPSBsb2FkZWRTbmFwc2hvdC5oZWFkLmNoaWxkcmVuOwotICAg
ICAgICAgICAgcHJvZmlsZS5lbnRyaWVzID0gbG9hZGVkU25hcHNob3QuaGVhZC5lbnRyaWVzOwot
ICAgICAgICAgICAgcHJvZmlsZS5sb3dsZXZlbHMgPSBsb2FkZWRTbmFwc2hvdC5oZWFkLmxvd2xl
dmVsczsKKyAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0xvYWRlZFNuYXBzaG90KGxvYWRlZFNuYXBz
aG90KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc25hcHNob3QgPSB0aGlzLl9jb252ZXJ0
U25hcHNob3QobG9hZGVkU25hcHNob3QpOworICAgICAgICAgICAgcHJvZmlsZS5jaGlsZHJlbiA9
IHNuYXBzaG90LmNoaWxkcmVuOworICAgICAgICAgICAgcHJvZmlsZS5lbnRyaWVzID0gc25hcHNo
b3QuZW50cmllczsKKyAgICAgICAgICAgIHByb2ZpbGUubG93bGV2ZWxzID0gc25hcHNob3QubG93
bGV2ZWxzOwogICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVByb2ZpbGUocHJvZmlsZSk7CiAgICAg
ICAgICAgICBwcm9maWxlLl9sb2FkZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5wYXJlbnQu
dXBkYXRlUHJvZmlsZShwcm9maWxlKTsKICAgICAgICAgICAgIGNhbGxiYWNrKHByb2ZpbGUpOwog
ICAgICAgICB9CiAgICAgfSwKQEAgLTM4NCw2ICs1NDMsMjYgQEAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJj
ZW50cygpOwogICAgIH0sCiAKKyAgICBfY29udmVydFNuYXBzaG90OiBmdW5jdGlvbihsb2FkZWRT
bmFwc2hvdCkKKyAgICB7CisgICAgICAgIHZhciBzbmFwc2hvdCA9IG5ldyBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90KGxvYWRlZFNuYXBzaG90KTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHtsb3ds
ZXZlbHM6IHt9LCBlbnRyaWVzOiB7fSwgY2hpbGRyZW46IHt9fTsKKyAgICAgICAgZm9yICh2YXIg
cm9vdEVkZ2VzID0gc25hcHNob3Qucm9vdEVkZ2VzOyAhcm9vdEVkZ2VzLmRvbmU7IHJvb3RFZGdl
cy5uZXh0KCkpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gcm9vdEVkZ2VzLm5vZGU7CisgICAg
ICAgICAgICBpZiAobm9kZS5pc0hpZGRlbikKKyAgICAgICAgICAgICAgICByZXN1bHQubG93bGV2
ZWxzW25vZGUubmFtZV0gPSB7Y291bnQ6IG5vZGUuaW5zdGFuY2VzQ291bnQsIHNpemU6IG5vZGUu
c2VsZlNpemUsIHR5cGU6IG5vZGUubmFtZX07CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLmlu
c3RhbmNlc0NvdW50KQorICAgICAgICAgICAgICAgIHJlc3VsdC5lbnRyaWVzW25vZGUubmFtZV0g
PSB7Y29uc3RydWN0b3JOYW1lOiBub2RlLm5hbWUsIGNvdW50OiBub2RlLmluc3RhbmNlc0NvdW50
LCBzaXplOiBub2RlLnNlbGZTaXplfTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHtjb25zdHJ1Y3Rvck5hbWU6IG5vZGUubmFtZX07CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgZWRnZXMgPSBub2RlLmVkZ2VzOyAhZWRnZXMuZG9uZTsgZWRnZXMubmV4
dCgpKQorICAgICAgICAgICAgICAgICAgICBlbnRyeVtlZGdlcy5ub2RlSW5kZXhdID0ge2NvbnN0
cnVjdG9yTmFtZTogZWRnZXMubm9kZS5uYW1lLCBjb3VudDogZWRnZXMubmFtZX07CisgICAgICAg
ICAgICAgICAgcmVzdWx0LmNoaWxkcmVuW3Jvb3RFZGdlcy5ub2RlSW5kZXhdID0gZW50cnk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAor
CiAgICAgX3ByZXBhcmVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsKICAgICAgICAg
Zm9yICh2YXIgcHJvZmlsZUVudHJ5IGluIHByb2ZpbGUuZW50cmllcykKQEAgLTM5MiwxMiArNTcx
LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICBmb3IgKHZhciBhZGRyIGluIHByb2ZpbGUuY2hpbGRyZW4pIHsKICAgICAgICAgICAgIHZh
ciByZXRhaW5lciA9IHByb2ZpbGUuY2hpbGRyZW5bYWRkcl07Ci0gICAgICAgICAgICB2YXIgcmV0
YWluZXJJZCA9IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSArICc6JyArIGFkZHI7CisgICAgICAg
ICAgICB2YXIgcmV0YWluZXJJZCA9IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSArICI6IiArIGFk
ZHI7CiAgICAgICAgICAgICBmb3IgKHZhciBjaGlsZEFkZHIgaW4gcmV0YWluZXIpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRBZGRyID09PSAnY29uc3RydWN0b3JOYW1lJykgY29udGludWU7
CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkQWRkciA9PT0gImNvbnN0cnVjdG9yTmFtZSIpIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIHZhciBpdGVtID0gcmV0YWluZXJbY2hpbGRBZGRyXTsK
LSAgICAgICAgICAgICAgICB2YXIgaXRlbUlkID0gaXRlbS5jb25zdHJ1Y3Rvck5hbWUgKyAnOicg
KyBjaGlsZEFkZHI7Ci0gICAgICAgICAgICAgICAgaWYgKChpdGVtLmNvbnN0cnVjdG9yTmFtZSA9
PT0gJ09iamVjdCcgfHwgaXRlbS5jb25zdHJ1Y3Rvck5hbWUgPT09ICdBcnJheScpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGl0ZW1JZCA9IGl0ZW0uY29uc3RydWN0b3JOYW1lICsgIjoiICsgY2hp
bGRBZGRyOworICAgICAgICAgICAgICAgIGlmICgoaXRlbS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJP
YmplY3QiIHx8IGl0ZW0uY29uc3RydWN0b3JOYW1lID09PSAiQXJyYXkiKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoIShpdGVtSWQgaW4gcHJvZmlsZS5jbHVzdGVycykpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlLmNsdXN0ZXJzW2l0ZW1JZF0gPSB7IGNvbnN0cnVjdG9yTmFt
ZTogaXRlbUlkLCByZXRhaW5lcnM6IHt9IH07CiAgICAgICAgICAgICAgICAgICAgIG1lcmdlUmV0
YWluZXJzKHByb2ZpbGUuY2x1c3RlcnNbaXRlbUlkXSwgaXRlbSk7CkBAIC00MTIsNyArNTkxLDcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgZW50cnkucmV0YWluZXJzW3JldGFpbmVyLmNvbnN0cnVjdG9yTmFtZV0gPSB7IGNvbnN0
cnVjdG9yTmFtZTogcmV0YWluZXIuY29uc3RydWN0b3JOYW1lLCBjb3VudDogMCwgY2x1c3RlcnM6
IHt9IH07CiAgICAgICAgICAgICB2YXIgcmV0YWluZXJFbnRyeSA9IGVudHJ5LnJldGFpbmVyc1ty
ZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWVdOwogICAgICAgICAgICAgcmV0YWluZXJFbnRyeS5jb3Vu
dCArPSBpdGVtLmNvdW50OwotICAgICAgICAgICAgaWYgKHJldGFpbmVyLmNvbnN0cnVjdG9yTmFt
ZSA9PT0gJ09iamVjdCcgfHwgcmV0YWluZXIuY29uc3RydWN0b3JOYW1lID09PSAnQXJyYXknKQor
ICAgICAgICAgICAgaWYgKHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSA9PT0gIk9iamVjdCIgfHwg
cmV0YWluZXIuY29uc3RydWN0b3JOYW1lID09PSAiQXJyYXkiKQogICAgICAgICAgICAgICAgIHJl
dGFpbmVyRW50cnkuY2x1c3RlcnNbcmV0YWluZXJJZF0gPSB0cnVlOwogICAgICAgICB9CiAgICAg
fSwKQEAgLTQzOCw3ICs2MTcsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhpcy5kYXRhR3JpZC5zb3J0
T3JkZXIgPT09ICJhc2NlbmRpbmciOwogICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIg
PSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyOwogICAgICAgICB2YXIgc29ydFBy
b3BlcnR5ID0gewotICAgICAgICAgICAgY29uczogWyJjb25zIiwgbnVsbF0sCisgICAgICAgICAg
ICBjb25zOiBbImNvbnN0cnVjdG9yTmFtZSIsIG51bGxdLAogICAgICAgICAgICAgY291bnQ6IFsi
Y291bnQiLCBudWxsXSwKICAgICAgICAgICAgIHNpemU6IFsic2l6ZSIsICJjb3VudCJdLAogICAg
ICAgICAgICAgY291bnREZWx0YTogdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudCA/IFsiY291
bnREZWx0YVBlcmNlbnQiLCBudWxsXSA6IFsiY291bnREZWx0YSIsIG51bGxdLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCAwYWE0MTc0Li41MDc5
NWU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5l
bC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwpA
QCAtMTIzLDYgKzEyMyw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsID0gZnVuY3Rpb24o
KQogCiAgICAgdGhpcy5fcHJvZmlsZXMgPSBbXTsKICAgICB0aGlzLl9wcm9maWxlckVuYWJsZWQg
PSBQcmVmZXJlbmNlcy5wcm9maWxlckFsd2F5c0VuYWJsZWQ7CisgICAgdGhpcy5fdGVtcEhlYXBT
bmFwc2hvdHMgPSBbXTsKICAgICB0aGlzLl9yZXNldCgpOwogfQogCkBAIC00MTEsNiArNDEyLDI1
IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IH0KICAgICB9LAogCisgICAgYWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1
bmspCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGVtcEhlYXBTbmFwc2hvdHNbdWlkXSkKKyAg
ICAgICAgICAgIHRoaXMuX3RlbXBIZWFwU25hcHNob3RzW3VpZF0gKz0gY2h1bms7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3RlbXBIZWFwU25hcHNob3RzW3VpZF0gPSBjaHVuazsK
KyAgICB9LAorCisgICAgZmluaXNoSGVhcFNuYXBzaG90OiBmdW5jdGlvbih1aWQpCisgICAgewor
ICAgICAgICB2YXIgcHJvZmlsZSA9CisgICAgICAgICAgICB0aGlzLl9wcm9maWxlc0lkTWFwW3Ro
aXMuX21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlw
ZUlkKV07CisgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICB2YXIgdmlldyA9IHBy
b2ZpbGUuX19wcm9maWxlc1BhbmVsUHJvZmlsZVR5cGUudmlld0ZvclByb2ZpbGUocHJvZmlsZSk7
CisgICAgICAgICAgICB2aWV3LnNuYXBzaG90TG9hZGVkKHVpZCwgSlNPTi5wYXJzZSh0aGlzLl90
ZW1wSGVhcFNuYXBzaG90c1t1aWRdKSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMu
X3RlbXBIZWFwU25hcHNob3RzW3VpZF07CisgICAgfSwKKwogICAgIHNob3dWaWV3OiBmdW5jdGlv
bih2aWV3KQogICAgIHsKICAgICAgICAgdGhpcy5zaG93UHJvZmlsZSh2aWV3LnByb2ZpbGUpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggNzg1OTJmZi4uNTEx
NDVjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xNTQ1
LDYgKzE1NDUsMTYgQEAgV2ViSW5zcGVjdG9yLnNldFJlY29yZGluZ1Byb2ZpbGUgPSBmdW5jdGlv
bihpc1Byb2ZpbGluZykKICAgICB0aGlzLnBhbmVscy5wcm9maWxlcy51cGRhdGVQcm9maWxlVHlw
ZUJ1dHRvbnMoKTsKIH0KIAorV2ViSW5zcGVjdG9yLmFkZEhlYXBTbmFwc2hvdENodW5rID0gZnVu
Y3Rpb24odWlkLCBjaHVuaykKK3sKKyAgICB0aGlzLnBhbmVscy5wcm9maWxlcy5hZGRIZWFwU25h
cHNob3RDaHVuayh1aWQsIGNodW5rKTsKK30KKworV2ViSW5zcGVjdG9yLmZpbmlzaEhlYXBTbmFw
c2hvdCA9IGZ1bmN0aW9uKHVpZCkKK3sKKyAgICB0aGlzLnBhbmVscy5wcm9maWxlcy5maW5pc2hI
ZWFwU25hcHNob3QodWlkKTsKK30KKwogV2ViSW5zcGVjdG9yLmRyYXdMb2FkaW5nUGllQ2hhcnQg
PSBmdW5jdGlvbihjYW52YXMsIHBlcmNlbnQpIHsKICAgICB2YXIgZyA9IGNhbnZhcy5nZXRDb250
ZXh0KCIyZCIpOwogICAgIHZhciBkYXJrQ29sb3IgPSAicmdiKDEyMiwgMTY4LCAyMTgpIjsK
</data>
<flag name="review"
          id="65471"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="65472"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>