<?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>48858</bug_id>
          
          <creation_ts>2010-11-02 11:46:00 -0700</creation_ts>
          <short_desc>Web Inspector: native breakpoints aren&apos;t hit on navigation</short_desc>
          <delta_ts>2010-12-15 02:44:32 -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>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</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>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303520</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-02 11:46:00 -0700</bug_when>
    <thetext>Web Inspector: native breakpoints aren&apos;t hit on navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303525</commentid>
    <comment_count>1</comment_count>
      <attachid>72709</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-02 11:49:52 -0700</bug_when>
    <thetext>Created attachment 72709
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303905</commentid>
    <comment_count>2</comment_count>
      <attachid>72709</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-03 00:09:51 -0700</bug_when>
    <thetext>Comment on attachment 72709
Patch.

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

I see two changes here: first makes front-end responsible for assigning breakpoint ids, second makes them survive commit load. Two questions:
- is the first part really related to the fix,
- i don&apos;t see where the breakpoint maps get into the state cookie which makes me think that it won&apos;t stop upon renderer (inspector controller) change.

&gt; WebCore/inspector/InspectorController.cpp:730
&gt; +            m_debuggerAgent-&gt;setPauseWhenAttached();

Should this be called in reuseFrontend?

&gt; WebCore/inspector/InspectorDOMAgent.cpp:782
&gt; +    m_breakpointToId.remove(breakpoint);

clean up m_idToBreakpoint here as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303975</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-03 04:22:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 72709 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72709&amp;action=review
&gt; 
&gt; I see two changes here: first makes front-end responsible for assigning breakpoint ids, second makes them survive commit load. Two questions:
&gt; - is the first part really related to the fix,
It is related, because without this change, closing front-end while breakpoints are restored, may result in inconsistent state.

&gt; - i don&apos;t see where the breakpoint maps get into the state cookie which makes me think that it won&apos;t stop upon renderer (inspector controller) change.
Breakpoints are set by front-end while debugger is paused on the first script.

&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:730
&gt; &gt; +            m_debuggerAgent-&gt;setPauseWhenAttached();
&gt; 
&gt; Should this be called in reuseFrontend?
I think calling this in didCommitLoad should be enough.

&gt; 
&gt; &gt; WebCore/inspector/InspectorDOMAgent.cpp:782
&gt; &gt; +    m_breakpointToId.remove(breakpoint);
&gt; 
&gt; clean up m_idToBreakpoint here as well?
Call to m_idToBreakpoint.take above removes the breakpoint from m_idToBreakpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304057</commentid>
    <comment_count>4</comment_count>
      <attachid>72829</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-03 09:19:30 -0700</bug_when>
    <thetext>Created attachment 72829
Patch.

setNativeBreakpoint should return breakpointId as discussed offline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304579</commentid>
    <comment_count>5</comment_count>
      <attachid>72829</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-04 04:27:28 -0700</bug_when>
    <thetext>Comment on attachment 72829
Patch.

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

&gt; WebCore/inspector/InspectorDOMAgent.cpp:761
&gt; +void InspectorDOMAgent::setDOMBreakpoint(const String&amp; breakpointId, long nodeId, long type)

I like the way it used to be better. Dom agent can manage dom breakpoint handles (i.e. return then and delete by them). And if there already is a breakpoint of a type, we could return illegal handle / report error.

&gt; WebCore/inspector/InspectorDebuggerAgent.cpp:160
&gt; +    if (m_scheduledPauseEventType != type)

This gets complex. Could you provide an example where we hit this guard? Setting r- until you provide explanation.

&gt; WebCore/inspector/front-end/DOMAgent.js:382
&gt; +            WebInspector.breakpointManager.setCanRestoreDOMBreakpoints();

I like the previous name more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310764</commentid>
    <comment_count>6</comment_count>
      <attachid>74222</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-18 03:12:07 -0800</bug_when>
    <thetext>Created attachment 74222
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310781</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-18 03:51:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 72829 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72829&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorDOMAgent.cpp:761
&gt; &gt; +void InspectorDOMAgent::setDOMBreakpoint(const String&amp; breakpointId, long nodeId, long type)
&gt; 
&gt; I like the way it used to be better. Dom agent can manage dom breakpoint handles (i.e. return then and delete by them). And if there already is a breakpoint of a type, we could return illegal handle / report error.

Done.

&gt; 
&gt; &gt; WebCore/inspector/InspectorDebuggerAgent.cpp:160
&gt; &gt; +    if (m_scheduledPauseEventType != type)
&gt; 
&gt; This gets complex. Could you provide an example where we hit this guard? Setting r- until you provide explanation.

The idea is to ignore schedulePause/cancelPause called from InspectorInstrumentation when &quot;pause on attach&quot; or &quot;pause on next JS statement&quot; is already scheduled to avoid unwanted pause cancellation.

&gt; 
&gt; &gt; WebCore/inspector/front-end/DOMAgent.js:382
&gt; &gt; +            WebInspector.breakpointManager.setCanRestoreDOMBreakpoints();
&gt; 
&gt; I like the previous name more.

setCanRestoreDOMBreakpoints -&gt; documentSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318811</commentid>
    <comment_count>8</comment_count>
      <attachid>75912</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-08 08:52:26 -0800</bug_when>
    <thetext>Created attachment 75912
Patch.

Use backend cookie to restore sticky breakpoints on navigation instead of pausing debugger on attach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319368</commentid>
    <comment_count>9</comment_count>
      <attachid>75912</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-09 03:07:02 -0800</bug_when>
    <thetext>Comment on attachment 75912
Patch.

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

&gt; WebCore/inspector/InspectorState.cpp:52
&gt; +    registerObject(stickyBreakpoints, (const char*)0, (const char*)0);

Let&apos;s introduce a constant for (const char*)0 or better pass String() since the method accepts const String&amp;

&gt; WebCore/inspector/front-end/BreakpointManager.js:69
&gt; +        var stickyId = this._setNativeBreakpoint(&quot;DOM&quot;, !disabled, { path: path, domEventType: domEventType });

Please extract constants for native breakpoint types.

&gt; WebCore/inspector/front-end/BreakpointManager.js:159
&gt; +        InspectorBackend.setNativeBreakpoint(data, this.stickyBreakpointRestored.bind(this, stickyId));

The callback method should be called didSetBreakpoint or didSetNativeBreakpoint.

&gt; WebCore/inspector/front-end/BreakpointManager.js:169
&gt; +    stickyBreakpointRestored: function(stickyId, backendId)

Can you explain why we need two types of ids: sticky and backend ones? It seems that the front-end can assign ids for all the breakpoints when it loads them from settings/they are being added and the back-end can reuse the same ids.

Also from the FE point of view stickyId is just an id for a breakpoint that is valid during current debug session only so it&apos;s not clear why it&apos;s sticky.

&gt; WebCore/inspector/front-end/BreakpointManager.js:172
&gt; +        if (!breakpoint || !breakpoint.enabled || breakpoint._backendId) {

What&apos;s the scenario when you need to remove breakpoint due to the last condition(breakpoint._backendId)?

&gt; WebCore/inspector/front-end/BreakpointManager.js:261
&gt; +            if (breakpoint.type === &quot;EventListener&quot;)

Why not create these views after they have been restored on the back-end and the front-end receives stickyBreakpointRestored notification?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321177</commentid>
    <comment_count>10</comment_count>
      <attachid>76399</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-13 09:58:24 -0800</bug_when>
    <thetext>Created attachment 76399
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321314</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-13 12:13:40 -0800</bug_when>
    <thetext>Attachment 76399 did not build on chromium:
Build output: http://queues.webkit.org/results/7028066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321887</commentid>
    <comment_count>12</comment_count>
      <attachid>76399</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-14 04:25:49 -0800</bug_when>
    <thetext>Comment on attachment 76399
Patch.

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

&gt; WebCore/inspector/front-end/BreakpointManager.js:36
&gt; +        this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]);

Why do we need this validation? No one else has access to the storage.

&gt; WebCore/inspector/front-end/BreakpointManager.js:193
&gt; +            if (breakpoint.type === WebInspector.BreakpointManager.NativeBreakpointTypes.EventListener)

Why is there no branch for DOM breakpoints?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322553</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-15 02:40:00 -0800</bug_when>
    <thetext>Committed r74103: &lt;http://trac.webkit.org/changeset/74103&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322554</commentid>
    <comment_count>14</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-15 02:44:32 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 76399 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76399&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/front-end/BreakpointManager.js:36
&gt; &gt; +        this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]);
&gt; 
&gt; Why do we need this validation? No one else has access to the storage.

Storage format may change in future.

&gt; 
&gt; &gt; WebCore/inspector/front-end/BreakpointManager.js:193
&gt; &gt; +            if (breakpoint.type === WebInspector.BreakpointManager.NativeBreakpointTypes.EventListener)
&gt; 
&gt; Why is there no branch for DOM breakpoints?

DOM breakpoints are restored after pushing nodes by path to frontend.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72709</attachid>
            <date>2010-11-02 11:49:52 -0700</date>
            <delta_ts>2010-11-03 09:19:30 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>35760</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDMyZWQwYS4uNjVmOTlmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw2MyBAQAogMjAxMC0xMS0wMiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzZXQgbmF0aXZlIGJyZWFrcG9p
bnRzIG9uIGJhY2tlbmQgYmVmb3JlIHNjcmlwdHMgc3RhcnQgZXhlY3V0aW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODg1OAorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnNldE5hdGl2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVtb3ZlTmF0aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpmaW5kRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJOYXRpdmVCcmVha3BvaW50cyk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
QWdlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldERP
TUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92
ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnJlbW92ZUJyZWFrcG9pbnRzRm9yTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VXaGVuQXR0YWNoZWQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
TmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGVuYWJsZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUu
cHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvRE9NQWdlbnQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBl
Ll9zZXREb2N1bWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLmRlYnVnZ2VyUGF1c2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuZWRpdFNjcmlwdFNvdXJjZS5teWNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3Jp
cHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUu
X2RlYnVnZ2VyUGF1c2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlcldhc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IucmVz
ZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmluc3BlY3RlZFVSTENoYW5nZWQpOgorCisyMDEw
LTExLTAyICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
bWFrZSB4aHIgYnJlYWtwb2ludHMgZWRpdGFibGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4
IDFmNGM3OGMuLjEwOWE2MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMTQzLDcgKzE0
Myw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9RGVidWddIHZvaWQgZWRpdFNj
cmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIGluIFN0cmluZyBuZXdDb250ZW50LCBvdXQg
Ym9vbGVhbiBzdWNjZXNzLCBvdXQgU3RyaW5nIHJlc3VsdCwgb3V0IFZhbHVlIG5ld0NhbGxGcmFt
ZXMpOwogICAgICAgICBbaGFuZGxlcj1EZWJ1Z10gdm9pZCBnZXRTY3JpcHRTb3VyY2UoaW4gU3Ry
aW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHNjcmlwdFNvdXJjZSk7CiAKLSAgICAgICAgW2hhbmRs
ZXI9Q29udHJvbGxlcl0gdm9pZCBzZXROYXRpdmVCcmVha3BvaW50KGluIE9iamVjdCBicmVha3Bv
aW50LCBvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCk7CisgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xs
ZXJdIHZvaWQgc2V0TmF0aXZlQnJlYWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkLCBpbiBP
YmplY3QgYnJlYWtwb2ludCk7CiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgcmVt
b3ZlTmF0aXZlQnJlYWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkKTsKIAogICAgICAgICBb
aGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGVuYWJsZVByb2ZpbGVyKGluIGJvb2xlYW4gYWx3YXlz
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNWE0YWJj
MC4uZDg2ZWYyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
QEAgLTE1NCw3ICsxNTQsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKGZh
bHNlKQotICAgICwgbV9sYXN0QnJlYWtwb2ludElkKDApCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQo
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC03MjYs
OCArNzI1LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1
bWVudExvYWRlciogbG9hZGVyKQogICAgICAgICBtX2NvdW50cy5jbGVhcigpOwogCiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCisg
ICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+Y2xlYXJGb3JQYWdlTmF2aWdhdGlvbigpOworICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5zZXRQYXVzZVdoZW5BdHRhY2hlZCgpOworICAgICAgICB9CiAKICAgICAgICAgY2xlYXJOYXRp
dmVCcmVha3BvaW50cygpOwogI2VuZGlmCkBAIC0xMzkzLDkgKzEzOTQsOCBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlc3VtZSgpCiAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVzdW1l
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TmF0aXZlQnJlYWtwb2ludChQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCwgU3RyaW5nKiBicmVha3BvaW50
SWQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3Bv
aW50KQogewotICAgICpicmVha3BvaW50SWQgPSAiIjsKICAgICBTdHJpbmcgdHlwZTsKICAgICBp
ZiAoIWJyZWFrcG9pbnQtPmdldFN0cmluZygidHlwZSIsICZ0eXBlKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQwNiwxOCArMTQwNiwxNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5h
dGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcAogICAgICAg
ICBTdHJpbmcgdXJsOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAm
dXJsKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgKmJyZWFrcG9pbnRJZCA9IFN0cmlu
Zzo6bnVtYmVyKCsrbV9sYXN0QnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9YSFJCcmVha3BvaW50
cy5zZXQoKmJyZWFrcG9pbnRJZCwgdXJsKTsKLSAgICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5z
ZXQoKmJyZWFrcG9pbnRJZCwgdHlwZSk7CisgICAgICAgIG1fWEhSQnJlYWtwb2ludHMuc2V0KGJy
ZWFrcG9pbnRJZCwgdXJsKTsKKyAgICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQoYnJlYWtw
b2ludElkLCB0eXBlKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lck5hdGl2
ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAgICAgIFN0cmluZyBldmVudE5hbWU7CiAgICAgICAgIGlm
ICghY29uZGl0aW9uLT5nZXRTdHJpbmcoImV2ZW50TmFtZSIsICZldmVudE5hbWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY29u
dGFpbnMoZXZlbnROYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgKmJyZWFrcG9p
bnRJZCA9IGV2ZW50TmFtZTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuYWRk
KGV2ZW50TmFtZSk7Ci0gICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50
SWQsIHR5cGUpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5zZXQoYnJlYWtw
b2ludElkLCBldmVudE5hbWUpOworICAgICAgICBtX2V2ZW50TmFtZVRvQnJlYWtwb2ludElkLnNl
dChldmVudE5hbWUsIGJyZWFrcG9pbnRJZCk7CisgICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMu
c2V0KGJyZWFrcG9pbnRJZCwgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IGRvbU5hdGl2
ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAgICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE0MjksOSArMTQyOCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGxvbmcgbm9kZUlkID0gKGxvbmcpIG5vZGVJZE51
bWJlcjsKICAgICAgICAgbG9uZyBkb21CcmVha3BvaW50VHlwZSA9IChsb25nKSBkb21CcmVha3Bv
aW50VHlwZU51bWJlcjsKLSAgICAgICAgKmJyZWFrcG9pbnRJZCA9IG1fZG9tQWdlbnQtPnNldERP
TUJyZWFrcG9pbnQobm9kZUlkLCBkb21CcmVha3BvaW50VHlwZSk7Ci0gICAgICAgIGlmICghYnJl
YWtwb2ludElkLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNl
dCgqYnJlYWtwb2ludElkLCB0eXBlKTsKKyAgICAgICAgbV9kb21BZ2VudC0+c2V0RE9NQnJlYWtw
b2ludChicmVha3BvaW50SWQsIG5vZGVJZCwgZG9tQnJlYWtwb2ludFR5cGUpOworICAgICAgICBt
X25hdGl2ZUJyZWFrcG9pbnRzLnNldChicmVha3BvaW50SWQsIHR5cGUpOwogICAgIH0KIH0KIApA
QCAtMTQ0MCw5ICsxNDM4LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlTmF0
aXZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKICAgICBTdHJpbmcgdHlw
ZSA9IG1fbmF0aXZlQnJlYWtwb2ludHMudGFrZShicmVha3BvaW50SWQpOwogICAgIGlmICh0eXBl
ID09IHhock5hdGl2ZUJyZWFrcG9pbnRUeXBlKQogICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJl
bW92ZShicmVha3BvaW50SWQpOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lck5h
dGl2ZUJyZWFrcG9pbnRUeXBlKQotICAgICAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5y
ZW1vdmUoYnJlYWtwb2ludElkKTsKLSAgICBlbHNlIGlmICh0eXBlID09IGRvbU5hdGl2ZUJyZWFr
cG9pbnRUeXBlKSB7CisgICAgZWxzZSBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJl
YWtwb2ludFR5cGUpIHsKKyAgICAgICAgU3RyaW5nIGV2ZW50TmFtZSA9IG1fZXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnRzLnRha2UoYnJlYWtwb2ludElkKTsKKyAgICAgICAgbV9ldmVudE5hbWVUb0Jy
ZWFrcG9pbnRJZC5yZW1vdmUoZXZlbnROYW1lKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gZG9t
TmF0aXZlQnJlYWtwb2ludFR5cGUpIHsKICAgICAgICAgaWYgKG1fZG9tQWdlbnQpCiAgICAgICAg
ICAgICBtX2RvbUFnZW50LT5yZW1vdmVET01CcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CiAgICAg
fQpAQCAtMTQ1MCw3ICsxNDQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVO
YXRpdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKQogCiBTdHJpbmcgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZmluZEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgZXZlbnROYW1lKQogewotICAgIHJldHVybiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5j
b250YWlucyhldmVudE5hbWUpID8gZXZlbnROYW1lIDogIiI7CisgICAgcmV0dXJuIG1fZXZlbnRO
YW1lVG9CcmVha3BvaW50SWQuZ2V0KGV2ZW50TmFtZSk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JD
b250cm9sbGVyOjpmaW5kWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKQEAgLTE0NjYs
OCArMTQ2NSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJOYXRpdmVCcmVha3Bv
aW50cygpCiB7CiAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5jbGVhcigpOwogICAgIG1fZXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9ldmVudE5hbWVUb0JyZWFrcG9pbnRJ
ZC5jbGVhcigpOwogICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKLSAgICBtX2xhc3RCcmVh
a3BvaW50SWQgPSAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAppbmRleCBhYjcyOGExLi5kZDNkNThiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCkBAIC0yNTIsNyArMjUyLDcgQEAgcHVibGljOgogICAgIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
QWdlbnQuZ2V0KCk7IH0KICAgICB2b2lkIHJlc3VtZSgpOwogCi0gICAgdm9pZCBzZXROYXRpdmVC
cmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50LCBTdHJpbmcq
IGJyZWFrcG9pbnRJZCk7CisgICAgdm9pZCBzZXROYXRpdmVCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgYnJlYWtwb2ludElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCk7
CiAgICAgdm9pZCByZW1vdmVOYXRpdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2lu
dElkKTsKICNlbmRpZgogCkBAIC0zODEsMTEgKzM4MSwxMCBAQCBwcml2YXRlOgogICAgIE93blB0
cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdlbnQ7CiAKICAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX25hdGl2ZUJyZWFrcG9pbnRzOwotICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtX2V2ZW50TmFtZVRvQnJlYWtwb2ludElkOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IG1fWEhSQnJlYWtwb2ludHM7CiAKLSAgICB1bnNpZ25lZCBpbnQgbV9sYXN0QnJlYWtwb2ludElk
OwotCiAgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsK
ICNlbmRpZgogI2lmIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCmluZGV4IGNmYjU1ZmMuLjMwMDRiYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKQEAgLTIzNSw2ICsyMzUsMTAgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cmVzZXQoKQogICAgIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgZGlzY2FyZEJpbmRpbmdz
KCk7CiAKKyAgICBtX2JyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9pZFRvQnJlYWtwb2ludC5j
bGVhcigpOworICAgIG1fYnJlYWtwb2ludFRvSWQuY2xlYXIoKTsKKwogICAgIExpc3RIYXNoU2V0
PFJlZlB0cjxEb2N1bWVudD4gPiBjb3B5ID0gbV9kb2N1bWVudHM7CiAgICAgZm9yIChMaXN0SGFz
aFNldDxSZWZQdHI8RG9jdW1lbnQ+ID46Oml0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAh
PSBjb3B5LmVuZCgpOyArK2l0KQogICAgICAgICBzdG9wTGlzdGVuaW5nKCgqaXQpLmdldCgpKTsK
QEAgLTM5Niw3ICs0MDAsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkQmluZGlu
Z3MoKQogICAgIHJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAgICAgbV9jaGlsZHJlblJlcXVlc3Rl
ZC5jbGVhcigpOwogICAgIG1faW5zcGVjdGVkTm9kZXMuY2xlYXIoKTsKLSAgICBtX2JyZWFrcG9p
bnRzLmNsZWFyKCk7CiB9CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQobG9u
ZyBpZCkKQEAgLTc1NSwxNyArNzU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJj
aENhbmNlbGVkKCkKICAgICBtX3NlYXJjaFJlc3VsdHMuY2xlYXIoKTsKIH0KIAotU3RyaW5nIElu
c3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUp
Cit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
YnJlYWtwb2ludElkLCBsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogeworICAgIEJyZWFrcG9pbnQg
YnJlYWtwb2ludChub2RlSWQsIHR5cGUpOworICAgIG1faWRUb0JyZWFrcG9pbnQuc2V0KGJyZWFr
cG9pbnRJZCwgYnJlYWtwb2ludCk7CisgICAgbV9icmVha3BvaW50VG9JZC5zZXQoYnJlYWtwb2lu
dCwgYnJlYWtwb2ludElkKTsKKwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsK
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIFN0cmluZyBicmVha3Bv
aW50SWQgPSBjcmVhdGVCcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKTsKLSAgICBpZiAobV9pZFRv
QnJlYWtwb2ludC5jb250YWlucyhicmVha3BvaW50SWQpKQotICAgICAgICByZXR1cm4gIiI7Ci0K
LSAgICBtX2lkVG9CcmVha3BvaW50LnNldChicmVha3BvaW50SWQsIHN0ZDo6bWFrZV9wYWlyKG5v
ZGVJZCwgdHlwZSkpOworICAgICAgICByZXR1cm47CiAKICAgICB1aW50MzJfdCByb290Qml0ID0g
MSA8PCB0eXBlOwogICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1fYnJlYWtwb2ludHMuZ2V0
KG5vZGUpIHwgcm9vdEJpdCk7CkBAIC03NzMsMTMgKzc3NCwxMiBAQCBTdHJpbmcgSW5zcGVjdG9y
RE9NQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKICAgICAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxk
ID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCiAgICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJl
YWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIHRydWUpOwogICAgIH0KLQotICAgIHJldHVybiBicmVh
a3BvaW50SWQ7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiB7CiAgICAgQnJlYWtwb2ludCBicmVha3Bv
aW50ID0gbV9pZFRvQnJlYWtwb2ludC50YWtlKGJyZWFrcG9pbnRJZCk7CisgICAgbV9icmVha3Bv
aW50VG9JZC5yZW1vdmUoYnJlYWtwb2ludCk7CiAKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklk
KGJyZWFrcG9pbnQuZmlyc3QpOwogICAgIGlmICghbm9kZSkKQEAgLTg1Nyw3ICs4NTcsNyBAQCBQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JET01BZ2VudDo6ZGVzY3JpcHRpb25G
b3JET01FdmVudChOb2RlKiB0YXJnZQogCiAgICAgbG9uZyBicmVha3BvaW50T3duZXJOb2RlSWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGJyZWFrcG9pbnRPd25lcik7CiAgICAgQVNTRVJU
KGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24tPnNldFN0cmluZygiYnJl
YWtwb2ludElkIiwgY3JlYXRlQnJlYWtwb2ludElkKGJyZWFrcG9pbnRPd25lck5vZGVJZCwgYnJl
YWtwb2ludFR5cGUpKTsKKyAgICBkZXNjcmlwdGlvbi0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQi
LCBtX2JyZWFrcG9pbnRUb0lkLmdldChCcmVha3BvaW50KGJyZWFrcG9pbnRPd25lck5vZGVJZCwg
YnJlYWtwb2ludFR5cGUpKSk7CiAKICAgICByZXR1cm4gZGVzY3JpcHRpb247CiB9CkBAIC0xMTg0
LDE2ICsxMTg0LDEzIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnRz
Rm9yTm9kZShOb2RlKiBub2RlKQogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1cm47CiAg
ICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBET01CcmVha3BvaW50VHlwZXNDb3VudDsgKyt0
eXBlKSB7Ci0gICAgICAgIGlmIChtYXNrICYmICgxIDw8IHR5cGUpKQotICAgICAgICAgICAgbV9p
ZFRvQnJlYWtwb2ludC5yZW1vdmUoY3JlYXRlQnJlYWtwb2ludElkKG5vZGVJZCwgdHlwZSkpOwor
ICAgICAgICBpZiAobWFzayAmJiAoMSA8PCB0eXBlKSkgeworICAgICAgICAgICAgU3RyaW5nIGJy
ZWFrcG9pbnRJZCA9IG1fYnJlYWtwb2ludFRvSWQudGFrZShCcmVha3BvaW50KG5vZGVJZCwgdHlw
ZSkpOworICAgICAgICAgICAgbV9pZFRvQnJlYWtwb2ludC5yZW1vdmUoYnJlYWtwb2ludElkKTsK
KyAgICAgICAgfQogICAgIH0KIH0KIAotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGVC
cmVha3BvaW50SWQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKLXsKLSAgICByZXR1cm4gbWFrZVN0
cmluZygiZG9tOiIsIFN0cmluZzo6bnVtYmVyKG5vZGVJZCksICc6JywgU3RyaW5nOjpudW1iZXIo
dHlwZSkpOwotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMobG9uZyBub2Rl
SWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKQogewog
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oCmluZGV4IDZjNWZkNGIuLjFlMGY3YTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaApAQCAtMTU5LDcgKzE1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBj
b25zdDsKIAotICAgICAgICBTdHJpbmcgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9u
ZyB0eXBlKTsKKyAgICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkLCBsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKICAgICAgICAgdm9pZCByZW1vdmVE
T01CcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKIAogICAgIHByaXZhdGU6
CkBAIC0xNzksNyArMTc5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVw
ZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9v
bCB2YWx1ZSk7CiAgICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludHNGb3JOb2RlKE5vZGUqIG5v
ZGUpOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkZXNjcmlwdGlvbkZvckRP
TUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24p
OwotICAgICAgICBTdHJpbmcgY3JlYXRlQnJlYWtwb2ludElkKGxvbmcgbm9kZUlkLCBsb25nIHR5
cGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
ckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KTsKICAgICAgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNTU1J1bGVzKERvY3VtZW50KiBvd25lckRvY3Vt
ZW50LCBDU1NSdWxlTGlzdCopOwpAQCAtMjM2LDYgKzIzNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fYnJlYWtwb2ludHM7CiAgICAg
ICAgIHR5cGVkZWYgcGFpcjxsb25nLCBsb25nPiBCcmVha3BvaW50OwogICAgICAgICBIYXNoTWFw
PFN0cmluZywgQnJlYWtwb2ludD4gbV9pZFRvQnJlYWtwb2ludDsKKyAgICAgICAgSGFzaE1hcDxC
cmVha3BvaW50LCBTdHJpbmc+IG1fYnJlYWtwb2ludFRvSWQ7CiAgICAgfTsKIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGViZDAz
ZTYuLjFhOTk0YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCkBAIC02MCw5ICs2MCwxMCBAQCBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cgogSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAg
ICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAsIG1f
ZnJvbnRlbmQoZnJvbnRlbmQpCisgICAgLCBtX3BhdXNlV2hlbkF0dGFjaGVkKGZhbHNlKQogICAg
ICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlw
ZSgwKQogICAgICwgbV9icmVha3BvaW50c0xvYWRlZChmYWxzZSkKLSAgICAsIG1famF2YVNjcmlw
dFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogewogfQogCkBAIC0xNDUsMTggKzE0NiwyMCBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBTdHJpbmcqIHNjcgogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVk
dWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSkKIHsKLSAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hl
ZHVsZWQpCisgICAgaWYgKG1fc2NoZWR1bGVkUGF1c2VFdmVudFR5cGUpCiAgICAgICAgIHJldHVy
bjsKKyAgICBtX3NjaGVkdWxlZFBhdXNlRXZlbnRUeXBlID0gdHlwZTsKICAgICBtX2JyZWFrUHJv
Z3JhbURldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYnJlYWtQcm9n
cmFtRGV0YWlscy0+c2V0TnVtYmVyKCJldmVudFR5cGUiLCB0eXBlKTsKICAgICBtX2JyZWFrUHJv
Z3JhbURldGFpbHMtPnNldFZhbHVlKCJldmVudERhdGEiLCBkYXRhKTsKICAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQodHJ1ZSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQor
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudChE
ZWJ1Z2dlckV2ZW50VHlwZSB0eXBlKQogewotICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVk
dWxlZCkKKyAgICBpZiAobV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZSAhPSB0eXBlKQogICAgICAg
ICByZXR1cm47CisgICAgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZSA9IDA7CiAgICAgbV9icmVh
a1Byb2dyYW1EZXRhaWxzID0gMDsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0
UGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpOwogfQpAQCAtMTY0LDcgKzE2Nyw2IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSgpCiB7CiAgICAgc2NoZWR1bGVQYXVzZU9u
TmV4dFN0YXRlbWVudChKYXZhU2NyaXB0UGF1c2VFdmVudFR5cGUsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gdHJ1ZTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQpAQCAtMjc4LDYgKzI4MCwxMSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZwogCiAgICAgbV9zY3JpcHRJRFRvQ29udGVudC5zZXQo
c291cmNlSUQsIGRhdGEpOwogCisgICAgaWYgKG1fcGF1c2VXaGVuQXR0YWNoZWQpIHsKKyAgICAg
ICAgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckF0dGFjaGVkRXZlbnRUeXBl
LCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9wYXVzZVdoZW5BdHRhY2hl
ZCA9IGZhbHNlOworICAgIH0KKwogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTMxNSwxMiArMzIyLDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogICAgIG1fYnJlYWtQcm9ncmFtRGV0
YWlscy0+c2V0VmFsdWUoImNhbGxGcmFtZXMiLCBjdXJyZW50Q2FsbEZyYW1lcygpKTsKIAogICAg
IG1fZnJvbnRlbmQtPnBhdXNlZFNjcmlwdChtX2JyZWFrUHJvZ3JhbURldGFpbHMpOwotICAgIG1f
amF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogewogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSAw
OworICAgIG1fc2NoZWR1bGVkUGF1c2VFdmVudFR5cGUgPSAwOwogICAgIG1fYnJlYWtQcm9ncmFt
RGV0YWlscyA9IDA7CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDk1MDFhYzguLmVkNjk0
M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ3
LDYgKzQ3LDcgQEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7
CiAKIGVudW0gRGVidWdnZXJFdmVudFR5cGUgeworICAgIERlYnVnZ2VyQXR0YWNoZWRFdmVudFR5
cGUgPSAxLAogICAgIEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwKICAgICBKYXZhU2NyaXB0QnJl
YWtwb2ludEV2ZW50VHlwZSwKICAgICBOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUK
QEAgLTU5LDYgKzYwLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgaXNEZWJ1Z2dlckFs
d2F5c0VuYWJsZWQoKTsKIAorICAgIHZvaWQgc2V0UGF1c2VXaGVuQXR0YWNoZWQoKSB7IG1fcGF1
c2VXaGVuQXR0YWNoZWQgPSB0cnVlOyB9CisKICAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMo
KTsKICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgc2V0QnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVu
YWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sKiBzdWNjZXNzLCB1bnNpZ25lZCBp
bnQqIGFjdHVhbExpbmVOdW1iZXIpOwpAQCAtNjgsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRT
b3VyY2UpOwogCiAgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2Vy
RXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEpOwotICAgIHZv
aWQgY2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIGNhbmNlbFBhdXNlT25O
ZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUpOwogICAgIHZvaWQgYnJlYWtQcm9n
cmFtKERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRh
dGEpOwogICAgIHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIHJlc3VtZSgpOwpAQCAtOTgsMTUgKzEw
MSwxNSBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JD
b250cm9sbGVyOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOworICAgIGJvb2wg
bV9wYXVzZVdoZW5BdHRhY2hlZDsKICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRTdGF0
ZTsKKyAgICBpbnQgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBtX3NvdXJjZUlEVG9VUkw7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
bV9zY3JpcHRJRFRvQ29udGVudDsKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2lu
dHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBt
X2JyZWFrcG9pbnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtwb2ludHNMb2FkZWQ7Ci0gICAg
c3RhdGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2lu
dDsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrUHJvZ3JhbURldGFpbHM7Ci0g
ICAgYm9vbCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
Y3BwCmluZGV4IDk0MjAyYzEuLjY0OWRhN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYg
KEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9s
bGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCkpCi0gICAgICAgIGRlYnVnZ2VyQWdlbnQtPmNhbmNl
bFBhdXNlT25OZXh0U3RhdGVtZW50KCk7CisgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmNhbmNlbFBh
dXNlT25OZXh0U3RhdGVtZW50KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSk7CiAj
ZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRN
YW5hZ2VyLmpzCmluZGV4IDRiZTU2YTEuLjkyMThjNTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTg4LDYgKzg4LDcgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50
OwogICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAgICAgICB0aGlzLl9j
YW5SZXN0b3JlRE9NQnJlYWtwb2ludHMgPSBmYWxzZTsKICAgICB9LAogCiAgICAgX3NldEJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikK
QEAgLTEzMCw5MSArMTMxLDY4IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUgPSB7CiAKICAgICBjcmVhdGVET01CcmVha3BvaW50OiBmdW5jdGlvbihub2RlSWQsIGRv
bUV2ZW50VHlwZSwgZGlzYWJsZWQpCiAgICAgewotICAgICAgICB2YXIgZnJvbnRlbmRJZCA9ICJk
b206IiArIG5vZGVJZCArICI6IiArIGRvbUV2ZW50VHlwZTsKLSAgICAgICAgaWYgKGZyb250ZW5k
SWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCisgICAgICAgIHZhciBicmVha3BvaW50SWQg
PSAiZG9tOiIgKyBub2RlSWQgKyAiOiIgKyBkb21FdmVudFR5cGU7CisgICAgICAgIGlmIChicmVh
a3BvaW50SWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9p
bnQodGhpcywgZnJvbnRlbmRJZCwgbm9kZUlkLCBkb21FdmVudFR5cGUpOwotICAgICAgICB0aGlz
Ll9uYXRpdmVCcmVha3BvaW50c1tmcm9udGVuZElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHZh
ciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50KHRoaXMsIG5vZGVJ
ZCwgZG9tRXZlbnRUeXBlKTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludChicmVh
a3BvaW50SWQsIGJyZWFrcG9pbnQsICFkaXNhYmxlZCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJkb20tYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnQpOwotICAg
ICAgICBicmVha3BvaW50LmVuYWJsZWQgPSAhZGlzYWJsZWQ7CiAgICAgICAgIHJldHVybiBicmVh
a3BvaW50OwogICAgIH0sCiAKICAgICBjcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludDogZnVu
Y3Rpb24oZXZlbnROYW1lKQogICAgIHsKLSAgICAgICAgdmFyIGZyb250ZW5kSWQgPSBldmVudE5h
bWU7Ci0gICAgICAgIGlmIChmcm9udGVuZElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQor
ICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gImV2ZW50TGlzdGVuZXI6IiArIGV2ZW50TmFtZTsK
KyAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNw
ZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQodGhpcywgZnJvbnRlbmRJZCwgZXZlbnROYW1l
KTsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbZnJvbnRlbmRJZF0gPSBicmVha3Bv
aW50OworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQodGhpcywgZXZlbnROYW1lKTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZl
QnJlYWtwb2ludChicmVha3BvaW50SWQsIGJyZWFrcG9pbnQsIHRydWUpOwogICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZXZlbnQtbGlzdGVuZXItYnJlYWtwb2ludC1hZGRl
ZCIsIHsgYnJlYWtwb2ludDogYnJlYWtwb2ludCwgZXZlbnROYW1lOiBldmVudE5hbWUgfSk7Ci0g
ICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBicmVha3Bv
aW50OwogICAgIH0sCiAKICAgICBjcmVhdGVYSFJCcmVha3BvaW50OiBmdW5jdGlvbih1cmwsIGRp
c2FibGVkKQogICAgIHsKLSAgICAgICAgdmFyIGZyb250ZW5kSWQgPSB1cmw7Ci0gICAgICAgIGlm
IChmcm9udGVuZElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQorICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gInhocjoiICsgdXJsOworICAgICAgICBpZiAoYnJlYWtwb2ludElkIGluIHRo
aXMuX25hdGl2ZUJyZWFrcG9pbnRzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZh
ciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50KHRoaXMsIGZyb250
ZW5kSWQsIHVybCk7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2Zyb250ZW5kSWRd
ID0gYnJlYWtwb2ludDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9y
LlhIUkJyZWFrcG9pbnQodGhpcywgdXJsKTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtw
b2ludChicmVha3BvaW50SWQsIGJyZWFrcG9pbnQsICFkaXNhYmxlZCk7CiAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJ4aHItYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9p
bnQpOwotICAgICAgICBicmVha3BvaW50LmVuYWJsZWQgPSAhZGlzYWJsZWQKICAgICAgICAgcmV0
dXJuIGJyZWFrcG9pbnQ7CiAgICAgfSwKIAorICAgIF9zZXROYXRpdmVCcmVha3BvaW50OiBmdW5j
dGlvbihicmVha3BvaW50SWQsIGJyZWFrcG9pbnQsIGVuYWJsZWQpCisgICAgeworICAgICAgICBi
cmVha3BvaW50Ll9pZCA9IGJyZWFrcG9pbnRJZDsKKyAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtw
b2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHRoaXMuX3NldE5hdGl2
ZUJyZWFrcG9pbnRFbmFibGVkKGJyZWFrcG9pbnQsIGVuYWJsZWQpOworICAgIH0sCisKICAgICBf
cmVtb3ZlTmF0aXZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAg
ICAgIGlmIChicmVha3BvaW50Ll9iZWluZ1NldE9uQmFja2VuZCkKLSAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX3Jl
bW92ZU5hdGl2ZUJyZWFrcG9pbnRGcm9tQmFja2VuZChicmVha3BvaW50KTsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuX2Zyb250ZW5kSWRdOworICAg
ICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVOYXRpdmVCcmVha3BvaW50KGJyZWFrcG9p
bnQuX2lkKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9p
bnQuX2lkXTsKICAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdz
KCk7CiAgICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVk
Iik7CiAgICAgfSwKIAogICAgIF9zZXROYXRpdmVCcmVha3BvaW50RW5hYmxlZDogZnVuY3Rpb24o
YnJlYWtwb2ludCwgZW5hYmxlZCkKICAgICB7Ci0gICAgICAgIGlmIChicmVha3BvaW50Ll9iZWlu
Z1NldE9uQmFja2VuZCkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGJyZWFrcG9p
bnQuZW5hYmxlZCA9PT0gZW5hYmxlZCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYg
KGVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9zZXROYXRpdmVCcmVha3BvaW50T25CYWNrZW5k
KGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVOYXRp
dmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7Ci0gICAgfSwKLQotICAgIF9zZXRO
YXRpdmVCcmVha3BvaW50T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQotICAgIHsKLSAg
ICAgICAgYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJhY2tlbmQgPSB0cnVlOwotICAgICAgICB2YXIg
ZGF0YSA9IHsgdHlwZTogYnJlYWtwb2ludC5fdHlwZSwgY29uZGl0aW9uOiBicmVha3BvaW50Ll9j
b25kaXRpb24gfTsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXROYXRpdmVCcmVha3BvaW50
KGRhdGEsIGRpZFNldE5hdGl2ZUJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgZnVu
Y3Rpb24gZGlkU2V0TmF0aXZlQnJlYWtwb2ludChiYWNrZW5kQnJlYWtwb2ludElkKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBicmVha3BvaW50Ll9iZWluZ1NldE9uQmFja2VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgaWYgKGJhY2tlbmRCcmVha3BvaW50SWQgIT09ICIiKSB7Ci0gICAgICAgICAg
ICAgICAgYnJlYWtwb2ludC5fYmFja2VuZElkID0gYmFja2VuZEJyZWFrcG9pbnRJZDsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9icmVha3BvaW50c1tiYWNrZW5kQnJlYWtwb2ludElkXSA9IGJyZWFr
cG9pbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IF9yZW1vdmVOYXRpdmVCcmVha3BvaW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQo
YnJlYWtwb2ludC5fYmFja2VuZElkKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRz
W2JyZWFrcG9pbnQuX2JhY2tlbmRJZF0KLSAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2JhY2tl
bmRJZDsKLSAgICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJs
ZS1jaGFuZ2VkIik7CisgICAgICAgIGJyZWFrcG9pbnQuX2VuYWJsZWQgPSBlbmFibGVkOworICAg
ICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB7IHR5cGU6IGJyZWFr
cG9pbnQuX3R5cGUsIGNvbmRpdGlvbjogYnJlYWtwb2ludC5fY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldE5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5faWQs
IGRhdGEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVt
b3ZlTmF0aXZlQnJlYWtwb2ludChicmVha3BvaW50Ll9pZCk7CiAgICAgICAgIHRoaXMuX3VwZGF0
ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOworICAgICAgICBicmVha3BvaW50LmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKICAgICB9LAogCiAgICAgX3Vw
ZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5nczogZnVuY3Rpb24oKQpAQCAtMjMwLDEwICsy
MDgsMjAgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAog
ICAgIGRlYnVnZ2VyUGF1c2VkOiBmdW5jdGlvbihkZXRhaWxzKQogICAgIHsKKyAgICAgICAgaWYg
KGRldGFpbHMuZXZlbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLkRl
YnVnZ2VyQXR0YWNoZWQpIHsKKyAgICAgICAgICAgIC8vIERlYnVnZ2VyQXR0YWNoZWQgZXZlbnQg
aXMgbmVlZGVkIHRvIGdpdmUgdXMgYSBjaGFuY2UgdG8gc2V0IGJyZWFrcG9pbnRzCisgICAgICAg
ICAgICAvLyBvbiBiYWNrLWVuZCBiZWZvcmUgc2NyaXB0cyBzdGFydCBleGVjdXRpbmcuCisgICAg
ICAgICAgICB0aGlzLnJlc3RvcmVCcmVha3BvaW50cygpOworICAgICAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5yZXN1bWUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJkZWJ1Z2dlci1wYXVzZWQiLCBkZXRh
aWxzKTsKKwogICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgIT09IFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlckV2ZW50VHlwZXMuTmF0aXZlQnJlYWtwb2ludCkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2RldGFpbHMuZXZl
bnREYXRhLmJyZWFrcG9pbnRJZF07CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0
aXZlQnJlYWtwb2ludHNbZGV0YWlscy5ldmVudERhdGEuYnJlYWtwb2ludElkXTsKICAgICAgICAg
aWYgKCFicmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTYsMTUgKzI0NCwz
MSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHJl
c3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gdGhpcy5fcGVyc2lzdGVudEJyZWFrcG9pbnRzKCk7CisgICAgICAgIHZhciBkb21CcmVh
a3BvaW50cyA9IFtdOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PT0gIkV2
ZW50TGlzdGVuZXIiKQogICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQoYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLmV2ZW50TmFtZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSAiRE9NIikKKyAgICAgICAgICAgICAg
ICBkb21CcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnRzW2ldKQogICAgICAgICAgICAgZWxzZSBp
ZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PT0gIlhIUiIpCiAgICAgICAgICAgICAgICAgdGhpcy5j
cmVhdGVYSFJCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbi51cmwsICFicmVha3Bv
aW50c1tpXS5lbmFibGVkKTsKICAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2FuUmVzdG9y
ZURPTUJyZWFrcG9pbnRzKQorICAgICAgICAgICAgdGhpcy5fcmVzdG9yZURPTUJyZWFrcG9pbnRz
KGRvbUJyZWFrcG9pbnRzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fcGVuZGlu
Z0RPTUJyZWFrcG9pbnRzID0gZG9tQnJlYWtwb2ludHM7CiAgICAgfSwKIAotICAgIHJlc3RvcmVE
T01CcmVha3BvaW50czogZnVuY3Rpb24oKQorICAgIHNldENhblJlc3RvcmVET01CcmVha3BvaW50
czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdET01CcmVha3Bv
aW50cykgeworICAgICAgICAgICAgdGhpcy5fcmVzdG9yZURPTUJyZWFrcG9pbnRzKHRoaXMuX3Bl
bmRpbmdET01CcmVha3BvaW50cyk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0RP
TUJyZWFrcG9pbnRzOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRoaXMuX2NhblJlc3Rv
cmVET01CcmVha3BvaW50cyA9IHRydWU7CisgICAgfSwKKworICAgIF9yZXN0b3JlRE9NQnJlYWtw
b2ludHM6IGZ1bmN0aW9uKGJyZWFrcG9pbnRzKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gZGlk
UHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKHBhdGgsIG5vZGVJZCkKICAgICAgICAgewpAQCAtMjgw
LDEyICsyODQsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0g
dGhpcy5fcGVyc2lzdGVudEJyZWFrcG9pbnRzKCk7CiAgICAgICAgIHZhciBwYXRoVG9Ob2RlSWQg
PSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9IDA7CiAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChicmVh
a3BvaW50c1tpXS50eXBlICE9PSAiRE9NIikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIHZhciBwYXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBhdGg7CiAgICAg
ICAgICAgICBpZiAocGF0aCBpbiBwYXRoVG9Ob2RlSWQpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC00MDksMTcgKzQxMCwxNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5
cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFr
cG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBmcm9udGVuZElkLCB0eXBlKQorV2ViSW5zcGVjdG9y
Lk5hdGl2ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCB0eXBlKQogewogICAgIHRoaXMu
X21hbmFnZXIgPSBtYW5hZ2VyOwotICAgIHRoaXMuX19mcm9udGVuZElkID0gZnJvbnRlbmRJZDsK
ICAgICB0aGlzLl9fdHlwZSA9IHR5cGU7CisgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlOwogfQog
CiBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGVu
YWJsZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJfYmFja2VuZElkIiBpbiB0aGlzOworICAg
ICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKICAgICB9LAogCiAgICAgc2V0IGVuYWJsZWQoZW5h
YmxlZCkKQEAgLTQzMywxMSArNDM0LDYgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9vblJlbW92ZSgpOwogICAgIH0sCiAKLSAgICBn
ZXQgX2Zyb250ZW5kSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX19mcm9udGVuZElk
OwotICAgIH0sCi0KICAgICBnZXQgX3R5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X190eXBlOwpAQCAtNDU3LDkgKzQ1Myw5IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50
LnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0
b3IuRE9NQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGZyb250ZW5kSWQsIG5vZGVJZCwg
ZG9tRXZlbnRUeXBlKQorV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5h
Z2VyLCBub2RlSWQsIGRvbUV2ZW50VHlwZSkKIHsKLSAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJl
YWtwb2ludC5jYWxsKHRoaXMsIG1hbmFnZXIsIGZyb250ZW5kSWQsICJET00iKTsKKyAgICBXZWJJ
bnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMsIG1hbmFnZXIsICJET00iKTsKICAg
ICB0aGlzLl9ub2RlSWQgPSBub2RlSWQ7CiAgICAgdGhpcy5fZG9tRXZlbnRUeXBlID0gZG9tRXZl
bnRUeXBlOwogICAgIHRoaXMuX2NvbmRpdGlvbiA9IHsgbm9kZUlkOiB0aGlzLl9ub2RlSWQsIHR5
cGU6IHRoaXMuX2RvbUV2ZW50VHlwZSB9OwpAQCAtNTI3LDkgKzUyMyw5IEBAIFdlYkluc3BlY3Rv
ci5ET01CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9p
bnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LnBy
b3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50ID0gZnVuY3Rp
b24obWFuYWdlciwgZnJvbnRlbmRJZCwgZXZlbnROYW1lKQorV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXJCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZXZlbnROYW1lKQogewotICAgIFdl
Ykluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgZnJvbnRlbmRJ
ZCwgIkV2ZW50TGlzdGVuZXIiKTsKKyAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5j
YWxsKHRoaXMsIG1hbmFnZXIsICJFdmVudExpc3RlbmVyIik7CiAgICAgdGhpcy5fZXZlbnROYW1l
ID0gZXZlbnROYW1lOwogICAgIHRoaXMuX2NvbmRpdGlvbiA9IHsgZXZlbnROYW1lOiB0aGlzLl9l
dmVudE5hbWUgfTsKICAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0aW9uID0gdGhpcy5fY29uZGl0
aW9uOwpAQCAtNTcyLDkgKzU2OCw5IEBAIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtw
b2ludC5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2lu
dC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJv
dG90eXBlOwogCi1XZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIs
IGZyb250ZW5kSWQsIHVybCkKK1dlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50ID0gZnVuY3Rpb24o
bWFuYWdlciwgdXJsKQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwo
dGhpcywgbWFuYWdlciwgZnJvbnRlbmRJZCwgIlhIUiIpOworICAgIFdlYkluc3BlY3Rvci5OYXRp
dmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgIlhIUiIpOwogICAgIHRoaXMuX3VybCA9
IHVybDsKICAgICB0aGlzLl9jb25kaXRpb24gPSB7IHVybDogdGhpcy5fdXJsIH07CiAgICAgdGhp
cy5fcGVyc2lzdGVudENvbmRpdGlvbiA9IHRoaXMuX2NvbmRpdGlvbjsKQEAgLTYxMSw5ICs2MDcs
MTAgQEAgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogV2ViSW5zcGVj
dG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5OYXRp
dmVCcmVha3BvaW50LnByb3RvdHlwZTsKIAogV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRXZlbnRUeXBl
cyA9IHsKLSAgICBKYXZhU2NyaXB0UGF1c2U6IDAsCi0gICAgSmF2YVNjcmlwdEJyZWFrcG9pbnQ6
IDEsCi0gICAgTmF0aXZlQnJlYWtwb2ludDogMgorICAgIERlYnVnZ2VyQXR0YWNoZWQ6IDEsCisg
ICAgSmF2YVNjcmlwdFBhdXNlOiAyLAorICAgIEphdmFTY3JpcHRCcmVha3BvaW50OiAzLAorICAg
IE5hdGl2ZUJyZWFrcG9pbnQ6IDQKIH07CiAKIFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50VHlw
ZXMgPSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50
c1NpZGViYXJQYW5lLmpzCmluZGV4IGNmZjg4YWIuLjk1NTcwZDggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCkBAIC0z
MzcsNiArMzM3LDggQEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGVi
YXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGV2ZW50LmRhdGEu
ZXZlbnROYW1lOwogCiAgICAgICAgIHZhciBicmVha3BvaW50SXRlbSA9IHRoaXMuX2JyZWFrcG9p
bnRJdGVtc1tldmVudE5hbWVdOworICAgICAgICBpZiAoIWJyZWFrcG9pbnRJdGVtKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVha3BvaW50SXRlbS5icmVha3BvaW50ID0gYnJlYWtw
b2ludDsKICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJoaXQtc3RhdGUtY2hh
bmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRIaXRTdGF0ZUNoYW5nZWQuYmluZCh0aGlzLCBicmVha3Bv
aW50SXRlbSkpOwogICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQi
LCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZC5iaW5kKHRoaXMsIGJyZWFrcG9pbnRJdGVtKSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggNDcwZTc3NS4uYjQzNGEw
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtMzc5LDcgKzM3
OSw3IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0
aGlzLmRvY3VtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01Eb2N1bWVudCh0aGlzLCB0aGlzLl93
aW5kb3csIHBheWxvYWQpOwogICAgICAgICAgICAgdGhpcy5faWRUb0RPTU5vZGVbcGF5bG9hZC5p
ZF0gPSB0aGlzLmRvY3VtZW50OwogICAgICAgICAgICAgdGhpcy5fYmluZE5vZGVzKHRoaXMuZG9j
dW1lbnQuY2hpbGRyZW4pOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5h
Z2VyLnJlc3RvcmVET01CcmVha3BvaW50cygpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJy
ZWFrcG9pbnRNYW5hZ2VyLnNldENhblJlc3RvcmVET01CcmVha3BvaW50cygpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBudWxsOwogICAgICAgICBXZWJJbnNw
ZWN0b3IucGFuZWxzLmVsZW1lbnRzLnNldERvY3VtZW50KHRoaXMuZG9jdW1lbnQpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggZDg2MWRhNS4uODc3
ZGI4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBA
IC0xNzUsNiArMTc1LDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbigp
CiAKICAgICB0aGlzLl9kZWJ1Z2dlckVuYWJsZWQgPSBQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5
c0VuYWJsZWQ7CiAKKyAgICBmdW5jdGlvbiBkZWJ1Z2dlclBhdXNlZChldmVudCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2RlYnVnZ2VyUGF1c2VkKGV2ZW50LmRhdGEuY2FsbEZyYW1lcyk7CisgICAg
fQorICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJk
ZWJ1Z2dlci1wYXVzZWQiLCBkZWJ1Z2dlclBhdXNlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtYWRkZWQiLCB0
aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwogCiAgICAgdGhpcy5yZXNldCgpOwpAQCAtMzIz
LDcgKzMyOCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICBjb21taXRFZGl0aW5nQ2Fs
bGJhY2sobmV3Qm9keU9yRXJyb3JNZXNzYWdlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbEZy
YW1lcyAmJiBjYWxsRnJhbWVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1
Z2dlclBhdXNlZChjYWxsRnJhbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdn
ZXJQYXVzZWQoY2FsbEZyYW1lcyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGNhbmNlbEVkaXRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2cobmV3Qm9keU9yRXJyb3JNZXNzYWdlLCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZUxldmVsLldhcm5pbmcpOwpAQCAtMzc2LDcgKzM4MSw3IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5n
ZXQoY2FsbEZyYW1lLndvcmxkSWQpLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lLmlkLCBj
b2RlLCBvYmplY3RHcm91cCwgZXZhbENhbGxiYWNrKTsKICAgICB9LAogCi0gICAgZGVidWdnZXJQ
YXVzZWQ6IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCisgICAgX2RlYnVnZ2VyUGF1c2VkOiBmdW5jdGlv
bihjYWxsRnJhbWVzKQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5h
Z2VyLnJlbW92ZU9uZVRpbWVCcmVha3BvaW50KCk7CiAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRy
dWU7CkBAIC0zOTAsNiArMzk1LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbCA9IHRoaXM7CiAgICAg
ICAgIHdpbmRvdy5mb2N1cygpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdU
b0Zyb250KCk7CiAgICAgfSwKIAogICAgIGRlYnVnZ2VyUmVzdW1lZDogZnVuY3Rpb24oKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggYmY3ZWMzOS4uOTc0ZjVh
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xMzEwLDYg
KzEzMTAsNyBAQCBXZWJJbnNwZWN0b3IuYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBmdW5jdGlv
bigpCiBXZWJJbnNwZWN0b3IuZGVidWdnZXJXYXNFbmFibGVkID0gZnVuY3Rpb24oKQogewogICAg
IHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJXYXNFbmFibGVkKCk7CisgICAgdGhpcy5icmVh
a3BvaW50TWFuYWdlci5yZXN0b3JlQnJlYWtwb2ludHMoKTsKIH0KIAogV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyV2FzRGlzYWJsZWQgPSBmdW5jdGlvbigpCkBAIC0xMzQ0LDkgKzEzNDUsNyBAQCBXZWJJ
bnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwg
c291cmNlLCBzdGFydGluZ0xpbgogCiBXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rp
b24oZGV0YWlscykKIHsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2VkKGRl
dGFpbHMuY2FsbEZyYW1lcyk7CiAgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5kZWJ1Z2dlclBh
dXNlZChkZXRhaWxzKTsKLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7
CiB9CiAKIFdlYkluc3BlY3Rvci5yZXN1bWVkU2NyaXB0ID0gZnVuY3Rpb24oKQpAQCAtMTM3Myw4
ICsxMzcyLDYgQEAgV2ViSW5zcGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5j
b25zb2xlLmNsZWFyTWVzc2FnZXMoKTsKICAgICB0aGlzLmV4dGVuc2lvblNlcnZlci5ub3RpZnlJ
bnNwZWN0b3JSZXNldCgpOwotCi0gICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5yZXN0b3JlQnJl
YWtwb2ludHMoKTsKIH0KIAogV2ViSW5zcGVjdG9yLnJlc2V0UHJvZmlsZXNQYW5lbCA9IGZ1bmN0
aW9uKCkKQEAgLTEzOTMsMTAgKzEzOTAsNiBAQCBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hh
bmdlZCA9IGZ1bmN0aW9uKHVybCkKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaW5zcGVjdGVk
VVJMQ2hhbmdlZCh1cmwpOwogICAgIHRoaXMuc2V0dGluZ3MuaW5zcGVjdGVkVVJMQ2hhbmdlZCh1
cmwpOwogICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeUluc3BlY3RlZFVSTENoYW5nZWQo
KTsKLSAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzUmVzdG9yZWQpIHsKLSAgICAgICAgdGhpcy5i
cmVha3BvaW50TWFuYWdlci5yZXN0b3JlQnJlYWtwb2ludHMoKTsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHNSZXN0b3JlZCA9IHRydWU7Ci0gICAgfQogfQogCiBXZWJJbnNwZWN0b3IuZGlkQ29t
bWl0TG9hZCA9IGZ1bmN0aW9uKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72829</attachid>
            <date>2010-11-03 09:19:30 -0700</date>
            <delta_ts>2010-11-18 03:12:07 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>35336</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ODFlNjIzLi5lYTMyYzdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MDMgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc2V0
IG5hdGl2ZSBicmVha3BvaW50cyBvbiBiYWNrZW5kIGJlZm9yZSBzY3JpcHRzIHN0YXJ0IGV4ZWN1
dGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4
NTgKKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2Ny
aXB0KToKKyAgICAgICAgKGluaXRpYWxpemVfRGVidWdnZXJUZXN0Lkluc3BlY3RvclRlc3QuX3Jl
c3VtZWRTY3JpcHQpOgorCiAyMDEwLTExLTAzICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpz
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdDIuanMKaW5k
ZXggNmMxOWZmOS4uZmEyOThkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXItdGVzdDIuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXItdGVzdDIuanMKQEAgLTkxLDkgKzkxLDEyIEBAIEluc3BlY3RvclRl
c3QuY2FwdHVyZVN0YWNrVHJhY2UgPSBmdW5jdGlvbihjYWxsRnJhbWVzKQogCiBJbnNwZWN0b3JU
ZXN0Ll9wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihkZXRhaWxzKQogewotICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KCJTY3JpcHQgZXhlY3V0aW9uIHBhdXNlZC4iKTsKKyAgICBpZiAoZGV0YWls
cy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckV2ZW50VHlwZXMuRGVidWdnZXJB
dHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgSW5zcGVjdG9yVGVzdC5fY2FsbEZyYW1l
cyA9IGRldGFpbHMuY2FsbEZyYW1lczsKICAgICBpZiAoSW5zcGVjdG9yVGVzdC5fd2FpdFVudGls
UGF1c2VkQ2FsbGJhY2spIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlw
dCBleGVjdXRpb24gcGF1c2VkLiIpOwogICAgICAgICB2YXIgY2FsbGJhY2sgPSBJbnNwZWN0b3JU
ZXN0Ll93YWl0VW50aWxQYXVzZWRDYWxsYmFjazsKICAgICAgICAgZGVsZXRlIEluc3BlY3RvclRl
c3QuX3dhaXRVbnRpbFBhdXNlZENhbGxiYWNrOwogICAgICAgICBjYWxsYmFjayhJbnNwZWN0b3JU
ZXN0Ll9jYWxsRnJhbWVzKTsKQEAgLTEwMiw5ICsxMDUsOSBAQCBJbnNwZWN0b3JUZXN0Ll9wYXVz
ZWRTY3JpcHQgPSBmdW5jdGlvbihkZXRhaWxzKQogCiBJbnNwZWN0b3JUZXN0Ll9yZXN1bWVkU2Ny
aXB0ID0gZnVuY3Rpb24oKQogewotICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQg
ZXhlY3V0aW9uIHJlc3VtZWQuIik7CiAgICAgZGVsZXRlIEluc3BlY3RvclRlc3QuX2NhbGxGcmFt
ZXM7CiAgICAgaWYgKEluc3BlY3RvclRlc3QuX3dhaXRVbnRpbFJlc3VtZWRDYWxsYmFjaykgewor
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IGV4ZWN1dGlvbiByZXN1bWVk
LiIpOwogICAgICAgICB2YXIgY2FsbGJhY2sgPSBJbnNwZWN0b3JUZXN0Ll93YWl0VW50aWxSZXN1
bWVkQ2FsbGJhY2s7CiAgICAgICAgIGRlbGV0ZSBJbnNwZWN0b3JUZXN0Ll93YWl0VW50aWxSZXN1
bWVkQ2FsbGJhY2s7CiAgICAgICAgIGNhbGxiYWNrKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE5YzgxYjYuLjk4MTMxYWEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjAgQEAKKzIwMTAtMTEtMDMgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3Rvcjogc2V0IG5hdGl2ZSBicmVha3BvaW50cyBvbiBiYWNrZW5kIGJlZm9yZSBz
Y3JpcHRzIHN0YXJ0IGV4ZWN1dGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg4NTgKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXROYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OnJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZmluZEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyTmF0aXZlQnJlYWtwb2ludHMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2Fy
ZEJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRET01C
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVE
T01CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkZXNj
cmlwdGlvbkZvckRPTUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50c0Zvck5vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlV2hlbkF0dGFjaGVkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FuY2VsUGF1c2VPbk5hdGl2ZUV2ZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5h
dGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBlbmFibGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5ET01CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVy
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLnBy
b3RvdHlwZS5fYnJlYWtwb2ludEFkZGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTUFnZW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5f
c2V0RG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVs
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5kZWJ1Z2dlclBhdXNlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UubXljYWxsYmFjayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5lZGl0U2NyaXB0
U291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9k
ZWJ1Z2dlclBhdXNlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZGVidWdnZXJXYXNFbmFibGVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc2V0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKwogMjAxMC0x
MS0wMyAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMDgyNWRjNi4uZTI3YmJiOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1Miw3ICsxNTIsNyBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogY2xpZW50KQogICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKGZhbHNlKQotICAgICwgbV9sYXN0QnJlYWtw
b2ludElkKDApCisgICAgLCBtX25leHRCcmVha3BvaW50SWQoMSkKICAgICAsIG1fcHJvZmlsZXJB
Z2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhpcykpCiAjZW5kaWYKIHsKQEAg
LTcxOSw4ICs3MTksMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2Fk
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fY291bnRzLmNsZWFyKCk7CiAKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgaWYgKG1fZGVidWdnZXJBZ2Vu
dCkKKyAgICAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7CisgICAgICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnNldFBhdXNlV2hlbkF0dGFjaGVkKCk7CisgICAgICAgIH0KIAogICAgICAgICBjbGVh
ck5hdGl2ZUJyZWFrcG9pbnRzKCk7CiAjZW5kaWYKQEAgLTEzOTMsMjIgKzEzOTUsMjAgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXROYXRpdmVCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBicmVha3AKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb25kaXRp
b24gPSBicmVha3BvaW50LT5nZXRPYmplY3QoImNvbmRpdGlvbiIpOwogICAgIGlmICghY29uZGl0
aW9uKQogICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIG5leHRCcmVha3BvaW50SWQgPSBTdHJp
bmc6Om51bWJlcihtX25leHRCcmVha3BvaW50SWQpOwogICAgIGlmICh0eXBlID09IHhock5hdGl2
ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIGlmICghY29u
ZGl0aW9uLT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAqYnJlYWtwb2ludElkID0gU3RyaW5nOjpudW1iZXIoKyttX2xhc3RCcmVha3BvaW50SWQp
OwotICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElkLCB1cmwpOwotICAg
ICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElkLCB0eXBlKTsKKyAgICAg
ICAgbV9YSFJCcmVha3BvaW50cy5zZXQobmV4dEJyZWFrcG9pbnRJZCwgdXJsKTsKICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAg
ICAgIFN0cmluZyBldmVudE5hbWU7CiAgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJpbmco
ImV2ZW50TmFtZSIsICZldmVudE5hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAobV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY29udGFpbnMoZXZlbnROYW1lKSkKKyAgICAg
ICAgaWYgKG1fZXZlbnROYW1lVG9CcmVha3BvaW50SWQuY29udGFpbnMoZXZlbnROYW1lKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgKmJyZWFrcG9pbnRJZCA9IGV2ZW50TmFtZTsKLSAg
ICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuYWRkKGV2ZW50TmFtZSk7Ci0gICAgICAg
IG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsIHR5cGUpOworICAgICAgICBt
X2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5zZXQobmV4dEJyZWFrcG9pbnRJZCwgZXZlbnROYW1l
KTsKKyAgICAgICAgbV9ldmVudE5hbWVUb0JyZWFrcG9pbnRJZC5zZXQoZXZlbnROYW1lLCBuZXh0
QnJlYWtwb2ludElkKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gZG9tTmF0aXZlQnJlYWtwb2lu
dFR5cGUpIHsKICAgICAgICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTQyMCwxMCArMTQyMCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2
ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcAogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBsb25nIG5vZGVJZCA9IChsb25nKSBub2RlSWROdW1iZXI7CiAg
ICAgICAgIGxvbmcgZG9tQnJlYWtwb2ludFR5cGUgPSAobG9uZykgZG9tQnJlYWtwb2ludFR5cGVO
dW1iZXI7Ci0gICAgICAgICpicmVha3BvaW50SWQgPSBtX2RvbUFnZW50LT5zZXRET01CcmVha3Bv
aW50KG5vZGVJZCwgZG9tQnJlYWtwb2ludFR5cGUpOwotICAgICAgICBpZiAoIWJyZWFrcG9pbnRJ
ZC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQoKmJyZWFr
cG9pbnRJZCwgdHlwZSk7Ci0gICAgfQorICAgICAgICBtX2RvbUFnZW50LT5zZXRET01CcmVha3Bv
aW50KG5leHRCcmVha3BvaW50SWQsIG5vZGVJZCwgZG9tQnJlYWtwb2ludFR5cGUpOworICAgIH0g
ZWxzZQorICAgICAgICByZXR1cm47CisgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQobmV4dEJy
ZWFrcG9pbnRJZCwgdHlwZSk7CisgICAgKmJyZWFrcG9pbnRJZCA9IG5leHRCcmVha3BvaW50SWQ7
CisgICAgbV9uZXh0QnJlYWtwb2ludElkICs9IDE7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVtb3ZlTmF0aXZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkK
QEAgLTE0MzEsOSArMTQzMywxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZU5h
dGl2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiAgICAgU3RyaW5nIHR5
cGUgPSBtX25hdGl2ZUJyZWFrcG9pbnRzLnRha2UoYnJlYWtwb2ludElkKTsKICAgICBpZiAodHlw
ZSA9PSB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSkKICAgICAgICAgbV9YSFJCcmVha3BvaW50cy5y
ZW1vdmUoYnJlYWtwb2ludElkKTsKLSAgICBlbHNlIGlmICh0eXBlID09IGV2ZW50TGlzdGVuZXJO
YXRpdmVCcmVha3BvaW50VHlwZSkKLSAgICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMu
cmVtb3ZlKGJyZWFrcG9pbnRJZCk7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBkb21OYXRpdmVCcmVh
a3BvaW50VHlwZSkgeworICAgIGVsc2UgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lck5hdGl2ZUJy
ZWFrcG9pbnRUeXBlKSB7CisgICAgICAgIFN0cmluZyBldmVudE5hbWUgPSBtX2V2ZW50TGlzdGVu
ZXJCcmVha3BvaW50cy50YWtlKGJyZWFrcG9pbnRJZCk7CisgICAgICAgIG1fZXZlbnROYW1lVG9C
cmVha3BvaW50SWQucmVtb3ZlKGV2ZW50TmFtZSk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IGRv
bU5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAgICAgIGlmIChtX2RvbUFnZW50KQogICAgICAg
ICAgICAgbV9kb21BZ2VudC0+cmVtb3ZlRE9NQnJlYWtwb2ludChicmVha3BvaW50SWQpOwogICAg
IH0KQEAgLTE0NDEsNyArMTQ0NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3Zl
TmF0aXZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKIAogU3RyaW5nIElu
c3BlY3RvckNvbnRyb2xsZXI6OmZpbmRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKIHsKLSAgICByZXR1cm4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMu
Y29udGFpbnMoZXZlbnROYW1lKSA/IGV2ZW50TmFtZSA6ICIiOworICAgIHJldHVybiBtX2V2ZW50
TmFtZVRvQnJlYWtwb2ludElkLmdldChldmVudE5hbWUpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZmluZFhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpCkBAIC0xNDU3
LDggKzE0NjAsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyTmF0aXZlQnJlYWtw
b2ludHMoKQogewogICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuY2xlYXIoKTsKICAgICBtX2V2ZW50
TGlzdGVuZXJCcmVha3BvaW50cy5jbGVhcigpOworICAgIG1fZXZlbnROYW1lVG9CcmVha3BvaW50
SWQuY2xlYXIoKTsKICAgICBtX1hIUkJyZWFrcG9pbnRzLmNsZWFyKCk7Ci0gICAgbV9sYXN0QnJl
YWtwb2ludElkID0gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKaW5kZXggODZmZWE2Ny4uZTViMDVkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaApAQCAtMzc5LDEwICszNzksMTAgQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1Z2dlckFnZW50OwogCiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gbV9uYXRpdmVCcmVha3BvaW50czsKLSAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9ldmVudE5hbWVUb0JyZWFrcG9pbnRJZDsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtX1hIUkJyZWFrcG9pbnRzOwotCi0gICAgdW5zaWduZWQgaW50IG1fbGFzdEJyZWFrcG9pbnRJ
ZDsKKyAgICBpbnQgbV9uZXh0QnJlYWtwb2ludElkOwogCiAgICAgT3duUHRyPEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGNmYjU1ZmMuLjMwMDRiYTEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTIzNSw2ICsyMzUsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVzZXQoKQogICAgIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgZGlzY2Fy
ZEJpbmRpbmdzKCk7CiAKKyAgICBtX2JyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9pZFRvQnJl
YWtwb2ludC5jbGVhcigpOworICAgIG1fYnJlYWtwb2ludFRvSWQuY2xlYXIoKTsKKwogICAgIExp
c3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiBjb3B5ID0gbV9kb2N1bWVudHM7CiAgICAgZm9y
IChMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID46Oml0ZXJhdG9yIGl0ID0gY29weS5iZWdp
bigpOyBpdCAhPSBjb3B5LmVuZCgpOyArK2l0KQogICAgICAgICBzdG9wTGlzdGVuaW5nKCgqaXQp
LmdldCgpKTsKQEAgLTM5Niw3ICs0MDAsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIHJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAgICAgbV9jaGlsZHJl
blJlcXVlc3RlZC5jbGVhcigpOwogICAgIG1faW5zcGVjdGVkTm9kZXMuY2xlYXIoKTsKLSAgICBt
X2JyZWFrcG9pbnRzLmNsZWFyKCk7CiB9CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2Rl
Rm9ySWQobG9uZyBpZCkKQEAgLTc1NSwxNyArNzU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNlYXJjaENhbmNlbGVkKCkKICAgICBtX3NlYXJjaFJlc3VsdHMuY2xlYXIoKTsKIH0KIAot
U3RyaW5nIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBs
b25nIHR5cGUpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgYnJlYWtwb2ludElkLCBsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogeworICAgIEJy
ZWFrcG9pbnQgYnJlYWtwb2ludChub2RlSWQsIHR5cGUpOworICAgIG1faWRUb0JyZWFrcG9pbnQu
c2V0KGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludCk7CisgICAgbV9icmVha3BvaW50VG9JZC5zZXQo
YnJlYWtwb2ludCwgYnJlYWtwb2ludElkKTsKKwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQo
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIFN0cmlu
ZyBicmVha3BvaW50SWQgPSBjcmVhdGVCcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKTsKLSAgICBp
ZiAobV9pZFRvQnJlYWtwb2ludC5jb250YWlucyhicmVha3BvaW50SWQpKQotICAgICAgICByZXR1
cm4gIiI7Ci0KLSAgICBtX2lkVG9CcmVha3BvaW50LnNldChicmVha3BvaW50SWQsIHN0ZDo6bWFr
ZV9wYWlyKG5vZGVJZCwgdHlwZSkpOworICAgICAgICByZXR1cm47CiAKICAgICB1aW50MzJfdCBy
b290Qml0ID0gMSA8PCB0eXBlOwogICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1fYnJlYWtw
b2ludHMuZ2V0KG5vZGUpIHwgcm9vdEJpdCk7CkBAIC03NzMsMTMgKzc3NCwxMiBAQCBTdHJpbmcg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlw
ZSkKICAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hp
bGQ7IGNoaWxkID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCiAgICAgICAgICAgICB1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIHRydWUpOwogICAgIH0KLQotICAgIHJl
dHVybiBicmVha3BvaW50SWQ7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZURP
TUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiB7CiAgICAgQnJlYWtwb2lu
dCBicmVha3BvaW50ID0gbV9pZFRvQnJlYWtwb2ludC50YWtlKGJyZWFrcG9pbnRJZCk7CisgICAg
bV9icmVha3BvaW50VG9JZC5yZW1vdmUoYnJlYWtwb2ludCk7CiAKICAgICBOb2RlKiBub2RlID0g
bm9kZUZvcklkKGJyZWFrcG9pbnQuZmlyc3QpOwogICAgIGlmICghbm9kZSkKQEAgLTg1Nyw3ICs4
NTcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JET01BZ2VudDo6ZGVz
Y3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZQogCiAgICAgbG9uZyBicmVha3BvaW50T3du
ZXJOb2RlSWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGJyZWFrcG9pbnRPd25lcik7CiAg
ICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24tPnNldFN0
cmluZygiYnJlYWtwb2ludElkIiwgY3JlYXRlQnJlYWtwb2ludElkKGJyZWFrcG9pbnRPd25lck5v
ZGVJZCwgYnJlYWtwb2ludFR5cGUpKTsKKyAgICBkZXNjcmlwdGlvbi0+c2V0U3RyaW5nKCJicmVh
a3BvaW50SWQiLCBtX2JyZWFrcG9pbnRUb0lkLmdldChCcmVha3BvaW50KGJyZWFrcG9pbnRPd25l
ck5vZGVJZCwgYnJlYWtwb2ludFR5cGUpKSk7CiAKICAgICByZXR1cm4gZGVzY3JpcHRpb247CiB9
CkBAIC0xMTg0LDE2ICsxMTg0LDEzIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJy
ZWFrcG9pbnRzRm9yTm9kZShOb2RlKiBub2RlKQogICAgIGlmICghbm9kZUlkKQogICAgICAgICBy
ZXR1cm47CiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBET01CcmVha3BvaW50VHlwZXND
b3VudDsgKyt0eXBlKSB7Ci0gICAgICAgIGlmIChtYXNrICYmICgxIDw8IHR5cGUpKQotICAgICAg
ICAgICAgbV9pZFRvQnJlYWtwb2ludC5yZW1vdmUoY3JlYXRlQnJlYWtwb2ludElkKG5vZGVJZCwg
dHlwZSkpOworICAgICAgICBpZiAobWFzayAmJiAoMSA8PCB0eXBlKSkgeworICAgICAgICAgICAg
U3RyaW5nIGJyZWFrcG9pbnRJZCA9IG1fYnJlYWtwb2ludFRvSWQudGFrZShCcmVha3BvaW50KG5v
ZGVJZCwgdHlwZSkpOworICAgICAgICAgICAgbV9pZFRvQnJlYWtwb2ludC5yZW1vdmUoYnJlYWtw
b2ludElkKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50
OjpjcmVhdGVCcmVha3BvaW50SWQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKLXsKLSAgICByZXR1
cm4gbWFrZVN0cmluZygiZG9tOiIsIFN0cmluZzo6bnVtYmVyKG5vZGVJZCksICc6JywgU3RyaW5n
OjpudW1iZXIodHlwZSkpOwotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMo
bG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5
bGVzKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDZjNWZkNGIuLjFlMGY3YTkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTU5LDcgKzE1OSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRv
Y3VtZW50KSBjb25zdDsKIAotICAgICAgICBTdHJpbmcgc2V0RE9NQnJlYWtwb2ludChsb25nIG5v
ZGVJZCwgbG9uZyB0eXBlKTsKKyAgICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkLCBsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKICAgICAgICAgdm9p
ZCByZW1vdmVET01CcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKIAogICAg
IHByaXZhdGU6CkBAIC0xNzksNyArMTc5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiByb290LCB1aW50MzJfdCByb290
TWFzaywgYm9vbCB2YWx1ZSk7CiAgICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludHNGb3JOb2Rl
KE5vZGUqIG5vZGUpOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkZXNjcmlw
dGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBp
bnNlcnRpb24pOwotICAgICAgICBTdHJpbmcgY3JlYXRlQnJlYWtwb2ludElkKGxvbmcgbm9kZUlk
LCBsb25nIHR5cGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KTsKICAgICAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNTU1J1bGVzKERvY3VtZW50KiBv
d25lckRvY3VtZW50LCBDU1NSdWxlTGlzdCopOwpAQCAtMjM2LDYgKzIzNSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fYnJlYWtwb2lu
dHM7CiAgICAgICAgIHR5cGVkZWYgcGFpcjxsb25nLCBsb25nPiBCcmVha3BvaW50OwogICAgICAg
ICBIYXNoTWFwPFN0cmluZywgQnJlYWtwb2ludD4gbV9pZFRvQnJlYWtwb2ludDsKKyAgICAgICAg
SGFzaE1hcDxCcmVha3BvaW50LCBTdHJpbmc+IG1fYnJlYWtwb2ludFRvSWQ7CiAgICAgfTsKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IGViZDAzZTYuLjFhOTk0YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCkBAIC02MCw5ICs2MCwxMCBAQCBQYXNzT3duUHRyPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250
cgogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJv
bnRlbmQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikK
ICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCisgICAgLCBtX3BhdXNlV2hlbkF0dGFjaGVkKGZh
bHNlKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9zY2hlZHVsZWRQYXVz
ZUV2ZW50VHlwZSgwKQogICAgICwgbV9icmVha3BvaW50c0xvYWRlZChmYWxzZSkKLSAgICAsIG1f
amF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogewogfQogCkBAIC0xNDUsMTggKzE0Niwy
MCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcgogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUgdHlwZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSkKIHsKLSAgICBpZiAobV9qYXZhU2NyaXB0
UGF1c2VTY2hlZHVsZWQpCisgICAgaWYgKG1fc2NoZWR1bGVkUGF1c2VFdmVudFR5cGUpCiAgICAg
ICAgIHJldHVybjsKKyAgICBtX3NjaGVkdWxlZFBhdXNlRXZlbnRUeXBlID0gdHlwZTsKICAgICBt
X2JyZWFrUHJvZ3JhbURldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1f
YnJlYWtQcm9ncmFtRGV0YWlscy0+c2V0TnVtYmVyKCJldmVudFR5cGUiLCB0eXBlKTsKICAgICBt
X2JyZWFrUHJvZ3JhbURldGFpbHMtPnNldFZhbHVlKCJldmVudERhdGEiLCBkYXRhKTsKICAgICBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQodHJ1ZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0
ZW1lbnQoKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0
YXRlbWVudChEZWJ1Z2dlckV2ZW50VHlwZSB0eXBlKQogewotICAgIGlmIChtX2phdmFTY3JpcHRQ
YXVzZVNjaGVkdWxlZCkKKyAgICBpZiAobV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZSAhPSB0eXBl
KQogICAgICAgICByZXR1cm47CisgICAgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZSA9IDA7CiAg
ICAgbV9icmVha1Byb2dyYW1EZXRhaWxzID0gMDsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpOwogfQpAQCAtMTY0LDcgKzE2Nyw2
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1l
bnQoKQogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSgpCiB7CiAgICAgc2NoZWR1
bGVQYXVzZU9uTmV4dFN0YXRlbWVudChKYXZhU2NyaXB0UGF1c2VFdmVudFR5cGUsIEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gdHJ1
ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQpAQCAtMjc4LDYg
KzI4MCwxMSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZwogCiAgICAgbV9zY3JpcHRJRFRvQ29u
dGVudC5zZXQoc291cmNlSUQsIGRhdGEpOwogCisgICAgaWYgKG1fcGF1c2VXaGVuQXR0YWNoZWQp
IHsKKyAgICAgICAgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckF0dGFjaGVk
RXZlbnRUeXBlLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9wYXVzZVdo
ZW5BdHRhY2hlZCA9IGZhbHNlOworICAgIH0KKwogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTMxNSwxMiArMzIyLDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogICAgIG1fYnJlYWtQ
cm9ncmFtRGV0YWlscy0+c2V0VmFsdWUoImNhbGxGcmFtZXMiLCBjdXJyZW50Q2FsbEZyYW1lcygp
KTsKIAogICAgIG1fZnJvbnRlbmQtPnBhdXNlZFNjcmlwdChtX2JyZWFrUHJvZ3JhbURldGFpbHMp
OwotICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogewogICAgIG1fcGF1c2VkU2NyaXB0
U3RhdGUgPSAwOworICAgIG1fc2NoZWR1bGVkUGF1c2VFdmVudFR5cGUgPSAwOwogICAgIG1fYnJl
YWtQcm9ncmFtRGV0YWlscyA9IDA7CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDk1MDFh
YzguLmVkNjk0M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVj
dG9yVmFsdWU7CiAKIGVudW0gRGVidWdnZXJFdmVudFR5cGUgeworICAgIERlYnVnZ2VyQXR0YWNo
ZWRFdmVudFR5cGUgPSAxLAogICAgIEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwKICAgICBKYXZh
U2NyaXB0QnJlYWtwb2ludEV2ZW50VHlwZSwKICAgICBOYXRpdmVCcmVha3BvaW50RGVidWdnZXJF
dmVudFR5cGUKQEAgLTU5LDYgKzYwLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgaXNE
ZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKTsKIAorICAgIHZvaWQgc2V0UGF1c2VXaGVuQXR0YWNoZWQo
KSB7IG1fcGF1c2VXaGVuQXR0YWNoZWQgPSB0cnVlOyB9CisKICAgICB2b2lkIGFjdGl2YXRlQnJl
YWtwb2ludHMoKTsKICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQg
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sKiBzdWNjZXNzLCB1
bnNpZ25lZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpOwpAQCAtNjgsNyArNzEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5n
KiBzY3JpcHRTb3VyY2UpOwogCiAgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50
KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEp
OwotICAgIHZvaWQgY2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIGNhbmNl
bFBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUpOwogICAgIHZvaWQg
YnJlYWtQcm9ncmFtKERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGRhdGEpOwogICAgIHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIHJlc3VtZSgpOwpAQCAt
OTgsMTUgKzEwMSwxNSBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9p
bnNwZWN0b3JDb250cm9sbGVyOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwor
ICAgIGJvb2wgbV9wYXVzZVdoZW5BdHRhY2hlZDsKICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRT
Y3JpcHRTdGF0ZTsKKyAgICBpbnQgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZTsKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NvdXJjZUlEVG9VUkw7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zY3JpcHRJRFRvQ29udGVudDsKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNl
QnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVu
c2lnbmVkPiBtX2JyZWFrcG9pbnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtwb2ludHNMb2Fk
ZWQ7Ci0gICAgc3RhdGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdnZXJBZ2VudE9u
QnJlYWtwb2ludDsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrUHJvZ3JhbURl
dGFpbHM7Ci0gICAgYm9vbCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwCmluZGV4IDk0MjAyYzEuLjY0OWRhN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNDYyLDcgKzQ2Miw3IEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0
b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCkpCi0gICAgICAgIGRlYnVnZ2VyQWdl
bnQtPmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7CisgICAgICAgIGRlYnVnZ2VyQWdlbnQt
PmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50
VHlwZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDIyMWE3NzcuLjViMzdmNDEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTg4LDYgKzg4
LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVC
cmVha3BvaW50OwogICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAgICAg
ICB0aGlzLl9jYW5SZXN0b3JlRE9NQnJlYWtwb2ludHMgPSBmYWxzZTsKICAgICB9LAogCiAgICAg
X3NldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNv
bmRpdGlvbikKQEAgLTEzNCw0NSArMTM1LDQ4IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChmcm9udGVuZElkIGluIHRoaXMuX25hdGl2
ZUJyZWFrcG9pbnRzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBicmVha3Bv
aW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50KHRoaXMsIGZyb250ZW5kSWQsIG5v
ZGVJZCwgZG9tRXZlbnRUeXBlKTsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbZnJv
bnRlbmRJZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJ
bnNwZWN0b3IuRE9NQnJlYWtwb2ludCh0aGlzLCBub2RlSWQsIGRvbUV2ZW50VHlwZSk7CisgICAg
ICAgIHRoaXMuX3NldE5hdGl2ZUJyZWFrcG9pbnQoZnJvbnRlbmRJZCwgYnJlYWtwb2ludCwgIWRp
c2FibGVkKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImRvbS1icmVh
a3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9
ICFkaXNhYmxlZDsKICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CiAgICAgfSwKIAogICAgIGNy
ZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50OiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewot
ICAgICAgICB2YXIgZnJvbnRlbmRJZCA9IGV2ZW50TmFtZTsKKyAgICAgICAgdmFyIGZyb250ZW5k
SWQgPSAiZXZlbnRMaXN0ZW5lcjoiICsgZXZlbnROYW1lOwogICAgICAgICBpZiAoZnJvbnRlbmRJ
ZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnQodGhpcywgZnJvbnRlbmRJZCwgZXZlbnROYW1lKTsKLSAgICAgICAgdGhpcy5fbmF0aXZl
QnJlYWtwb2ludHNbZnJvbnRlbmRJZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQodGhpcywgZXZl
bnROYW1lKTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludChmcm9udGVuZElkLCBi
cmVha3BvaW50LCB0cnVlKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
ImV2ZW50LWxpc3RlbmVyLWJyZWFrcG9pbnQtYWRkZWQiLCB7IGJyZWFrcG9pbnQ6IGJyZWFrcG9p
bnQsIGV2ZW50TmFtZTogZXZlbnROYW1lIH0pOwotICAgICAgICBicmVha3BvaW50LmVuYWJsZWQg
PSB0cnVlOwogICAgICAgICByZXR1cm4gYnJlYWtwb2ludDsKICAgICB9LAogCiAgICAgY3JlYXRl
WEhSQnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBkaXNhYmxlZCkKICAgICB7Ci0gICAgICAgIHZh
ciBmcm9udGVuZElkID0gdXJsOworICAgICAgICB2YXIgZnJvbnRlbmRJZCA9ICJ4aHI6IiArIHVy
bDsKICAgICAgICAgaWYgKGZyb250ZW5kSWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLlhIUkJyZWFrcG9pbnQodGhpcywgZnJvbnRlbmRJZCwgdXJsKTsKLSAgICAgICAgdGhp
cy5fbmF0aXZlQnJlYWtwb2ludHNbZnJvbnRlbmRJZF0gPSBicmVha3BvaW50OworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCh0aGlzLCB1cmwp
OworICAgICAgICB0aGlzLl9zZXROYXRpdmVCcmVha3BvaW50KGZyb250ZW5kSWQsIGJyZWFrcG9p
bnQsICFkaXNhYmxlZCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJ4
aHItYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnQpOwotICAgICAgICBicmVha3BvaW50LmVu
YWJsZWQgPSAhZGlzYWJsZWQKICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CiAgICAgfSwKIAor
ICAgIF9zZXROYXRpdmVCcmVha3BvaW50OiBmdW5jdGlvbihmcm9udGVuZElkLCBicmVha3BvaW50
LCBlbmFibGVkKQorICAgIHsKKyAgICAgICAgYnJlYWtwb2ludC5fZnJvbnRlbmRJZCA9IGZyb250
ZW5kSWQ7CisgICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2Zyb250ZW5kSWRdID0gYnJl
YWtwb2ludDsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludEVuYWJsZWQoYnJlYWtw
b2ludCwgZW5hYmxlZCk7CisgICAgfSwKKwogICAgIF9yZW1vdmVOYXRpdmVCcmVha3BvaW50OiBm
dW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQuX2JlaW5n
U2V0T25CYWNrZW5kKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoYnJlYWtwb2lu
dC5lbmFibGVkKQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTmF0aXZlQnJlYWtwb2ludEZyb21C
YWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50
RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVh
a3BvaW50c1ticmVha3BvaW50Ll9mcm9udGVuZElkXTsKICAgICAgICAgdGhpcy5fdXBkYXRlTmF0
aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7CiAgICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CkBAIC0xODcsNyArMTkxLDEwIEBAIFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChlbmFibGVk
KQogICAgICAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludE9uQmFja2VuZChicmVha3Bv
aW50KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTmF0aXZlQnJlYWtw
b2ludEZyb21CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTmF0
aXZlQnJlYWtwb2ludEZyb21CYWNrZW5kKGJyZWFrcG9pbnQpCisgICAgICAgIGJyZWFrcG9pbnQu
X2VuYWJsZWQgPSBlbmFibGVkOworICAgICAgICB0aGlzLl91cGRhdGVOYXRpdmVCcmVha3BvaW50
c0luU2V0dGluZ3MoKTsKKyAgICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImVuYWJsZS1jaGFuZ2VkIik7CiAgICAgfSwKIAogICAgIF9zZXROYXRpdmVCcmVha3BvaW50
T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQpAQCAtMjAyLDE5ICsyMDksMTggQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlm
IChiYWNrZW5kQnJlYWtwb2ludElkICE9PSAiIikgewogICAgICAgICAgICAgICAgIGJyZWFrcG9p
bnQuX2JhY2tlbmRJZCA9IGJhY2tlbmRCcmVha3BvaW50SWQ7CiAgICAgICAgICAgICAgICAgdGhp
cy5fYnJlYWtwb2ludHNbYmFja2VuZEJyZWFrcG9pbnRJZF0gPSBicmVha3BvaW50OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
ImVuYWJsZS1jaGFuZ2VkIik7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVOYXRpdmVCcmVha3Bv
aW50c0luU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnQucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICB9LAogCiAgICAgX3JlbW92ZU5hdGl2
ZUJyZWFrcG9pbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CisgICAg
ICAgIGlmICghYnJlYWtwb2ludC5fYmFja2VuZElkKQorICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5f
YmFja2VuZElkKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQu
X2JhY2tlbmRJZF0KICAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2JhY2tlbmRJZDsKLSAgICAg
ICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1jaGFuZ2VkIik7
Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwogICAg
IH0sCiAKICAgICBfdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzOiBmdW5jdGlvbigp
CkBAIC0yMzAsNiArMjM2LDE2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUgPSB7CiAKICAgICBkZWJ1Z2dlclBhdXNlZDogZnVuY3Rpb24oZGV0YWlscykKICAgICB7
CisgICAgICAgIGlmIChkZXRhaWxzLmV2ZW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
RXZlbnRUeXBlcy5EZWJ1Z2dlckF0dGFjaGVkKSB7CisgICAgICAgICAgICAvLyBEZWJ1Z2dlckF0
dGFjaGVkIGV2ZW50IGlzIG5lZWRlZCB0byBnaXZlIHVzIGEgY2hhbmNlIHRvIHNldCBicmVha3Bv
aW50cworICAgICAgICAgICAgLy8gb24gYmFjay1lbmQgYmVmb3JlIHNjcmlwdHMgc3RhcnQgZXhl
Y3V0aW5nLgorICAgICAgICAgICAgdGhpcy5yZXN0b3JlQnJlYWtwb2ludHMoKTsKKyAgICAgICAg
ICAgIEluc3BlY3RvckJhY2tlbmQucmVzdW1lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZGVidWdnZXIt
cGF1c2VkIiwgZGV0YWlscyk7CisKICAgICAgICAgaWYgKGRldGFpbHMuZXZlbnRUeXBlICE9PSBX
ZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLk5hdGl2ZUJyZWFrcG9pbnQpCiAgICAgICAg
ICAgICByZXR1cm47CiAKQEAgLTI1NiwxNSArMjcyLDMxIEBAIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgcmVzdG9yZUJyZWFrcG9pbnRzOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9wZXJzaXN0ZW50QnJl
YWtwb2ludHMoKTsKKyAgICAgICAgdmFyIGRvbUJyZWFrcG9pbnRzID0gW107CiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSAiRXZlbnRMaXN0ZW5lciIpCiAgICAgICAgICAg
ICAgICAgdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludChicmVha3BvaW50c1tpXS5j
b25kaXRpb24uZXZlbnROYW1lKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJyZWFrcG9pbnRzW2ld
LnR5cGUgPT09ICJET00iKQorICAgICAgICAgICAgICAgIGRvbUJyZWFrcG9pbnRzLnB1c2goYnJl
YWtwb2ludHNbaV0pCiAgICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50c1tpXS50eXBlID09
PSAiWEhSIikKICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVhIUkJyZWFrcG9pbnQoYnJlYWtw
b2ludHNbaV0uY29uZGl0aW9uLnVybCwgIWJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpOwogICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9jYW5SZXN0b3JlRE9NQnJlYWtwb2ludHMpCisgICAgICAg
ICAgICB0aGlzLl9yZXN0b3JlRE9NQnJlYWtwb2ludHMoZG9tQnJlYWtwb2ludHMpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0aGlzLl9wZW5kaW5nRE9NQnJlYWtwb2ludHMgPSBkb21CcmVh
a3BvaW50czsKICAgICB9LAogCi0gICAgcmVzdG9yZURPTUJyZWFrcG9pbnRzOiBmdW5jdGlvbigp
CisgICAgc2V0Q2FuUmVzdG9yZURPTUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fcGVuZGluZ0RPTUJyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB0aGlz
Ll9yZXN0b3JlRE9NQnJlYWtwb2ludHModGhpcy5fcGVuZGluZ0RPTUJyZWFrcG9pbnRzKTsKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nRE9NQnJlYWtwb2ludHM7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdGhpcy5fY2FuUmVzdG9yZURPTUJyZWFrcG9pbnRzID0gdHJ1ZTsK
KyAgICB9LAorCisgICAgX3Jlc3RvcmVET01CcmVha3BvaW50czogZnVuY3Rpb24oYnJlYWtwb2lu
dHMpCiAgICAgewogICAgICAgICBmdW5jdGlvbiBkaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQo
cGF0aCwgbm9kZUlkKQogICAgICAgICB7CkBAIC0yODAsMTIgKzMxMiw5IEBAIFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9wZXJzaXN0ZW50QnJlYWtwb2lu
dHMoKTsKICAgICAgICAgdmFyIHBhdGhUb05vZGVJZCA9IHt9OwogICAgICAgICB2YXIgcGVuZGlu
Z0NhbGxzID0gMDsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRzW2ldLnR5cGUgIT09ICJET00i
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdmFyIHBhdGggPSBicmVh
a3BvaW50c1tpXS5jb25kaXRpb24ucGF0aDsKICAgICAgICAgICAgIGlmIChwYXRoIGluIHBhdGhU
b05vZGVJZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQwOSwxNyArNDM4LDE3IEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90
eXBlOwogCi1XZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIs
IGZyb250ZW5kSWQsIHR5cGUpCitXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludCA9IGZ1bmN0
aW9uKG1hbmFnZXIsIHR5cGUpCiB7CiAgICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7Ci0gICAg
dGhpcy5fX2Zyb250ZW5kSWQgPSBmcm9udGVuZElkOwogICAgIHRoaXMuX190eXBlID0gdHlwZTsK
KyAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7CiB9CiAKIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVh
a3BvaW50LnByb3RvdHlwZSA9IHsKICAgICBnZXQgZW5hYmxlZCgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gIl9iYWNrZW5kSWQiIGluIHRoaXM7CisgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVk
OwogICAgIH0sCiAKICAgICBzZXQgZW5hYmxlZChlbmFibGVkKQpAQCAtNDMzLDExICs0NjIsNiBA
QCBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX29uUmVtb3ZlKCk7CiAgICAgfSwKIAotICAgIGdldCBfZnJvbnRlbmRJZCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fX2Zyb250ZW5kSWQ7Ci0gICAgfSwKLQogICAgIGdldCBfdHlw
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fX3R5cGU7CkBAIC00NTcsOSArNDgxLDkg
QEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiBXZWJJbnNw
ZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9y
Lk9iamVjdC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50ID0gZnVuY3Rp
b24obWFuYWdlciwgZnJvbnRlbmRJZCwgbm9kZUlkLCBkb21FdmVudFR5cGUpCitXZWJJbnNwZWN0
b3IuRE9NQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIG5vZGVJZCwgZG9tRXZlbnRUeXBl
KQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdl
ciwgZnJvbnRlbmRJZCwgIkRPTSIpOworICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50
LmNhbGwodGhpcywgbWFuYWdlciwgIkRPTSIpOwogICAgIHRoaXMuX25vZGVJZCA9IG5vZGVJZDsK
ICAgICB0aGlzLl9kb21FdmVudFR5cGUgPSBkb21FdmVudFR5cGU7CiAgICAgdGhpcy5fY29uZGl0
aW9uID0geyBub2RlSWQ6IHRoaXMuX25vZGVJZCwgdHlwZTogdGhpcy5fZG9tRXZlbnRUeXBlIH07
CkBAIC01MjcsOSArNTUxLDkgQEAgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBl
ID0gewogCiBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3Iu
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBmcm9udGVuZElkLCBl
dmVudE5hbWUpCitXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgPSBmdW5jdGlv
bihtYW5hZ2VyLCBldmVudE5hbWUpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9p
bnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBmcm9udGVuZElkLCAiRXZlbnRMaXN0ZW5lciIpOworICAg
IFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgIkV2ZW50
TGlzdGVuZXIiKTsKICAgICB0aGlzLl9ldmVudE5hbWUgPSBldmVudE5hbWU7CiAgICAgdGhpcy5f
Y29uZGl0aW9uID0geyBldmVudE5hbWU6IHRoaXMuX2V2ZW50TmFtZSB9OwogICAgIHRoaXMuX3Bl
cnNpc3RlbnRDb25kaXRpb24gPSB0aGlzLl9jb25kaXRpb247CkBAIC01NzIsOSArNTk2LDkgQEAg
V2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogV2Vi
SW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5Y
SFJCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRlbmRJZCwgdXJsKQorV2ViSW5z
cGVjdG9yLlhIUkJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCB1cmwpCiB7Ci0gICAgV2Vi
SW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBmcm9udGVuZElk
LCAiWEhSIik7CisgICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBt
YW5hZ2VyLCAiWEhSIik7CiAgICAgdGhpcy5fdXJsID0gdXJsOwogICAgIHRoaXMuX2NvbmRpdGlv
biA9IHsgdXJsOiB0aGlzLl91cmwgfTsKICAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0aW9uID0g
dGhpcy5fY29uZGl0aW9uOwpAQCAtNjEyLDkgKzYzNiwxMCBAQCBXZWJJbnNwZWN0b3IuWEhSQnJl
YWtwb2ludC5wcm90b3R5cGUgPSB7CiBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlOwog
CiBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzID0gewotICAgIEphdmFTY3JpcHRQYXVz
ZTogMCwKLSAgICBKYXZhU2NyaXB0QnJlYWtwb2ludDogMSwKLSAgICBOYXRpdmVCcmVha3BvaW50
OiAyCisgICAgRGVidWdnZXJBdHRhY2hlZDogMSwKKyAgICBKYXZhU2NyaXB0UGF1c2U6IDIsCisg
ICAgSmF2YVNjcmlwdEJyZWFrcG9pbnQ6IDMsCisgICAgTmF0aXZlQnJlYWtwb2ludDogNAogfTsK
IAogV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRUeXBlcyA9IHsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKaW5kZXggZjAx
MDMzMC4uOTFiNGUxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKQEAgLTMzMyw2ICszMzMsOCBAQCBXZWJJbnNwZWN0
b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAg
ICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQuZGF0YS5ldmVudE5hbWU7CiAKICAgICAgICAgdmFy
IGJyZWFrcG9pbnRJdGVtID0gdGhpcy5fYnJlYWtwb2ludEl0ZW1zW2V2ZW50TmFtZV07CisgICAg
ICAgIGlmICghYnJlYWtwb2ludEl0ZW0pCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJy
ZWFrcG9pbnRJdGVtLmJyZWFrcG9pbnQgPSBicmVha3BvaW50OwogICAgICAgICBicmVha3BvaW50
LmFkZEV2ZW50TGlzdGVuZXIoImhpdC1zdGF0ZS1jaGFuZ2VkIiwgdGhpcy5fYnJlYWtwb2ludEhp
dFN0YXRlQ2hhbmdlZC5iaW5kKHRoaXMsIGJyZWFrcG9pbnRJdGVtKSk7CiAgICAgICAgIGJyZWFr
cG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVk
LmJpbmQodGhpcywgYnJlYWtwb2ludEl0ZW0pKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01BZ2VudC5qcwppbmRleCA0NzBlNzc1Li5iNDM0YTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RPTUFnZW50LmpzCkBAIC0zNzksNyArMzc5LDcgQEAgV2ViSW5zcGVjdG9yLkRPTUFn
ZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkRPTURvY3VtZW50KHRoaXMsIHRoaXMuX3dpbmRvdywgcGF5bG9hZCk7CiAgICAgICAg
ICAgICB0aGlzLl9pZFRvRE9NTm9kZVtwYXlsb2FkLmlkXSA9IHRoaXMuZG9jdW1lbnQ7CiAgICAg
ICAgICAgICB0aGlzLl9iaW5kTm9kZXModGhpcy5kb2N1bWVudC5jaGlsZHJlbik7Ci0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZURPTUJyZWFrcG9pbnRz
KCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0Q2FuUmVz
dG9yZURPTUJyZWFrcG9pbnRzKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5k
b2N1bWVudCA9IG51bGw7CiAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuc2V0
RG9jdW1lbnQodGhpcy5kb2N1bWVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcwppbmRleCBkODYxZGE1Li44NzdkYjhkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE3NSw2ICsxNzUsMTEgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuX2RlYnVnZ2VyRW5h
YmxlZCA9IFByZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZDsKIAorICAgIGZ1bmN0aW9u
IGRlYnVnZ2VyUGF1c2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fZGVidWdnZXJQYXVz
ZWQoZXZlbnQuZGF0YS5jYWxsRnJhbWVzKTsKKyAgICB9CisgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImRlYnVnZ2VyLXBhdXNlZCIsIGRlYnVnZ2Vy
UGF1c2VkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZl
bnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhp
cyk7CiAKICAgICB0aGlzLnJlc2V0KCk7CkBAIC0zMjMsNyArMzI4LDcgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoc3VjY2Vzcykgewog
ICAgICAgICAgICAgICAgIGNvbW1pdEVkaXRpbmdDYWxsYmFjayhuZXdCb2R5T3JFcnJvck1lc3Nh
Z2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsRnJhbWVzICYmIGNhbGxGcmFtZXMubGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnZ2VyUGF1c2VkKGNhbGxGcmFtZXMpOwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z2dlclBhdXNlZChjYWxsRnJhbWVzKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY2FuY2VsRWRpdGluZ0NhbGxiYWNr
KCk7CiAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhuZXdCb2R5T3JFcnJvck1lc3Nh
Z2UsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyk7CkBA
IC0zNzYsNyArMzgxLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldChjYWxsRnJhbWUud29ybGRJZCkuZXZh
bHVhdGVJbkNhbGxGcmFtZShjYWxsRnJhbWUuaWQsIGNvZGUsIG9iamVjdEdyb3VwLCBldmFsQ2Fs
bGJhY2spOwogICAgIH0sCiAKLSAgICBkZWJ1Z2dlclBhdXNlZDogZnVuY3Rpb24oY2FsbEZyYW1l
cykKKyAgICBfZGVidWdnZXJQYXVzZWQ6IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCiAgICAgewogICAg
ICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIucmVtb3ZlT25lVGltZUJyZWFrcG9p
bnQoKTsKICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTsKQEAgLTM5MCw2ICszOTUsNyBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBXZWJJbnNw
ZWN0b3IuY3VycmVudFBhbmVsID0gdGhpczsKICAgICAgICAgd2luZG93LmZvY3VzKCk7CisgICAg
ICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKICAgICB9LAogCiAgICAg
ZGVidWdnZXJSZXN1bWVkOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcwppbmRleCBiZjdlYzM5Li45NzRmNWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTEzMTAsNiArMTMxMCw3IEBAIFdlYkluc3BlY3Rvci5h
dHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGZ1bmN0aW9uKCkKIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
cldhc0VuYWJsZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5kZWJ1
Z2dlcldhc0VuYWJsZWQoKTsKKyAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVCcmVh
a3BvaW50cygpOwogfQogCiBXZWJJbnNwZWN0b3IuZGVidWdnZXJXYXNEaXNhYmxlZCA9IGZ1bmN0
aW9uKCkKQEAgLTEzNDQsOSArMTM0NSw3IEBAIFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNlU2Ny
aXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluCiAKIFdl
Ykluc3BlY3Rvci5wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihkZXRhaWxzKQogewotICAgIHRoaXMu
cGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoZGV0YWlscy5jYWxsRnJhbWVzKTsKICAgICB0
aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLmRlYnVnZ2VyUGF1c2VkKGRldGFpbHMpOwotICAgIEluc3Bl
Y3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKIH0KIAogV2ViSW5zcGVjdG9yLnJlc3Vt
ZWRTY3JpcHQgPSBmdW5jdGlvbigpCkBAIC0xMzczLDggKzEzNzIsNiBAQCBXZWJJbnNwZWN0b3Iu
cmVzZXQgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLmNvbnNvbGUuY2xlYXJNZXNzYWdlcygpOwog
ICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeUluc3BlY3RvclJlc2V0KCk7Ci0KLSAgICB0
aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVCcmVha3BvaW50cygpOwogfQogCiBXZWJJbnNw
ZWN0b3IucmVzZXRQcm9maWxlc1BhbmVsID0gZnVuY3Rpb24oKQpAQCAtMTM5MywxMCArMTM5MCw2
IEBAIFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0gZnVuY3Rpb24odXJsKQogICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7CiAgICAgdGhp
cy5zZXR0aW5ncy5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7CiAgICAgdGhpcy5leHRlbnNpb25T
ZXJ2ZXIubm90aWZ5SW5zcGVjdGVkVVJMQ2hhbmdlZCgpOwotICAgIGlmICghdGhpcy5fYnJlYWtw
b2ludHNSZXN0b3JlZCkgewotICAgICAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVC
cmVha3BvaW50cygpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50c1Jlc3RvcmVkID0gdHJ1ZTsK
LSAgICB9CiB9CiAKIFdlYkluc3BlY3Rvci5kaWRDb21taXRMb2FkID0gZnVuY3Rpb24oKQo=
</data>
<flag name="review"
          id="63157"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74222</attachid>
            <date>2010-11-18 03:12:07 -0800</date>
            <delta_ts>2010-12-08 08:52:26 -0800</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>41003</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMWI3ZWJlLi40ZjczNDAyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MTggIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc2V0
IG5hdGl2ZSBicmVha3BvaW50cyBvbiBiYWNrZW5kIGJlZm9yZSBzY3JpcHRzIHN0YXJ0IGV4ZWN1
dGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4
NTgKKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2Ny
aXB0KToKKyAgICAgICAgKGluaXRpYWxpemVfRGVidWdnZXJUZXN0Lkluc3BlY3RvclRlc3QuX3Jl
c3VtZWRTY3JpcHQpOgorCiAyMDEwLTExLTE3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzIyMjgu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10
ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3Qy
LmpzCmluZGV4IDZjMTlmZjkuLmZhMjk4ZGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCkBAIC05MSw5ICs5MSwxMiBAQCBJbnNw
ZWN0b3JUZXN0LmNhcHR1cmVTdGFja1RyYWNlID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKIAogSW5z
cGVjdG9yVGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIHsKLSAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IGV4ZWN1dGlvbiBwYXVzZWQuIik7CisgICAgaWYg
KGRldGFpbHMuZXZlbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLkRl
YnVnZ2VyQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIEluc3BlY3RvclRlc3QuX2Nh
bGxGcmFtZXMgPSBkZXRhaWxzLmNhbGxGcmFtZXM7CiAgICAgaWYgKEluc3BlY3RvclRlc3QuX3dh
aXRVbnRpbFBhdXNlZENhbGxiYWNrKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCJTY3JpcHQgZXhlY3V0aW9uIHBhdXNlZC4iKTsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gSW5z
cGVjdG9yVGVzdC5fd2FpdFVudGlsUGF1c2VkQ2FsbGJhY2s7CiAgICAgICAgIGRlbGV0ZSBJbnNw
ZWN0b3JUZXN0Ll93YWl0VW50aWxQYXVzZWRDYWxsYmFjazsKICAgICAgICAgY2FsbGJhY2soSW5z
cGVjdG9yVGVzdC5fY2FsbEZyYW1lcyk7CkBAIC0xMDIsOSArMTA1LDkgQEAgSW5zcGVjdG9yVGVz
dC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIAogSW5zcGVjdG9yVGVzdC5fcmVz
dW1lZFNjcmlwdCA9IGZ1bmN0aW9uKCkKIHsKLSAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
U2NyaXB0IGV4ZWN1dGlvbiByZXN1bWVkLiIpOwogICAgIGRlbGV0ZSBJbnNwZWN0b3JUZXN0Ll9j
YWxsRnJhbWVzOwogICAgIGlmIChJbnNwZWN0b3JUZXN0Ll93YWl0VW50aWxSZXN1bWVkQ2FsbGJh
Y2spIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBleGVjdXRpb24g
cmVzdW1lZC4iKTsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gSW5zcGVjdG9yVGVzdC5fd2FpdFVu
dGlsUmVzdW1lZENhbGxiYWNrOwogICAgICAgICBkZWxldGUgSW5zcGVjdG9yVGVzdC5fd2FpdFVu
dGlsUmVzdW1lZENhbGxiYWNrOwogICAgICAgICBjYWxsYmFjaygpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0ODc1NmU4Li5hYTFlMGMy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU4IEBACisyMDEwLTExLTE4ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHNldCBuYXRpdmUgYnJlYWtwb2ludHMgb24gYmFja2VuZCBi
ZWZvcmUgc2NyaXB0cyBzdGFydCBleGVjdXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODU4CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0TmF0aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpyZW1vdmVOYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmZpbmRET01CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmZpbmRFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhck5hdGl2ZUJyZWFrcG9pbnRz
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VXaGVuQXR0YWNoZWQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9k
ZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TW9kaWZ5RE9NQXR0ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0
aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5w
cm90b3R5cGUuZ2V0IGVuYWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9icmVha3Bv
aW50QWRkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLl9zZXREb2N1bWVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLmRlYnVnZ2VyUGF1c2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUuZWRpdFNjcmlwdFNvdXJjZS5teWNhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyUGF1c2VkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlcldhc0VuYWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnBh
dXNlZFNjcmlwdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IucmVzZXQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmluc3BlY3RlZFVSTENoYW5nZWQpOgorCiAyMDEwLTExLTE3ICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByNzIyMjguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCmluZGV4IGM0NzY5OWYuLjA0NTc5YzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkK
ICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKHRo
aXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9hdHRhY2hEZWJ1
Z2dlcldoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fbGFzdEJyZWFrcG9pbnRJZCgwKQorICAgICwg
bV9uZXh0QnJlYWtwb2ludElkKDEpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC03MzIsOCArNzMyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciog
bG9hZGVyKQogICAgICAgICBtX2NvdW50cy5jbGVhcigpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCisgICAgICAgIGlmICht
X2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQ
YWdlTmF2aWdhdGlvbigpOworICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRQYXVzZVdo
ZW5BdHRhY2hlZCgpOworICAgICAgICB9CiAKICAgICAgICAgY2xlYXJOYXRpdmVCcmVha3BvaW50
cygpOwogI2VuZGlmCkBAIC0xNDA3LDIyICsxNDA5LDIwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJl
YWtwCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29uZGl0aW9uID0gYnJlYWtwb2ludC0+
Z2V0T2JqZWN0KCJjb25kaXRpb24iKTsKICAgICBpZiAoIWNvbmRpdGlvbikKICAgICAgICAgcmV0
dXJuOworICAgIFN0cmluZyBuZXh0QnJlYWtwb2ludElkID0gU3RyaW5nOjpudW1iZXIobV9uZXh0
QnJlYWtwb2ludElkKTsKICAgICBpZiAodHlwZSA9PSB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSkg
ewogICAgICAgICBTdHJpbmcgdXJsOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5n
KCJ1cmwiLCAmdXJsKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgKmJyZWFrcG9pbnRJ
ZCA9IFN0cmluZzo6bnVtYmVyKCsrbV9sYXN0QnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9YSFJC
cmVha3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgdXJsKTsKLSAgICAgICAgbV9uYXRpdmVCcmVh
a3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgdHlwZSk7CisgICAgICAgIG1fWEhSQnJlYWtwb2lu
dHMuc2V0KG5leHRCcmVha3BvaW50SWQsIHVybCk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IGV2
ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSkgewogICAgICAgICBTdHJpbmcgZXZlbnRO
YW1lOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5hbWUiLCAmZXZl
bnROYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnRzLmNvbnRhaW5zKGV2ZW50TmFtZSkpCisgICAgICAgIGlmIChtX2V2ZW50TmFt
ZVRvQnJlYWtwb2ludElkLmNvbnRhaW5zKGV2ZW50TmFtZSkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICpicmVha3BvaW50SWQgPSBldmVudE5hbWU7Ci0gICAgICAgIG1fZXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUpOwotICAgICAgICBtX25hdGl2ZUJyZWFrcG9p
bnRzLnNldCgqYnJlYWtwb2ludElkLCB0eXBlKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVyQnJl
YWtwb2ludHMuc2V0KG5leHRCcmVha3BvaW50SWQsIGV2ZW50TmFtZSk7CisgICAgICAgIG1fZXZl
bnROYW1lVG9CcmVha3BvaW50SWQuc2V0KGV2ZW50TmFtZSwgbmV4dEJyZWFrcG9pbnRJZCk7CiAg
ICAgfSBlbHNlIGlmICh0eXBlID09IGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAgICAg
IGlmICghbV9kb21BZ2VudCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0MzQsMTAgKzE0MzQs
MTYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXROYXRpdmVCcmVha3BvaW50KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3AKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbG9uZyBub2RlSWQgPSAobG9uZykgbm9kZUlkTnVtYmVyOwogICAgICAgICBsb25nIGRvbUJy
ZWFrcG9pbnRUeXBlID0gKGxvbmcpIGRvbUJyZWFrcG9pbnRUeXBlTnVtYmVyOwotICAgICAgICAq
YnJlYWtwb2ludElkID0gbV9kb21BZ2VudC0+c2V0RE9NQnJlYWtwb2ludChub2RlSWQsIGRvbUJy
ZWFrcG9pbnRUeXBlKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50SWQtPmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsIHR5cGUpOwot
ICAgIH0KKyAgICAgICAgU3RyaW5nIGRvbUJyZWFrcG9pbnRJZCA9IG1fZG9tQWdlbnQtPnNldERP
TUJyZWFrcG9pbnQobm9kZUlkLCBkb21CcmVha3BvaW50VHlwZSk7CisgICAgICAgIGlmICghZG9t
QnJlYWtwb2ludElkLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Rv
bUJyZWFrcG9pbnRzLnNldChuZXh0QnJlYWtwb2ludElkLCBkb21CcmVha3BvaW50SWQpOworICAg
ICAgICBtX2RvbUJyZWFrcG9pbnRJZFRvQnJlYWtwb2ludElkLnNldChkb21CcmVha3BvaW50SWQs
IG5leHRCcmVha3BvaW50SWQpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgbV9u
YXRpdmVCcmVha3BvaW50cy5zZXQobmV4dEJyZWFrcG9pbnRJZCwgdHlwZSk7CisgICAgKmJyZWFr
cG9pbnRJZCA9IG5leHRCcmVha3BvaW50SWQ7CisgICAgbV9uZXh0QnJlYWtwb2ludElkICs9IDE7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlTmF0aXZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKQEAgLTE0NDUsMTcgKzE0NTEsMjUgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVOYXRpdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
YnJlYWtwb2ludElkKQogICAgIFN0cmluZyB0eXBlID0gbV9uYXRpdmVCcmVha3BvaW50cy50YWtl
KGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKHR5cGUgPT0geGhyTmF0aXZlQnJlYWtwb2ludFR5cGUp
CiAgICAgICAgIG1fWEhSQnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnRJZCk7Ci0gICAgZWxz
ZSBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUpCi0gICAgICAg
IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnJlbW92ZShicmVha3BvaW50SWQpOwotICAgIGVs
c2UgaWYgKHR5cGUgPT0gZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpIHsKKyAgICBlbHNlIGlmICh0
eXBlID09IGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSkgeworICAgICAgICBTdHJp
bmcgZXZlbnROYW1lID0gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMudGFrZShicmVha3BvaW50
SWQpOworICAgICAgICBtX2V2ZW50TmFtZVRvQnJlYWtwb2ludElkLnJlbW92ZShldmVudE5hbWUp
OworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBkb21OYXRpdmVCcmVha3BvaW50VHlwZSkgeworICAg
ICAgICBTdHJpbmcgZG9tQnJlYWtwb2ludElkID0gbV9kb21CcmVha3BvaW50cy50YWtlKGJyZWFr
cG9pbnRJZCk7CisgICAgICAgIG1fZG9tQnJlYWtwb2ludElkVG9CcmVha3BvaW50SWQucmVtb3Zl
KGRvbUJyZWFrcG9pbnRJZCk7CiAgICAgICAgIGlmIChtX2RvbUFnZW50KQotICAgICAgICAgICAg
bV9kb21BZ2VudC0+cmVtb3ZlRE9NQnJlYWtwb2ludChicmVha3BvaW50SWQpOworICAgICAgICAg
ICAgbV9kb21BZ2VudC0+cmVtb3ZlRE9NQnJlYWtwb2ludChkb21CcmVha3BvaW50SWQpOwogICAg
IH0KIH0KIAorU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OmZpbmRET01CcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgZG9tQnJlYWtwb2ludElkKQoreworICAgIHJldHVybiBtX2RvbUJyZWFrcG9p
bnRJZFRvQnJlYWtwb2ludElkLmdldChkb21CcmVha3BvaW50SWQpOworfQorCiBTdHJpbmcgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZmluZEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgZXZlbnROYW1lKQogewotICAgIHJldHVybiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5j
b250YWlucyhldmVudE5hbWUpID8gZXZlbnROYW1lIDogIiI7CisgICAgcmV0dXJuIG1fZXZlbnRO
YW1lVG9CcmVha3BvaW50SWQuZ2V0KGV2ZW50TmFtZSk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JD
b250cm9sbGVyOjpmaW5kWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKQEAgLTE0NzAs
OSArMTQ4NCwxMSBAQCBTdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZmluZFhIUkJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiB1cmwpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyTmF0
aXZlQnJlYWtwb2ludHMoKQogewogICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAg
ICBtX2RvbUJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9kb21CcmVha3BvaW50SWRUb0JyZWFr
cG9pbnRJZC5jbGVhcigpOwogICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7
CisgICAgbV9ldmVudE5hbWVUb0JyZWFrcG9pbnRJZC5jbGVhcigpOwogICAgIG1fWEhSQnJlYWtw
b2ludHMuY2xlYXIoKTsKLSAgICBtX2xhc3RCcmVha3BvaW50SWQgPSAwOwogfQogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBjYTVhOWQ5Li5mODdk
ODNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0zMDcsNiAr
MzA3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKICAg
ICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKTsKIAorICAgIFN0
cmluZyBmaW5kRE9NQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGRvbUJyZWFrcG9pbnRJZCk7CiAg
ICAgU3RyaW5nIGZpbmRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSk7CiAgICAgU3RyaW5nIGZpbmRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsK
ICAgICB2b2lkIGNsZWFyTmF0aXZlQnJlYWtwb2ludHMoKTsKQEAgLTM5MCwxMCArMzkxLDEyIEBA
IHByaXZhdGU6CiAgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IG1fZGVidWdnZXJB
Z2VudDsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fbmF0aXZlQnJlYWtwb2ludHM7
Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOworICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZG9tQnJlYWtwb2ludHM7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gbV9kb21CcmVha3BvaW50SWRUb0JyZWFrcG9pbnRJZDsKKyAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX2V2ZW50TmFtZVRvQnJlYWtwb2ludElkOwogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IG1fWEhSQnJlYWtwb2ludHM7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbV9s
YXN0QnJlYWtwb2ludElkOworICAgIGludCBtX25leHRCcmVha3BvaW50SWQ7CiAKICAgICBPd25Q
dHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9wcm9maWxlckFnZW50OwogI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggODk0ZTRiMi4uZDBkYzlkMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzY4LDcgKzc2OCw3
IEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJ
ZCwgbG9uZyB0eXBlKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuICIiOwogCi0gICAg
U3RyaW5nIGJyZWFrcG9pbnRJZCA9IGNyZWF0ZUJyZWFrcG9pbnRJZChub2RlSWQsIHR5cGUpOwor
ICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQobm9kZUlkLCB0eXBl
KTsKICAgICBpZiAobV9pZFRvQnJlYWtwb2ludC5jb250YWlucyhicmVha3BvaW50SWQpKQogICAg
ICAgICByZXR1cm4gIiI7CiAKQEAgLTgwNSw2OCArODA1LDQxIEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiAg
ICAgfQogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZUluc2Vy
dGlvbihOb2RlKiwgTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0
YWlscykKK1N0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZmluZEJyZWFrcG9pbnRGb3JOb2RlSW5z
ZXJ0aW9uKE5vZGUqLCBOb2RlKiBwYXJlbnQsIGxvbmcqIG5vZGVJZCkKIHsKICAgICBpZiAoaGFz
QnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgKmRldGFpbHMg
PSBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zy
b250ZW5kKHBhcmVudCk7CisgICAgICAgIHJldHVybiBmaW5kU3VidHJlZU1vZGlmaWVkQnJlYWtw
b2ludChwYXJlbnQpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICIiOwog
fQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9k
ZSogbm9kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpCitTdHJpbmcgSW5z
cGVjdG9yRE9NQWdlbnQ6OmZpbmRCcmVha3BvaW50Rm9yTm9kZVJlbW92YWwoTm9kZSogbm9kZSwg
bG9uZyogbm9kZUlkKQogewotICAgIGlmIChoYXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVk
KSkgewotICAgICAgICAqZGV0YWlscyA9IGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9k
ZVJlbW92ZWQsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmICho
YXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVkKSkKKyAgICAgICAgcmV0dXJuIGZvcm1hdEJy
ZWFrcG9pbnRJZChtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGUpLCBOb2RlUmVtb3ZlZCk7
CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9k
aWZpZWQpKSB7Ci0gICAgICAgICpkZXRhaWxzID0gZGVzY3JpcHRpb25Gb3JET01FdmVudChub2Rl
LCBTdWJ0cmVlTW9kaWZpZWQsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOworICAgICAgICByZXR1cm4g
ZmluZFN1YnRyZWVNb2RpZmllZEJyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAiIjsKIH0KIAotYm9vbCBJbnNwZWN0
b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBl
bGVtZW50LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0YWlscykKK1N0cmluZyBJbnNw
ZWN0b3JET01BZ2VudDo6ZmluZEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24oRWxl
bWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1
dGVNb2RpZmllZCkpIHsKLSAgICAgICAgKmRldGFpbHMgPSBkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVu
dCwgQXR0cmlidXRlTW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gZm9ybWF0QnJlYWtwb2ludElk
KG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZWxlbWVudCksIEF0dHJpYnV0ZU1vZGlmaWVkKTsK
KyAgICByZXR1cm4gIiI7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3Rv
ckRPTUFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVh
a3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24pCitTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmZp
bmRTdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKGhh
c0JyZWFrcG9pbnQodGFyZ2V0LCBicmVha3BvaW50VHlwZSkpOwotCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGVzY3JpcHRpb24gPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IE5vZGUqIGJyZWFrcG9pbnRPd25lciA9IHRhcmdldDsKLSAgICBpZiAoKDEgPDwgYnJlYWtwb2lu
dFR5cGUpICYgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrKSB7Ci0gICAgICAgIC8v
IEZvciBpbmhlcml0YWJsZSBicmVha3BvaW50IHR5cGVzLCB0YXJnZXQgbm9kZSBpc24ndCBhbHdh
eXMgdGhlIHNhbWUgYXMgdGhlIG5vZGUgdGhhdCBvd25zIGEgYnJlYWtwb2ludC4KLSAgICAgICAg
Ly8gVGFyZ2V0IG5vZGUgbWF5IGJlIHVua25vd24gdG8gZnJvbnRlbmQsIHNvIHdlIG5lZWQgdG8g
cHVzaCBpdCBmaXJzdC4KLSAgICAgICAgbG9uZyB0YXJnZXROb2RlSWQgPSBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKHRhcmdldCk7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXROb2RlSWQpOwotICAgICAg
ICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJ0YXJnZXROb2RlSWQiLCB0YXJnZXROb2RlSWQpOwot
Ci0gICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lciBub2RlLgotICAgICAgICBpZiAoIWlu
c2VydGlvbikKLSAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IGlubmVyUGFyZW50Tm9kZSh0
YXJnZXQpOwotICAgICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKLSAgICAgICAgd2hpbGUg
KCEobV9icmVha3BvaW50cy5nZXQoYnJlYWtwb2ludE93bmVyKSAmICgxIDw8IGJyZWFrcG9pbnRU
eXBlKSkpIHsKLSAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IGlubmVyUGFyZW50Tm9kZShi
cmVha3BvaW50T3duZXIpOwotICAgICAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUgPT0gU3VidHJlZU1vZGlmaWVk
KQotICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNldEJvb2xlYW4oImluc2VydGlvbiIsIGluc2Vy
dGlvbik7CisgICAgQVNTRVJUKG5vZGUpOworICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMuZ2V0
KG5vZGUpICYgKDEgPDwgU3VidHJlZU1vZGlmaWVkKSkpIHsKKyAgICAgICAgbm9kZSA9IGlubmVy
UGFyZW50Tm9kZShub2RlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgIH0KLQotICAgIGxv
bmcgYnJlYWtwb2ludE93bmVyTm9kZUlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChicmVh
a3BvaW50T3duZXIpOwotICAgIEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRl
c2NyaXB0aW9uLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGNyZWF0ZUJyZWFrcG9pbnRJZChi
cmVha3BvaW50T3duZXJOb2RlSWQsIGJyZWFrcG9pbnRUeXBlKSk7Ci0KLSAgICByZXR1cm4gZGVz
Y3JpcHRpb247CisgICAgcmV0dXJuIGZvcm1hdEJyZWFrcG9pbnRJZChtX2RvY3VtZW50Tm9kZVRv
SWRNYXAuZ2V0KG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9y
RE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKQEAg
LTExOTIsMTMgKzExNjUsMTMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQnJlYWtw
b2ludHNGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGludCB0
eXBlID0gMDsgdHlwZSA8IERPTUJyZWFrcG9pbnRUeXBlc0NvdW50OyArK3R5cGUpIHsKICAgICAg
ICAgaWYgKG1hc2sgJiYgKDEgPDwgdHlwZSkpCi0gICAgICAgICAgICBtX2lkVG9CcmVha3BvaW50
LnJlbW92ZShjcmVhdGVCcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKSk7CisgICAgICAgICAgICBt
X2lkVG9CcmVha3BvaW50LnJlbW92ZShmb3JtYXRCcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKSk7
CiAgICAgfQogfQogCi1TdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnRJ
ZChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojpmb3Jt
YXRCcmVha3BvaW50SWQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKIHsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZygiZG9tOiIsIFN0cmluZzo6bnVtYmVyKG5vZGVJZCksICc6JywgU3RyaW5nOjpudW1i
ZXIodHlwZSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKFN0cmluZzo6bnVtYmVyKG5vZGVJZCks
ICc6JywgU3RyaW5nOjpudW1iZXIodHlwZSkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRTdHlsZXMobG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogc3R5bGVzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXgg
ODRjYTAyNy4uYTdkN2VmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBA
IC0xMjAsOSArMTIwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFkZElu
c3BlY3RlZE5vZGUobG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIHBlcmZvcm1TZWFyY2goY29u
c3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkp
OwogICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQnJl
YWtPbk5vZGVJbnNlcnRpb24oTm9kZSogbm9kZSwgTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiogZGV0YWlscyk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQnJlYWtPbk5vZGVS
ZW1vdmFsKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKTsK
LSAgICAgICAgYm9vbCBzaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQq
IGVsZW1lbnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKTsKKyAgICAgICAg
U3RyaW5nIGZpbmRCcmVha3BvaW50Rm9yTm9kZUluc2VydGlvbihOb2RlKiwgTm9kZSogcGFyZW50
LCBsb25nKiBub2RlSWQpOworICAgICAgICBTdHJpbmcgZmluZEJyZWFrcG9pbnRGb3JOb2RlUmVt
b3ZhbChOb2RlKiBub2RlLCBsb25nKiBub2RlSWQpOworICAgICAgICBTdHJpbmcgZmluZEJyZWFr
cG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24oRWxlbWVudCogZWxlbWVudCk7CiAKICAgICAg
ICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5z
cGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBub2RlSWQsIGJvb2wgYXV0aG9y
T25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKQEAgLTE3Nyw4ICsxNzcsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiBu
b2RlLCBsb25nIHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhO
b2RlKiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7CiAgICAgICAgIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludHNGb3JOb2RlKE5vZGUqIG5vZGUpOwotICAgICAgICBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9u
ZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24pOwotICAgICAgICBTdHJpbmcgY3JlYXRl
QnJlYWtwb2ludElkKGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICBTdHJpbmcgZmlu
ZFN1YnRyZWVNb2RpZmllZEJyZWFrcG9pbnQoTm9kZSogbm9kZSk7CisgICAgICAgIFN0cmluZyBm
b3JtYXRCcmVha3BvaW50SWQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CiAKICAgICAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVs
ZW1lbnQqIGVsZW1lbnQpOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWls
ZEFycmF5Rm9yQ1NTUnVsZXMoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1J1bGVMaXN0Kik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGVi
ZDAzZTYuLjFhOTk0YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCkBAIC02MCw5ICs2MCwxMCBAQCBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cgogSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
CiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAs
IG1fZnJvbnRlbmQoZnJvbnRlbmQpCisgICAgLCBtX3BhdXNlV2hlbkF0dGFjaGVkKGZhbHNlKQog
ICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9zY2hlZHVsZWRQYXVzZUV2ZW50
VHlwZSgwKQogICAgICwgbV9icmVha3BvaW50c0xvYWRlZChmYWxzZSkKLSAgICAsIG1famF2YVNj
cmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogewogfQogCkBAIC0xNDUsMTggKzE0NiwyMCBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBTdHJpbmcqIHNjcgogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNj
aGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSkKIHsKLSAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VT
Y2hlZHVsZWQpCisgICAgaWYgKG1fc2NoZWR1bGVkUGF1c2VFdmVudFR5cGUpCiAgICAgICAgIHJl
dHVybjsKKyAgICBtX3NjaGVkdWxlZFBhdXNlRXZlbnRUeXBlID0gdHlwZTsKICAgICBtX2JyZWFr
UHJvZ3JhbURldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYnJlYWtQ
cm9ncmFtRGV0YWlscy0+c2V0TnVtYmVyKCJldmVudFR5cGUiLCB0eXBlKTsKICAgICBtX2JyZWFr
UHJvZ3JhbURldGFpbHMtPnNldFZhbHVlKCJldmVudERhdGEiLCBkYXRhKTsKICAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQodHJ1ZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQo
KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVu
dChEZWJ1Z2dlckV2ZW50VHlwZSB0eXBlKQogewotICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZCkKKyAgICBpZiAobV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZSAhPSB0eXBlKQogICAg
ICAgICByZXR1cm47CisgICAgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZSA9IDA7CiAgICAgbV9i
cmVha1Byb2dyYW1EZXRhaWxzID0gMDsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpOwogfQpAQCAtMTY0LDcgKzE2Nyw2IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQog
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSgpCiB7CiAgICAgc2NoZWR1bGVQYXVz
ZU9uTmV4dFN0YXRlbWVudChKYXZhU2NyaXB0UGF1c2VFdmVudFR5cGUsIEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOwotICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gdHJ1ZTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQpAQCAtMjc4LDYgKzI4MCwx
MSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZwogCiAgICAgbV9zY3JpcHRJRFRvQ29udGVudC5z
ZXQoc291cmNlSUQsIGRhdGEpOwogCisgICAgaWYgKG1fcGF1c2VXaGVuQXR0YWNoZWQpIHsKKyAg
ICAgICAgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckF0dGFjaGVkRXZlbnRU
eXBlLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9wYXVzZVdoZW5BdHRh
Y2hlZCA9IGZhbHNlOworICAgIH0KKwogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTMxNSwxMiArMzIyLDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogICAgIG1fYnJlYWtQcm9ncmFt
RGV0YWlscy0+c2V0VmFsdWUoImNhbGxGcmFtZXMiLCBjdXJyZW50Q2FsbEZyYW1lcygpKTsKIAog
ICAgIG1fZnJvbnRlbmQtPnBhdXNlZFNjcmlwdChtX2JyZWFrUHJvZ3JhbURldGFpbHMpOwotICAg
IG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogewogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUg
PSAwOworICAgIG1fc2NoZWR1bGVkUGF1c2VFdmVudFR5cGUgPSAwOwogICAgIG1fYnJlYWtQcm9n
cmFtRGV0YWlscyA9IDA7CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDk1MDFhYzguLmVk
Njk0M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAg
LTQ3LDYgKzQ3LDcgQEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yVmFs
dWU7CiAKIGVudW0gRGVidWdnZXJFdmVudFR5cGUgeworICAgIERlYnVnZ2VyQXR0YWNoZWRFdmVu
dFR5cGUgPSAxLAogICAgIEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwKICAgICBKYXZhU2NyaXB0
QnJlYWtwb2ludEV2ZW50VHlwZSwKICAgICBOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5
cGUKQEAgLTU5LDYgKzYwLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgaXNEZWJ1Z2dl
ckFsd2F5c0VuYWJsZWQoKTsKIAorICAgIHZvaWQgc2V0UGF1c2VXaGVuQXR0YWNoZWQoKSB7IG1f
cGF1c2VXaGVuQXR0YWNoZWQgPSB0cnVlOyB9CisKICAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2lu
dHMoKTsKICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgc2V0QnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29s
IGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sKiBzdWNjZXNzLCB1bnNpZ25l
ZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpOwpAQCAtNjgsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3Jp
cHRTb3VyY2UpOwogCiAgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVn
Z2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEpOwotICAg
IHZvaWQgY2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIGNhbmNlbFBhdXNl
T25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUpOwogICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGRhdGEpOwogICAgIHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIHJlc3VtZSgpOwpAQCAtOTgsMTUg
KzEwMSwxNSBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0
b3JDb250cm9sbGVyOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOworICAgIGJv
b2wgbV9wYXVzZVdoZW5BdHRhY2hlZDsKICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRT
dGF0ZTsKKyAgICBpbnQgbV9zY2hlZHVsZWRQYXVzZUV2ZW50VHlwZTsKICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBtX3NvdXJjZUlEVG9VUkw7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9zY3JpcHRJRFRvQ29udGVudDsKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtw
b2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVk
PiBtX2JyZWFrcG9pbnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtwb2ludHNMb2FkZWQ7Ci0g
ICAgc3RhdGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtw
b2ludDsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrUHJvZ3JhbURldGFpbHM7
Ci0gICAgYm9vbCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwCmluZGV4IGNmNDE1MjcuLmQyN2I2YmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtODAsOSArODAsMTcgQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWMKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JDb250cm9sbGVyLT5tX2RvbUFnZW50LmdldCgpOwogICAgIGlmICghZG9tQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBldmVudERhdGE7Ci0g
ICAgaWYgKGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZUluc2VydGlvbihub2RlLCBwYXJlbnQs
ICZldmVudERhdGEpKQotICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZl
QnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOworCisgICAgbG9uZyBub2Rl
SWQgPSAwOworICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBkb21BZ2VudC0+ZmluZEJyZWFrcG9p
bnRGb3JOb2RlSW5zZXJ0aW9uKG5vZGUsIHBhcmVudCwgJm5vZGVJZCk7CisgICAgaWYgKGJyZWFr
cG9pbnRJZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXZl
bnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGluc3BlY3RvckNvbnRyb2xsZXItPmZp
bmRET01CcmVha3BvaW50KGJyZWFrcG9pbnRJZCkpOworICAgIGV2ZW50RGF0YS0+c2V0TnVtYmVy
KCJ0YXJnZXROb2RlSWQiLCBub2RlSWQpOworICAgIGV2ZW50RGF0YS0+c2V0Qm9vbGVhbigiaW5z
ZXJ0aW9uIiwgdHJ1ZSk7CisgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKE5hdGl2ZUJy
ZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRhKTsKICNlbmRpZgogfQogCkBAIC0x
MDEsOSArMTA5LDE3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3Zl
RE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjCiAgICAgSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQoKTsK
ICAgICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gZXZlbnREYXRhOwotICAgIGlmIChkb21BZ2VudC0+c2hvdWxkQnJlYWtPbk5v
ZGVSZW1vdmFsKG5vZGUsICZldmVudERhdGEpKQotICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOwor
CisgICAgbG9uZyBub2RlSWQgPSAwOworICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBkb21BZ2Vu
dC0+ZmluZEJyZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChub2RlLCAmbm9kZUlkKTsKKyAgICBpZiAo
YnJlYWtwb2ludElkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2ludElkIiwgaW5zcGVjdG9yQ29udHJvbGxl
ci0+ZmluZERPTUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKSk7CisgICAgZXZlbnREYXRhLT5zZXRO
dW1iZXIoInRhcmdldE5vZGVJZCIsIG5vZGVJZCk7CisgICAgZXZlbnREYXRhLT5zZXRCb29sZWFu
KCJpbnNlcnRpb24iLCBmYWxzZSk7CisgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKE5h
dGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRhKTsKICNlbmRpZgogfQog
CkBAIC0xMjIsOSArMTM4LDE0IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjCiAgICAgSW5zcGVj
dG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2VudC5n
ZXQoKTsKICAgICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gZXZlbnREYXRhOwotICAgIGlmIChkb21BZ2VudC0+c2hvdWxkQnJl
YWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50LCAmZXZlbnREYXRhKSkKLSAgICAgICAg
ZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50
VHlwZSwgZXZlbnREYXRhKTsKKworICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBkb21BZ2VudC0+
ZmluZEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24oZWxlbWVudCk7CisgICAgaWYg
KGJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGluc3BlY3RvckNvbnRyb2xs
ZXItPmZpbmRET01CcmVha3BvaW50KGJyZWFrcG9pbnRJZCkpOworICAgIGRlYnVnZ2VyQWdlbnQt
PmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0
YSk7CiAjZW5kaWYKIH0KIApAQCAtNDYyLDcgKzQ4Myw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2Rl
YnVnZ2VyQWdlbnQuZ2V0KCkpCi0gICAgICAgIGRlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlT25O
ZXh0U3RhdGVtZW50KCk7CisgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlT25OZXh0
U3RhdGVtZW50KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSk7CiAjZW5kaWYKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpz
CmluZGV4IDNkNTEwOTIuLjViMTkxYWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTg4LDYgKzg4LDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dHMgPSB7fTsKICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwogICAgICAg
ICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAgICAgICB0aGlzLl9kb2N1bWVudFNl
dCA9IGZhbHNlOwogICAgIH0sCiAKICAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNl
SUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQpAQCAtMTM0LDQ1ICsxMzUsNDggQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYg
KGZyb250ZW5kSWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFr
cG9pbnQodGhpcywgZnJvbnRlbmRJZCwgbm9kZUlkLCBkb21FdmVudFR5cGUpOwotICAgICAgICB0
aGlzLl9uYXRpdmVCcmVha3BvaW50c1tmcm9udGVuZElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAg
IHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50KHRoaXMsIG5v
ZGVJZCwgZG9tRXZlbnRUeXBlKTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludChm
cm9udGVuZElkLCBicmVha3BvaW50LCAhZGlzYWJsZWQpOwogICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycygiZG9tLWJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKLSAg
ICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWRpc2FibGVkOwogICAgICAgICByZXR1cm4gYnJl
YWtwb2ludDsKICAgICB9LAogCiAgICAgY3JlYXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGV2ZW50TmFtZSkKICAgICB7Ci0gICAgICAgIHZhciBmcm9udGVuZElkID0gZXZlbnRO
YW1lOworICAgICAgICB2YXIgZnJvbnRlbmRJZCA9ICJldmVudExpc3RlbmVyOiIgKyBldmVudE5h
bWU7CiAgICAgICAgIGlmIChmcm9udGVuZElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYklu
c3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludCh0aGlzLCBmcm9udGVuZElkLCBldmVudE5h
bWUpOwotICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1tmcm9udGVuZElkXSA9IGJyZWFr
cG9pbnQ7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExp
c3RlbmVyQnJlYWtwb2ludCh0aGlzLCBldmVudE5hbWUpOworICAgICAgICB0aGlzLl9zZXROYXRp
dmVCcmVha3BvaW50KGZyb250ZW5kSWQsIGJyZWFrcG9pbnQsIHRydWUpOwogICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZXZlbnQtbGlzdGVuZXItYnJlYWtwb2ludC1hZGRl
ZCIsIHsgYnJlYWtwb2ludDogYnJlYWtwb2ludCwgZXZlbnROYW1lOiBldmVudE5hbWUgfSk7Ci0g
ICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBicmVha3Bv
aW50OwogICAgIH0sCiAKICAgICBjcmVhdGVYSFJCcmVha3BvaW50OiBmdW5jdGlvbih1cmwsIGRp
c2FibGVkKQogICAgIHsKLSAgICAgICAgdmFyIGZyb250ZW5kSWQgPSB1cmw7CisgICAgICAgIHZh
ciBmcm9udGVuZElkID0gInhocjoiICsgdXJsOwogICAgICAgICBpZiAoZnJvbnRlbmRJZCBpbiB0
aGlzLl9uYXRpdmVCcmVha3BvaW50cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCh0aGlzLCBmcm9u
dGVuZElkLCB1cmwpOwotICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1tmcm9udGVuZElk
XSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rv
ci5YSFJCcmVha3BvaW50KHRoaXMsIHVybCk7CisgICAgICAgIHRoaXMuX3NldE5hdGl2ZUJyZWFr
cG9pbnQoZnJvbnRlbmRJZCwgYnJlYWtwb2ludCwgIWRpc2FibGVkKTsKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInhoci1icmVha3BvaW50LWFkZGVkIiwgYnJlYWtwb2lu
dCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9ICFkaXNhYmxlZAogICAgICAgICByZXR1
cm4gYnJlYWtwb2ludDsKICAgICB9LAogCisgICAgX3NldE5hdGl2ZUJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKGZyb250ZW5kSWQsIGJyZWFrcG9pbnQsIGVuYWJsZWQpCisgICAgeworICAgICAgICBicmVh
a3BvaW50Ll9mcm9udGVuZElkID0gZnJvbnRlbmRJZDsKKyAgICAgICAgdGhpcy5fbmF0aXZlQnJl
YWtwb2ludHNbZnJvbnRlbmRJZF0gPSBicmVha3BvaW50OworICAgICAgICB0aGlzLl9zZXROYXRp
dmVCcmVha3BvaW50RW5hYmxlZChicmVha3BvaW50LCBlbmFibGVkKTsKKyAgICB9LAorCiAgICAg
X3JlbW92ZU5hdGl2ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewogICAg
ICAgICBpZiAoYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJhY2tlbmQpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9y
ZW1vdmVOYXRpdmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAgICAgIHRo
aXMuX3JlbW92ZU5hdGl2ZUJyZWFrcG9pbnRGcm9tQmFja2VuZChicmVha3BvaW50KTsKICAgICAg
ICAgZGVsZXRlIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuX2Zyb250ZW5kSWRd
OwogICAgICAgICB0aGlzLl91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKICAg
ICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92ZWQiKTsKQEAg
LTE4Nyw3ICsxOTEsMTAgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgaWYgKGVuYWJsZWQpCiAgICAgICAgICAgICB0aGlzLl9zZXROYXRpdmVC
cmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7Cisg
ICAgICAgICAgICB0aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtw
b2ludCkKKyAgICAgICAgYnJlYWtwb2ludC5fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgIHRo
aXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOworICAgICAgICBicmVha3Bv
aW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKICAgICB9LAog
CiAgICAgX3NldE5hdGl2ZUJyZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CkBAIC0yMDIsMTkgKzIwOSwxOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgaWYgKGJhY2tlbmRCcmVha3BvaW50SWQgIT09ICIiKSB7
CiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5fYmFja2VuZElkID0gYmFja2VuZEJyZWFrcG9p
bnRJZDsKICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50c1tiYWNrZW5kQnJlYWtwb2lu
dElkXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVha3BvaW50
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKLSAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKICAgICAgICAgfQog
ICAgIH0sCiAKICAgICBfcmVtb3ZlTmF0aXZlQnJlYWtwb2ludEZyb21CYWNrZW5kOiBmdW5jdGlv
bihicmVha3BvaW50KQogICAgIHsKKyAgICAgICAgaWYgKCFicmVha3BvaW50Ll9iYWNrZW5kSWQp
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlTmF0
aXZlQnJlYWtwb2ludChicmVha3BvaW50Ll9iYWNrZW5kSWQpOwogICAgICAgICBkZWxldGUgdGhp
cy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5fYmFja2VuZElkXQogICAgICAgICBkZWxldGUgYnJl
YWtwb2ludC5fYmFja2VuZElkOwotICAgICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJl
YWtwb2ludHNJblNldHRpbmdzKCk7CiAgICAgfSwKIAogICAgIF91cGRhdGVOYXRpdmVCcmVha3Bv
aW50c0luU2V0dGluZ3M6IGZ1bmN0aW9uKCkKQEAgLTIzMCw2ICsyMzYsMTYgQEAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIGRlYnVnZ2VyUGF1c2Vk
OiBmdW5jdGlvbihkZXRhaWxzKQogICAgIHsKKyAgICAgICAgaWYgKGRldGFpbHMuZXZlbnRUeXBl
ID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLkRlYnVnZ2VyQXR0YWNoZWQpIHsK
KyAgICAgICAgICAgIC8vIERlYnVnZ2VyQXR0YWNoZWQgZXZlbnQgaXMgbmVlZGVkIHRvIGdpdmUg
dXMgYSBjaGFuY2UgdG8gc2V0IGJyZWFrcG9pbnRzCisgICAgICAgICAgICAvLyBvbiBiYWNrLWVu
ZCBiZWZvcmUgc2NyaXB0cyBzdGFydCBleGVjdXRpbmcuCisgICAgICAgICAgICB0aGlzLnJlc3Rv
cmVCcmVha3BvaW50cygpOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZXN1bWUoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJkZWJ1Z2dlci1wYXVzZWQiLCBkZXRhaWxzKTsKKwogICAgICAgICBp
ZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckV2ZW50VHlwZXMu
SmF2YVNjcmlwdFBhdXNlKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjMsMTUgKzI3OSwz
MSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHJl
c3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gdGhpcy5fcGVyc2lzdGVudEJyZWFrcG9pbnRzKCk7CisgICAgICAgIHZhciBkb21CcmVh
a3BvaW50cyA9IFtdOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PT0gIkV2
ZW50TGlzdGVuZXIiKQogICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQoYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLmV2ZW50TmFtZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSAiRE9NIikKKyAgICAgICAgICAgICAg
ICBkb21CcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnRzW2ldKQogICAgICAgICAgICAgZWxzZSBp
ZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PT0gIlhIUiIpCiAgICAgICAgICAgICAgICAgdGhpcy5j
cmVhdGVYSFJCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbi51cmwsICFicmVha3Bv
aW50c1tpXS5lbmFibGVkKTsKICAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRT
ZXQpCisgICAgICAgICAgICB0aGlzLl9yZXN0b3JlRE9NQnJlYWtwb2ludHMoZG9tQnJlYWtwb2lu
dHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9wZW5kaW5nRE9NQnJlYWtwb2lu
dHMgPSBkb21CcmVha3BvaW50czsKICAgICB9LAogCi0gICAgcmVzdG9yZURPTUJyZWFrcG9pbnRz
OiBmdW5jdGlvbigpCisgICAgZG9jdW1lbnRTZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLl9wZW5kaW5nRE9NQnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jl
c3RvcmVET01CcmVha3BvaW50cyh0aGlzLl9wZW5kaW5nRE9NQnJlYWtwb2ludHMpOworICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdET01CcmVha3BvaW50czsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFNldCA9IHRydWU7CisgICAgfSwKKworICAgIF9y
ZXN0b3JlRE9NQnJlYWtwb2ludHM6IGZ1bmN0aW9uKGJyZWFrcG9pbnRzKQogICAgIHsKICAgICAg
ICAgZnVuY3Rpb24gZGlkUHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKHBhdGgsIG5vZGVJZCkKICAg
ICAgICAgewpAQCAtMjg3LDEyICszMTksOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnRzID0gdGhpcy5fcGVyc2lzdGVudEJyZWFrcG9pbnRzKCk7CiAgICAgICAgIHZh
ciBwYXRoVG9Ob2RlSWQgPSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9IDA7CiAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlICE9PSAiRE9NIikKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIHZhciBwYXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0
aW9uLnBhdGg7CiAgICAgICAgICAgICBpZiAocGF0aCBpbiBwYXRoVG9Ob2RlSWQpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC00MjEsMTcgKzQ1MCwxNyBAQCBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKIAotV2ViSW5zcGVj
dG9yLk5hdGl2ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBmcm9udGVuZElkLCB0eXBl
KQorV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCB0eXBl
KQogewogICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOwotICAgIHRoaXMuX19mcm9udGVuZElk
ID0gZnJvbnRlbmRJZDsKICAgICB0aGlzLl9fdHlwZSA9IHR5cGU7CisgICAgdGhpcy5fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCiBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUg
PSB7CiAgICAgZ2V0IGVuYWJsZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJfYmFja2VuZElk
IiBpbiB0aGlzOworICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKICAgICB9LAogCiAgICAg
c2V0IGVuYWJsZWQoZW5hYmxlZCkKQEAgLTQ0NSwxMSArNDc0LDYgQEAgV2ViSW5zcGVjdG9yLk5h
dGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9vblJlbW92ZSgpOwog
ICAgIH0sCiAKLSAgICBnZXQgX2Zyb250ZW5kSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX19mcm9udGVuZElkOwotICAgIH0sCi0KICAgICBnZXQgX3R5cGUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX190eXBlOwpAQCAtNDY5LDkgKzQ5Myw5IEBAIFdlYkluc3BlY3Rvci5O
YXRpdmVCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFr
cG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBl
OwogCi1XZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGZyb250
ZW5kSWQsIG5vZGVJZCwgZG9tRXZlbnRUeXBlKQorV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQg
PSBmdW5jdGlvbihtYW5hZ2VyLCBub2RlSWQsIGRvbUV2ZW50VHlwZSkKIHsKLSAgICBXZWJJbnNw
ZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMsIG1hbmFnZXIsIGZyb250ZW5kSWQsICJE
T00iKTsKKyAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMsIG1hbmFn
ZXIsICJET00iKTsKICAgICB0aGlzLl9ub2RlSWQgPSBub2RlSWQ7CiAgICAgdGhpcy5fZG9tRXZl
bnRUeXBlID0gZG9tRXZlbnRUeXBlOwogICAgIHRoaXMuX2NvbmRpdGlvbiA9IHsgbm9kZUlkOiB0
aGlzLl9ub2RlSWQsIHR5cGU6IHRoaXMuX2RvbUV2ZW50VHlwZSB9OwpAQCAtNTM5LDkgKzU2Myw5
IEBAIFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVj
dG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5OYXRp
dmVCcmVha3BvaW50LnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRlbmRJZCwgZXZlbnROYW1lKQorV2ViSW5z
cGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZXZlbnRO
YW1lKQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFu
YWdlciwgZnJvbnRlbmRJZCwgIkV2ZW50TGlzdGVuZXIiKTsKKyAgICBXZWJJbnNwZWN0b3IuTmF0
aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMsIG1hbmFnZXIsICJFdmVudExpc3RlbmVyIik7CiAgICAg
dGhpcy5fZXZlbnROYW1lID0gZXZlbnROYW1lOwogICAgIHRoaXMuX2NvbmRpdGlvbiA9IHsgZXZl
bnROYW1lOiB0aGlzLl9ldmVudE5hbWUgfTsKICAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0aW9u
ID0gdGhpcy5fY29uZGl0aW9uOwpAQCAtNTg0LDkgKzYwOCw5IEBAIFdlYkluc3BlY3Rvci5FdmVu
dExpc3RlbmVyQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5FdmVudExp
c3RlbmVyQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2
ZUJyZWFrcG9pbnQucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCA9IGZ1
bmN0aW9uKG1hbmFnZXIsIGZyb250ZW5kSWQsIHVybCkKK1dlYkluc3BlY3Rvci5YSFJCcmVha3Bv
aW50ID0gZnVuY3Rpb24obWFuYWdlciwgdXJsKQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVC
cmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgZnJvbnRlbmRJZCwgIlhIUiIpOworICAgIFdl
Ykluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgIlhIUiIpOwog
ICAgIHRoaXMuX3VybCA9IHVybDsKICAgICB0aGlzLl9jb25kaXRpb24gPSB7IHVybDogdGhpcy5f
dXJsIH07CiAgICAgdGhpcy5fcGVyc2lzdGVudENvbmRpdGlvbiA9IHRoaXMuX2NvbmRpdGlvbjsK
QEAgLTYyNCw5ICs2NDgsMTAgQEAgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBl
ID0gewogV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LnByb3RvdHlwZTsKIAogV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyRXZlbnRUeXBlcyA9IHsKLSAgICBKYXZhU2NyaXB0UGF1c2U6IDAsCi0gICAgSmF2YVNj
cmlwdEJyZWFrcG9pbnQ6IDEsCi0gICAgTmF0aXZlQnJlYWtwb2ludDogMgorICAgIERlYnVnZ2Vy
QXR0YWNoZWQ6IDEsCisgICAgSmF2YVNjcmlwdFBhdXNlOiAyLAorICAgIEphdmFTY3JpcHRCcmVh
a3BvaW50OiAzLAorICAgIE5hdGl2ZUJyZWFrcG9pbnQ6IDQKIH07CiAKIFdlYkluc3BlY3Rvci5E
T01CcmVha3BvaW50VHlwZXMgPSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCmluZGV4IDQ3MTk0ZGEuLmZiMzg4YzEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQ
YW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGVi
YXJQYW5lLmpzCkBAIC0zNDMsNiArMzQzLDggQEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGV2ZW50TmFt
ZSA9IGV2ZW50LmRhdGEuZXZlbnROYW1lOwogCiAgICAgICAgIHZhciBicmVha3BvaW50SXRlbSA9
IHRoaXMuX2JyZWFrcG9pbnRJdGVtc1tldmVudE5hbWVdOworICAgICAgICBpZiAoIWJyZWFrcG9p
bnRJdGVtKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVha3BvaW50SXRlbS5icmVh
a3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVy
KCJoaXQtc3RhdGUtY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRIaXRTdGF0ZUNoYW5nZWQuYmlu
ZCh0aGlzLCBicmVha3BvaW50SXRlbSkpOwogICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlz
dGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZC5iaW5kKHRoaXMsIGJyZWFr
cG9pbnRJdGVtKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9N
QWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXgg
MzdiZjU0OS4uMTk3NmMxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cwpAQCAtMzc5LDcgKzM3OSw3IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICB0aGlzLmRvY3VtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01Eb2N1bWVu
dCh0aGlzLCB0aGlzLl93aW5kb3csIHBheWxvYWQpOwogICAgICAgICAgICAgdGhpcy5faWRUb0RP
TU5vZGVbcGF5bG9hZC5pZF0gPSB0aGlzLmRvY3VtZW50OwogICAgICAgICAgICAgdGhpcy5fYmlu
ZE5vZGVzKHRoaXMuZG9jdW1lbnQuY2hpbGRyZW4pOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVET01CcmVha3BvaW50cygpOworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmRvY3VtZW50U2V0KCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgdGhpcy5kb2N1bWVudCA9IG51bGw7CiAgICAgICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZWxlbWVudHMuc2V0RG9jdW1lbnQodGhpcy5kb2N1bWVudCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCAzMmM3ZjIxLi4zOGRh
NmQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVs
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAg
LTE3NSw2ICsxNzUsMTEgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkK
IAogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlz
RW5hYmxlZDsKIAorICAgIGZ1bmN0aW9uIGRlYnVnZ2VyUGF1c2VkKGV2ZW50KQorICAgIHsKKyAg
ICAgICAgdGhpcy5fZGVidWdnZXJQYXVzZWQoZXZlbnQuZGF0YS5jYWxsRnJhbWVzKTsKKyAgICB9
CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImRl
YnVnZ2VyLXBhdXNlZCIsIGRlYnVnZ2VyUGF1c2VkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3Iu
YnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRo
aXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CiAKICAgICB0aGlzLnJlc2V0KCk7CkBAIC0zMjMs
NyArMzI4LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICAgIGNvbW1pdEVkaXRpbmdDYWxs
YmFjayhuZXdCb2R5T3JFcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsRnJh
bWVzICYmIGNhbGxGcmFtZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVn
Z2VyUGF1c2VkKGNhbGxGcmFtZXMpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z2dl
clBhdXNlZChjYWxsRnJhbWVzKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmxvZyhuZXdCb2R5T3JFcnJvck1lc3NhZ2UsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlTGV2ZWwuV2FybmluZyk7CkBAIC0zNzYsNyArMzgxLDcgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdl
dChjYWxsRnJhbWUud29ybGRJZCkuZXZhbHVhdGVJbkNhbGxGcmFtZShjYWxsRnJhbWUuaWQsIGNv
ZGUsIG9iamVjdEdyb3VwLCBldmFsQ2FsbGJhY2spOwogICAgIH0sCiAKLSAgICBkZWJ1Z2dlclBh
dXNlZDogZnVuY3Rpb24oY2FsbEZyYW1lcykKKyAgICBfZGVidWdnZXJQYXVzZWQ6IGZ1bmN0aW9u
KGNhbGxGcmFtZXMpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFn
ZXIucmVtb3ZlT25lVGltZUJyZWFrcG9pbnQoKTsKICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1
ZTsKQEAgLTM5MCw2ICszOTUsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlw
ZSA9IHsKIAogICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsID0gdGhpczsKICAgICAg
ICAgd2luZG93LmZvY3VzKCk7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1Rv
RnJvbnQoKTsKICAgICB9LAogCiAgICAgZGVidWdnZXJSZXN1bWVkOiBmdW5jdGlvbigpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCAzM2IzNzBhLi44MzljN2I2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTEzMTAsNiAr
MTMxMCw3IEBAIFdlYkluc3BlY3Rvci5hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGZ1bmN0aW9u
KCkKIFdlYkluc3BlY3Rvci5kZWJ1Z2dlcldhc0VuYWJsZWQgPSBmdW5jdGlvbigpCiB7CiAgICAg
dGhpcy5wYW5lbHMuc2NyaXB0cy5kZWJ1Z2dlcldhc0VuYWJsZWQoKTsKKyAgICB0aGlzLmJyZWFr
cG9pbnRNYW5hZ2VyLnJlc3RvcmVCcmVha3BvaW50cygpOwogfQogCiBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJXYXNEaXNhYmxlZCA9IGZ1bmN0aW9uKCkKQEAgLTEzNDQsOSArMTM0NSw3IEBAIFdlYklu
c3BlY3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBz
b3VyY2UsIHN0YXJ0aW5nTGluCiAKIFdlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQgPSBmdW5jdGlv
bihkZXRhaWxzKQogewotICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoZGV0
YWlscy5jYWxsRnJhbWVzKTsKICAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLmRlYnVnZ2VyUGF1
c2VkKGRldGFpbHMpOwotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsK
IH0KIAogV2ViSW5zcGVjdG9yLnJlc3VtZWRTY3JpcHQgPSBmdW5jdGlvbigpCkBAIC0xMzcwLDgg
KzEzNjksNiBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLmNv
bnNvbGUuY2xlYXJNZXNzYWdlcygpOwogICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeUlu
c3BlY3RvclJlc2V0KCk7Ci0KLSAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVCcmVh
a3BvaW50cygpOwogfQogCiBXZWJJbnNwZWN0b3IucmVzZXRQcm9maWxlc1BhbmVsID0gZnVuY3Rp
b24oKQpAQCAtMTM5MCwxMCArMTM4Nyw2IEBAIFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFu
Z2VkID0gZnVuY3Rpb24odXJsKQogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRV
UkxDaGFuZ2VkKHVybCk7CiAgICAgdGhpcy5zZXR0aW5ncy5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVy
bCk7CiAgICAgdGhpcy5leHRlbnNpb25TZXJ2ZXIubm90aWZ5SW5zcGVjdGVkVVJMQ2hhbmdlZCgp
OwotICAgIGlmICghdGhpcy5fYnJlYWtwb2ludHNSZXN0b3JlZCkgewotICAgICAgICB0aGlzLmJy
ZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVCcmVha3BvaW50cygpOwotICAgICAgICB0aGlzLl9icmVh
a3BvaW50c1Jlc3RvcmVkID0gdHJ1ZTsKLSAgICB9CiB9CiAKIFdlYkluc3BlY3Rvci5kaWRDb21t
aXRMb2FkID0gZnVuY3Rpb24oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75912</attachid>
            <date>2010-12-08 08:52:26 -0800</date>
            <delta_ts>2010-12-13 09:58:24 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45576</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjlhMTA2Mi4uMTAwZjNkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMC0xMi0wOCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwdXNoIHBlcnNpc3RlbnQgYnJl
YWtwb2ludHMgaW50byBiYWNrZW5kIHN0YXRlIGNvb2tpZSBzbyB0aGV5IGhpdCBvbiBuYXZpZ2F0
aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4
NTgKKworICAgICAgICBCcmVha3BvaW50TWFuYWdlciBwdXNoZXMgYWxsIHBlcnNpc3RlbnQgYnJl
YWtwb2ludHMgdG8gYmFja2VuZCB3aGVuIGxvYWRlZC4KKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlciByZXN0b3JlcyBzdGlja3kgYnJlYWtwb2ludHMgZnJvbSBjb29raWUgb24gbmF2aWdhdGlv
bi4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2ZUJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZmluZFhIUkJyZWFrcG9p
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnNldE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdGF0ZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1h
bmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkRPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX3JlbW92ZUxpc3RFbGVt
ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3Rv
dHlwZS5fcHJvamVjdENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50c1NpZGViYXJQYW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExp
c3RlbmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBh
bmUucHJvdG90eXBlLl9wcm9qZWN0Q2hhbmdlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFu
ZWwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
LnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZS5pbnNwZWN0ZWRVUkxDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUuZ2V0IHByb2plY3RJ
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlLmZpbmRTZXR0aW5n
Rm9yQWxsUHJvamVjdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlw
ZS5fZm9ybWF0UHJvamVjdEtleSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlRE9NQnJlYWtwb2ludHNTaWRl
YmFyUGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlWEhSQnJlYWtwb2ludHNTaWRl
YmFyUGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc3RpY2t5QnJlYWtwb2ludFJlc3RvcmVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisKIDIwMTAtMTItMDggIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDY3YTVjZGUuLjkxODE3M2EgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmlkbApAQCAtNjksNiArNjksNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtu
b3RpZnldIHZvaWQgcHJvZmlsZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQg
cHJvZmlsZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHJlc3RvcmVkQnJl
YWtwb2ludChvdXQgU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IGludCBsaW5l
LCBvdXQgYm9vbGVhbiBlbmFibGVkLCBvdXQgU3RyaW5nIGNvbmRpdGlvbik7CisgICAgICAgIFtu
b3RpZnldIHZvaWQgc3RpY2t5QnJlYWtwb2ludFJlc3RvcmVkKG91dCBTdHJpbmcgc3RpY2t5SWQs
IG91dCBTdHJpbmcgYnJlYWtwb2ludElkKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCByZXN1bWVk
U2NyaXB0KCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgc2V0UmVjb3JkaW5nUHJvZmlsZShvdXQg
Ym9vbGVhbiBpc1Byb2ZpbGluZyk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgdXBkYXRlUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZShvdXQgbG9uZyBzdGF0ZSk7CkBAIC0xNDUsNiArMTQ2LDcgQEAgbW9k
dWxlIGNvcmUgewogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGVkaXRTY3JpcHRTb3Vy
Y2UoaW4gU3RyaW5nIHNvdXJjZUlELCBpbiBTdHJpbmcgbmV3Q29udGVudCwgb3V0IGJvb2xlYW4g
c3VjY2Vzcywgb3V0IFN0cmluZyByZXN1bHQsIG91dCBWYWx1ZSBuZXdDYWxsRnJhbWVzKTsKICAg
ICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBnZXRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNv
dXJjZUlELCBvdXQgU3RyaW5nIHNjcmlwdFNvdXJjZSk7CiAKKyAgICAgICAgW2RvbWFpbj1JbnNw
ZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoaW4gT2JqZWN0IGJyZWFrcG9pbnRzKTsK
ICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0TmF0aXZlQnJlYWtwb2ludChpbiBP
YmplY3QgYnJlYWtwb2ludCwgb3V0IFN0cmluZyBicmVha3BvaW50SWQpOwogICAgICAgICBbZG9t
YWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVOYXRpdmVCcmVha3BvaW50KGluIFN0cmluZyBicmVh
a3BvaW50SWQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDZlYWY4OWUuLmQ2NzgzNDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC0xNTMsNiArMTUzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVj
dG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24oZmFsc2UpCiAgICAgLCBtX2xhc3RCcmVha3BvaW50SWQoMCkKKyAgICAsIG1fc3RpY2t5QnJl
YWtwb2ludHNSZXN0b3JlZChmYWxzZSkKICAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjpjcmVhdGUodGhpcykpCiAjZW5kaWYKIHsKQEAgLTU2NCw3ICs1NjUsNiBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgYm9v
bCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBkZWJ1Z2dlckVuYWJsZWQoKTsKICAgICBkaXNhYmxlRGVi
dWdnZXIoKTsKICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gZGVidWdnZXJXYXNFbmFi
bGVkOwotICAgIGNsZWFyTmF0aXZlQnJlYWtwb2ludHMoKTsKICNlbmRpZgogICAgIHNldFNlYXJj
aGluZ0Zvck5vZGUoZmFsc2UpOwogICAgIHVuYmluZEFsbFJlc291cmNlcygpOwpAQCAtNzIxLDEw
ICs3MjEsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fY291bnRzLmNsZWFyKCk7CiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKKyAg
ICAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7Ci0KLSAgICAgICAgY2xlYXJOYXRpdmVCcmVha3Bv
aW50cygpOworICAgICAgICAgICAgcmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCk7CisgICAgICAg
IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0Mp
CkBAIC0xMzg2LDYgKzEzODYsNDMgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWUo
KQogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnJlc3VtZSgpOwogfQogCit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldFN0aWNreUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50cykKK3sKKyAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVjdG9yU3Rh
dGU6OnN0aWNreUJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7CisgICAgaWYgKCFtX3N0aWNreUJy
ZWFrcG9pbnRzUmVzdG9yZWQpIHsKKyAgICAgICAgcmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCk7
CisgICAgICAgIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3JlZCA9IHRydWU7CisgICAgfQorfQor
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpCit7
CisgICAgbV9uYXRpdmVCcmVha3BvaW50cy5jbGVhcigpOworICAgIG1fZXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9YSFJCcmVha3BvaW50cy5jbGVhcigpOworCisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMgPSBtX3N0YXRlLT5nZXRPYmplY3Qo
SW5zcGVjdG9yU3RhdGU6OnN0aWNreUJyZWFrcG9pbnRzKTsKKyAgICBLVVJMIHVybCA9IG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsKKyAgICB1cmwucmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvamVj
dEJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHMtPmdldE9iamVjdCh1cmwpOworICAgIGlmICghcHJv
amVjdEJyZWFrcG9pbnRzKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChJbnNwZWN0b3JPYmpl
Y3Q6Oml0ZXJhdG9yIGl0ID0gcHJvamVjdEJyZWFrcG9pbnRzLT5iZWdpbigpOyBpdCAhPSBwcm9q
ZWN0QnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJyZWFrcG9pbnQgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgICAgICBpZiAo
IWJyZWFrcG9pbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU3RyaW5nIHR5cGU7
CisgICAgICAgIGlmICghYnJlYWtwb2ludC0+Z2V0U3RyaW5nKCJ0eXBlIiwgJnR5cGUpIHx8IHR5
cGUgPT0gZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYm9vbCBlbmFibGVkOworICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmdldEJvb2xlYW4o
ImVuYWJsZWQiLCAmZW5hYmxlZCkgfHwgIWVuYWJsZWQpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgU3RyaW5nIGJyZWFrcG9pbnRJZDsKKyAgICAgICAgc2V0TmF0aXZlQnJlYWtwb2lu
dChpdC0+c2Vjb25kLT5hc09iamVjdCgpLCAmYnJlYWtwb2ludElkKTsKKyAgICAgICAgbV9mcm9u
dGVuZC0+c3RpY2t5QnJlYWtwb2ludFJlc3RvcmVkKGl0LT5maXJzdCwgYnJlYWtwb2ludElkKTsK
KyAgICB9Cit9CisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TmF0aXZlQnJlYWtwb2lu
dChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCwgU3RyaW5nKiBicmVha3Bv
aW50SWQpCiB7CiAgICAgKmJyZWFrcG9pbnRJZCA9ICIiOwpAQCAtMTQxNCwxNSArMTQ1MSwxMyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcAogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBkb21OYXRp
dmVCcmVha3BvaW50VHlwZSkgewogICAgICAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRvdWJsZSBub2RlSWROdW1iZXI7Ci0gICAgICAgIGlmICghY29u
ZGl0aW9uLT5nZXROdW1iZXIoIm5vZGVJZCIsICZub2RlSWROdW1iZXIpKQorICAgICAgICBTdHJp
bmcgcGF0aDsKKyAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygicGF0aCIsICZwYXRo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZG91YmxlIGRvbUJyZWFrcG9pbnRUeXBl
TnVtYmVyOwotICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0TnVtYmVyKCJ0eXBlIiwgJmRvbUJy
ZWFrcG9pbnRUeXBlTnVtYmVyKSkKKyAgICAgICAgZG91YmxlIGRvbUV2ZW50VHlwZTsKKyAgICAg
ICAgaWYgKCFjb25kaXRpb24tPmdldE51bWJlcigiZG9tRXZlbnRUeXBlIiwgJmRvbUV2ZW50VHlw
ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvbmcgbm9kZUlkID0gKGxvbmcpIG5v
ZGVJZE51bWJlcjsKLSAgICAgICAgbG9uZyBkb21CcmVha3BvaW50VHlwZSA9IChsb25nKSBkb21C
cmVha3BvaW50VHlwZU51bWJlcjsKLSAgICAgICAgKmJyZWFrcG9pbnRJZCA9IG1fZG9tQWdlbnQt
PnNldERPTUJyZWFrcG9pbnQobm9kZUlkLCBkb21CcmVha3BvaW50VHlwZSk7CisgICAgICAgICpi
cmVha3BvaW50SWQgPSBtX2RvbUFnZW50LT5zZXRET01CcmVha3BvaW50KHBhdGgsIChsb25nKSBk
b21FdmVudFR5cGUpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnRJZC0+aXNFbXB0eSgpKQogICAg
ICAgICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgdHlwZSk7CiAg
ICAgfQpAQCAtMTQ1NCwxNCArMTQ4OSw2IEBAIFN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpm
aW5kWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKICAgICB9CiAgICAgcmV0dXJuICIi
OwogfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyTmF0aXZlQnJlYWtwb2ludHMo
KQotewotICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuY2xlYXIoKTsKLSAgICBtX2V2ZW50TGlzdGVu
ZXJCcmVha3BvaW50cy5jbGVhcigpOwotICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKLSAg
ICBtX2xhc3RCcmVha3BvaW50SWQgPSAwOwotfQogI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBzY3JpcHQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
MDg2NWEzYS4uODc5NjcxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMjU1LDYgKzI1NSw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KiBkZWJ1Z2dlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50LmdldCgpOyB9
CiAgICAgdm9pZCByZXN1bWUoKTsKIAorICAgIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHNldE5hdGl2
ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmlu
ZyogYnJlYWtwb2ludElkKTsKICAgICB2b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWQpOwogI2VuZGlmCkBAIC0zMDUsMTAgKzMwNiwxMCBAQCBwcml2
YXRlOgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHZvaWQgdG9nZ2xlUmVj
b3JkQnV0dG9uKGJvb2wpOwogICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9v
bCBhbHdheXMpOworICAgIHZvaWQgcmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCk7CiAKICAgICBT
dHJpbmcgZmluZEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1l
KTsKICAgICBTdHJpbmcgZmluZFhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAg
IHZvaWQgY2xlYXJOYXRpdmVCcmVha3BvaW50cygpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQogICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKTsKQEAgLTM4
OSw4ICszOTAsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fbmF0
aXZlQnJlYWtwb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnRzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fWEhSQnJlYWtwb2ludHM7Ci0K
ICAgICB1bnNpZ25lZCBpbnQgbV9sYXN0QnJlYWtwb2ludElkOworICAgIGJvb2wgbV9zdGlja3lC
cmVha3BvaW50c1Jlc3RvcmVkOwogCiAgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+
IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IDI5NzE1YjQuLmIwYzQ3NDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTc2MCwxMiArNzYwLDE2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNlYXJjaENhbmNlbGVkKCkKICAgICBtX3NlYXJjaFJlc3VsdHMuY2xlYXIoKTsKIH0KIAot
U3RyaW5nIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBs
b25nIHR5cGUpCitTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIHR5cGUpCiB7Ci0gICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJ
ZChub2RlSWQpOworICAgIE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKTsKICAgICBpZiAo
IW5vZGUpCiAgICAgICAgIHJldHVybiAiIjsKIAorICAgIGxvbmcgbm9kZUlkID0gcHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChub2RlKTsKKyAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAgcmV0dXJuICIi
OworCiAgICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IGNyZWF0ZUJyZWFrcG9pbnRJZChub2RlSWQs
IHR5cGUpOwogICAgIGlmIChtX2lkVG9CcmVha3BvaW50LmNvbnRhaW5zKGJyZWFrcG9pbnRJZCkp
CiAgICAgICAgIHJldHVybiAiIjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmlu
ZGV4IGVkZDQwNWIuLjNkOTA0ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aApAQCAtMTQzLDcgKzE0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJp
bmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdDsKIAotICAgICAg
ICBTdHJpbmcgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKKyAgICAg
ICAgU3RyaW5nIHNldERPTUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIHR5cGUp
OwogICAgICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50SWQpOwogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApp
bmRleCBhYjkwMGU3Li4xMzM0MTRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdGF0ZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3Bw
CkBAIC00OSw2ICs0OSw3IEBAIEluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZShJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKICAgICByZWdpc3RlckxvbmcocGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSwgMCwgInBhdXNlT25FeGNlcHRpb25zU3RhdGUiLCAoY29uc3QgY2hhciopMCk7CiAgICAgcmVn
aXN0ZXJCb29sZWFuKGNvbnNvbGVNZXNzYWdlc0VuYWJsZWQsIGZhbHNlLCAiY29uc29sZU1lc3Nh
Z2VzRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKICAgICByZWdpc3RlckJvb2xlYW4odXNlcklu
aXRpYXRlZFByb2ZpbGluZywgZmFsc2UsICJ1c2VySW5pdGlhdGVkUHJvZmlsaW5nIiwgKGNvbnN0
IGNoYXIqKTApOworICAgIHJlZ2lzdGVyT2JqZWN0KHN0aWNreUJyZWFrcG9pbnRzLCAoY29uc3Qg
Y2hhciopMCwgKGNvbnN0IGNoYXIqKTApOwogfQogCiB2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0
b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb24pCkBAIC0xNTIsNiArMTUz
LDI0IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBp
ZCkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJ
bnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgaWQpCit7CisgICAg
UHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7CisgICAgQVNT
RVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICByZXR1cm4gaS0+c2Vjb25kLm1fdmFs
dWUtPmFzT2JqZWN0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnNldE9iamVjdChJbnNw
ZWN0b3JQcm9wZXJ0eUlkIGlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCit7
CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Cisg
ICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBQcm9wZXJ0eSYgcHJvcGVy
dHkgPSBpLT5zZWNvbmQ7CisgICAgcHJvcGVydHkubV92YWx1ZSA9IHZhbHVlOworICAgIGlmIChw
cm9wZXJ0eS5tX3ByZWZlcmVuY2VOYW1lLmxlbmd0aCgpKQorICAgICAgICBtX2NsaWVudC0+c3Rv
cmVTZXR0aW5nKHByb3BlcnR5Lm1fcHJlZmVyZW5jZU5hbWUsIHZhbHVlLT50b0pTT05TdHJpbmco
KSk7CisgICAgdXBkYXRlQ29va2llKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lz
dGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNv
bnN0IFN0cmluZyYgZnJvbnRlbmRBbGlhcywgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkK
IHsKICAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSwgZnJvbnRlbmRBbGlhcywgcHJlZmVyZW5j
ZU5hbWUpKTsKQEAgLTE2Nyw2ICsxODYsMTEgQEAgdm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0
ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSwgY28KICAg
ICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBmcm9udGVuZEFsaWFzLCBwcmVmZXJl
bmNlTmFtZSkpOwogfQogCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZWdpc3Rlck9iamVjdChJbnNw
ZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRBbGlhcywg
Y29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuc2V0KHBy
b3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZnJv
bnRlbmRBbGlhcywgcHJlZmVyZW5jZU5hbWUpKTsKK30KKwogSW5zcGVjdG9yU3RhdGU6OlByb3Bl
cnR5IEluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eTo6Y3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYg
cHJlZmVyZW5jZU5hbWUpCiB7CiAgICAgUHJvcGVydHkgcHJvcGVydHk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3RhdGUuaAppbmRleCBhYTJmMWVjLi40ZjU3ZGE3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgICAgICBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlLAogICAgICAgICBjb25zb2xlTWVzc2FnZXNFbmFibGVkLAogICAgICAgICB1
c2VySW5pdGlhdGVkUHJvZmlsaW5nLAorICAgICAgICBzdGlja3lCcmVha3BvaW50cywKICAgICAg
ICAgbGFzdFByb3BlcnR5SWQKICAgICB9OwogCkBAIC02OCwxMCArNjksMTIgQEAgcHVibGljOgog
ICAgIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQpOwogICAg
IFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkKTsKICAgICBs
b25nIGdldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkKTsKKyAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgaWQpOwog
CiAgICAgdm9pZCBzZXRCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgYm9v
bCB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVh
dGUodmFsdWUpLCB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOyB9CiAgICAgdm9pZCBzZXRTdHJp
bmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7
IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSwgdmFs
dWUpOyB9CiAgICAgdm9pZCBzZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwg
bG9uZyB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpj
cmVhdGUoKGRvdWJsZSl2YWx1ZSksIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7IH0KKyAgICB2b2lk
IHNldE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDb29raWUo
KTsKQEAgLTg5LDYgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyQm9vbGVhbihJ
bnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNvbnN0IFN0cmluZyYg
ZnJvbnRlbmRBbGlhcywgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSk7CiAgICAgdm9pZCBy
ZWdpc3RlclN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRBbGlhcywgY29uc3QgU3RyaW5nJiBwcmVm
ZXJlbmNlTmFtZSk7CiAgICAgdm9pZCByZWdpc3RlckxvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBw
cm9wZXJ0eUlkLCBsb25nIHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNvbnN0
IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOworICAgIHZvaWQgcmVnaXN0ZXJPYmplY3QoSW5zcGVj
dG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNv
bnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOwogCiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2Ns
aWVudDsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtw
b2ludE1hbmFnZXIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1h
bmFnZXIuanMKaW5kZXggNjFiMmJjOC4uMzZjZjhhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwpAQCAtMzAsMTI0ICszMCwxNjUgQEAK
IAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyID0gZnVuY3Rpb24oKQogewotICAgIHRo
aXMuX25hdGl2ZUJyZWFrcG9pbnRzID0ge307Ci0gICAgdGhpcy5fYmFja2VuZElkVG9CcmVha3Bv
aW50ID0ge307CisgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNGb3JBbGxQcm9qZWN0cyA9IHt9
OworICAgIHRoaXMuX2xhc3RTdGlja3lJZCA9IDA7CisgICAgdmFyIGJyZWFrcG9pbnRzRm9yQWxs
UHJvamVjdHMgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZmluZFNldHRpbmdGb3JBbGxQcm9qZWN0
cygibmF0aXZlQnJlYWtwb2ludHMiKTsKKyAgICBmb3IgKHZhciBwcm9qZWN0SWQgaW4gYnJlYWtw
b2ludHNGb3JBbGxQcm9qZWN0cykgeworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBicmVha3Bv
aW50c0ZvckFsbFByb2plY3RzW3Byb2plY3RJZF07CisgICAgICAgIHZhciBzdGlja3lCcmVha3Bv
aW50cyA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc3RpY2t5SWQgPSArK3RoaXMuX2xhc3RTdGlja3lJ
ZDsKKyAgICAgICAgICAgIHN0aWNreUJyZWFrcG9pbnRzW3N0aWNreUlkXSA9IGJyZWFrcG9pbnRz
W2ldOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzRm9yQWxsUHJv
amVjdHNbcHJvamVjdElkXSA9IHN0aWNreUJyZWFrcG9pbnRzOworICAgIH0KKyAgICBJbnNwZWN0
b3JCYWNrZW5kLnNldFN0aWNreUJyZWFrcG9pbnRzKHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzRm9y
QWxsUHJvamVjdHMpOworCisgICAgdGhpcy5fYmFja2VuZEJyZWFrcG9pbnRzID0ge307CisgICAg
dGhpcy5fYnJlYWtwb2ludFZpZXdzID0ge307CiAKKyAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZ3MuRXZlbnRzLlByb2plY3RDaGFu
Z2VkLCB0aGlzLl9wcm9qZWN0Q2hhbmdlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcigibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgdGhpcy5f
bmF0aXZlQnJlYWtwb2ludEhpdCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuYWRkRXZlbnRMaXN0ZW5lcigiZGVidWdnZXItcmVzdW1lZCIsIHRoaXMuX2RlYnVnZ2VyUmVz
dW1lZCwgdGhpcyk7CiB9CiAKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMg
PSB7CisgICAgRE9NQnJlYWtwb2ludEFkZGVkOiAiZG9tLWJyZWFrcG9pbnQtYWRkZWQiLAorICAg
IEV2ZW50TGlzdGVuZXJCcmVha3BvaW50QWRkZWQ6ICJldmVudC1saXN0ZW5lci1icmVha3BvaW50
LWFkZGVkIiwKKyAgICBYSFJCcmVha3BvaW50QWRkZWQ6ICJ4aHItYnJlYWtwb2ludC1hZGRlZCIs
CisgICAgUHJvamVjdENoYW5nZWQ6ICJwcm9qZWN0LWNoYW5nZWQiCit9CisKIFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgY3JlYXRlRE9NQnJlYWtwb2lu
dDogZnVuY3Rpb24obm9kZUlkLCBkb21FdmVudFR5cGUsIGRpc2FibGVkKQogICAgIHsKLSAgICAg
ICAgdmFyIGZyb250ZW5kSWQgPSAiZG9tOiIgKyBub2RlSWQgKyAiOiIgKyBkb21FdmVudFR5cGU7
Ci0gICAgICAgIGlmIChmcm9udGVuZElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQorICAg
ICAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQobm9kZUlkKTsK
KyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50KHRoaXMsIGZyb250ZW5k
SWQsIG5vZGVJZCwgZG9tRXZlbnRUeXBlKTsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2lu
dHNbZnJvbnRlbmRJZF0gPSBicmVha3BvaW50OwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycygiZG9tLWJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKLSAgICAgICAg
YnJlYWtwb2ludC5lbmFibGVkID0gIWRpc2FibGVkOwotICAgICAgICByZXR1cm4gYnJlYWtwb2lu
dDsKKyAgICAgICAgdmFyIHBhdGggPSBub2RlLnBhdGgoKTsKKyAgICAgICAgdmFyIHN0aWNreUlk
ID0gdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludCgiRE9NIiwgIWRpc2FibGVkLCB7IHBhdGg6IHBh
dGgsIGRvbUV2ZW50VHlwZTogZG9tRXZlbnRUeXBlIH0pOworICAgICAgICByZXR1cm4gdGhpcy5f
Y3JlYXRlRE9NQnJlYWtwb2ludFZpZXcoc3RpY2t5SWQsIHRoaXMuX3N0aWNreUJyZWFrcG9pbnRz
W3N0aWNreUlkXSwgbm9kZSk7CiAgICAgfSwKIAogICAgIGNyZWF0ZUV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50OiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewotICAgICAgICB2YXIgZnJvbnRlbmRJ
ZCA9IGV2ZW50TmFtZTsKLSAgICAgICAgaWYgKGZyb250ZW5kSWQgaW4gdGhpcy5fbmF0aXZlQnJl
YWtwb2ludHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KHRoaXMsIGZyb250ZW5k
SWQsIGV2ZW50TmFtZSk7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2Zyb250ZW5k
SWRdID0gYnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
ImV2ZW50LWxpc3RlbmVyLWJyZWFrcG9pbnQtYWRkZWQiLCB7IGJyZWFrcG9pbnQ6IGJyZWFrcG9p
bnQsIGV2ZW50TmFtZTogZXZlbnROYW1lIH0pOwotICAgICAgICBicmVha3BvaW50LmVuYWJsZWQg
PSB0cnVlOwotICAgICAgICByZXR1cm4gYnJlYWtwb2ludDsKKyAgICAgICAgdmFyIHN0aWNreUlk
ID0gdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludCgiRXZlbnRMaXN0ZW5lciIsIHRydWUsIHsgZXZl
bnROYW1lOiBldmVudE5hbWUgfSk7CisgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVFdmVudExp
c3RlbmVyQnJlYWtwb2ludFZpZXcoc3RpY2t5SWQsIHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzW3N0
aWNreUlkXSk7CiAgICAgfSwKIAogICAgIGNyZWF0ZVhIUkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVy
bCwgZGlzYWJsZWQpCiAgICAgewotICAgICAgICB2YXIgZnJvbnRlbmRJZCA9IHVybDsKLSAgICAg
ICAgaWYgKGZyb250ZW5kSWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHZhciBzdGlja3lJZCA9IHRoaXMuX3NldE5hdGl2ZUJyZWFrcG9p
bnQoIlhIUiIsICFkaXNhYmxlZCwgeyB1cmw6IHVybCB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2NyZWF0ZVhIUkJyZWFrcG9pbnRWaWV3KHN0aWNreUlkLCB0aGlzLl9zdGlja3lCcmVha3BvaW50
c1tzdGlja3lJZF0pOworICAgIH0sCiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2Vi
SW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQodGhpcywgZnJvbnRlbmRJZCwgdXJsKTsKLSAgICAgICAg
dGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbZnJvbnRlbmRJZF0gPSBicmVha3BvaW50OwotICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygieGhyLWJyZWFrcG9pbnQtYWRkZWQiLCBi
cmVha3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWRpc2FibGVkCi0gICAg
ICAgIHJldHVybiBicmVha3BvaW50OworICAgIGZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihiYWNr
ZW5kSWQpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYmFja2VuZEJyZWFrcG9pbnRzW2Jh
Y2tlbmRJZF07CiAgICAgfSwKIAotICAgIGZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihiYWNrZW5k
QnJlYWtwb2ludElkKQorICAgIF9jcmVhdGVET01CcmVha3BvaW50VmlldzogZnVuY3Rpb24oc3Rp
Y2t5SWQsIGJyZWFrcG9pbnQsIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYmFj
a2VuZElkVG9CcmVha3BvaW50W2JhY2tlbmRCcmVha3BvaW50SWRdOworICAgICAgICB2YXIgYnJl
YWtwb2ludFZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQodGhpcywgc3RpY2t5
SWQsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIG5vZGUpOworICAg
ICAgICB0aGlzLl9icmVha3BvaW50Vmlld3Nbc3RpY2t5SWRdID0gYnJlYWtwb2ludFZpZXc7Cisg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5FdmVudHMuRE9NQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50Vmlldyk7Cisg
ICAgICAgIHJldHVybiBicmVha3BvaW50VmlldzsKICAgICB9LAogCi0gICAgX3JlbW92ZU5hdGl2
ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2NyZWF0ZUV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50VmlldzogZnVuY3Rpb24oc3RpY2t5SWQsIGJyZWFrcG9pbnQpCiAgICAgewot
ICAgICAgICBpZiAoYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJhY2tlbmQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlz
Ll9yZW1vdmVOYXRpdmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3BvaW50Ll9mcm9udGVuZElkXTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7Ci0gICAg
ICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CisgICAg
ICAgIHZhciBicmVha3BvaW50VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQodGhpcywgc3RpY2t5SWQsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5j
b25kaXRpb24pOworICAgICAgICB0aGlzLl9icmVha3BvaW50Vmlld3Nbc3RpY2t5SWRdID0gYnJl
YWtwb2ludFZpZXc7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRB
ZGRlZCwgYnJlYWtwb2ludFZpZXcpOworICAgICAgICByZXR1cm4gYnJlYWtwb2ludFZpZXc7CiAg
ICAgfSwKIAotICAgIF9zZXROYXRpdmVCcmVha3BvaW50RW5hYmxlZDogZnVuY3Rpb24oYnJlYWtw
b2ludCwgZW5hYmxlZCkKKyAgICBfY3JlYXRlWEhSQnJlYWtwb2ludFZpZXc6IGZ1bmN0aW9uKHN0
aWNreUlkLCBicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuX2JlaW5n
U2V0T25CYWNrZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoYnJlYWtwb2lu
dC5lbmFibGVkID09PSBlbmFibGVkKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIg
YnJlYWtwb2ludFZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQodGhpcywgc3Rp
Y2t5SWQsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAg
ICB0aGlzLl9icmVha3BvaW50Vmlld3Nbc3RpY2t5SWRdID0gYnJlYWtwb2ludFZpZXc7CisgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5FdmVudHMuWEhSQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50Vmlldyk7CisgICAg
ICAgIHJldHVybiBicmVha3BvaW50VmlldzsKKyAgICB9LAorCisgICAgX3NldE5hdGl2ZUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKHR5cGUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAg
IHZhciBzdGlja3lJZCA9ICsrdGhpcy5fbGFzdFN0aWNreUlkOworICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IHsgdHlwZTogdHlwZSwgZW5hYmxlZDogZW5hYmxlZCwgY29uZGl0aW9uOiBjb25kaXRp
b24gfTsKKyAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbc3RpY2t5SWRdID0gYnJlYWtw
b2ludDsKKyAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CiAgICAgICAgIGlmIChlbmFi
bGVkKQotICAgICAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludE9uQmFja2VuZChicmVh
a3BvaW50KTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtw
b2ludE9uQmFja2VuZChzdGlja3lJZCk7CisgICAgICAgIHJldHVybiBzdGlja3lJZDsKKyAgICB9
LAorCisgICAgX3JlbW92ZU5hdGl2ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHN0aWNreUlkKQorICAg
IHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tzdGlj
a3lJZF07CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tzdGlja3lJZF07
CisgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOworCisgICAgICAgIGlmIChicmVha3Bv
aW50Ll9iYWNrZW5kSWQpCiAgICAgICAgICAgICB0aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50
RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRWaWV3ID0g
dGhpcy5fYnJlYWtwb2ludFZpZXdzW3N0aWNreUlkXTsKKyAgICAgICAgYnJlYWtwb2ludFZpZXcu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CisgICAgICAgIGRlbGV0ZSB0aGlz
Ll9icmVha3BvaW50Vmlld3Nbc3RpY2t5SWRdOwogICAgIH0sCiAKLSAgICBfc2V0TmF0aXZlQnJl
YWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBfc2V0TmF0aXZlQnJl
YWtwb2ludEVuYWJsZWQ6IGZ1bmN0aW9uKHN0aWNreUlkLCBlbmFibGVkKQogICAgIHsKLSAgICAg
ICAgYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJhY2tlbmQgPSB0cnVlOwotICAgICAgICB2YXIgZGF0
YSA9IHsgdHlwZTogYnJlYWtwb2ludC5fdHlwZSwgY29uZGl0aW9uOiBicmVha3BvaW50Ll9jb25k
aXRpb24gfTsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXROYXRpdmVCcmVha3BvaW50KGRh
dGEsIGRpZFNldE5hdGl2ZUJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgICAgIHZhciBicmVh
a3BvaW50ID0gdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbc3RpY2t5SWRdOworICAgICAgICBicmVh
a3BvaW50LmVuYWJsZWQgPSBlbmFibGVkOworICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMo
KTsKIAotICAgICAgICBmdW5jdGlvbiBkaWRTZXROYXRpdmVCcmVha3BvaW50KGJhY2tlbmRCcmVh
a3BvaW50SWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuX2JlaW5nU2V0T25C
YWNrZW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYmFja2VuZEJyZWFrcG9pbnRJZCAhPT0g
IiIpIHsKLSAgICAgICAgICAgICAgICBicmVha3BvaW50Ll9iYWNrZW5kSWQgPSBiYWNrZW5kQnJl
YWtwb2ludElkOwotICAgICAgICAgICAgICAgIHRoaXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFti
YWNrZW5kQnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQi
KTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygp
OwotICAgICAgICB9CisgICAgICAgIGlmIChlbmFibGVkICYmICFicmVha3BvaW50Ll9iYWNrZW5k
SWQpCisgICAgICAgICAgICB0aGlzLl9zZXROYXRpdmVCcmVha3BvaW50T25CYWNrZW5kKHN0aWNr
eUlkKTsKKyAgICAgICAgZWxzZSBpZiAoIWVuYWJsZWQgJiYgYnJlYWtwb2ludC5fYmFja2VuZElk
KQorICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTmF0aXZlQnJlYWtwb2ludEZyb21CYWNrZW5kKGJy
ZWFrcG9pbnQpOworCisgICAgICAgIHZhciBicmVha3BvaW50VmlldyA9IHRoaXMuX2JyZWFrcG9p
bnRWaWV3c1tzdGlja3lJZF07CisgICAgICAgIGJyZWFrcG9pbnRWaWV3Ll9lbmFibGVkID0gZW5h
YmxlZDsKKyAgICAgICAgYnJlYWtwb2ludFZpZXcuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJl
bmFibGUtY2hhbmdlZCIpOworICAgIH0sCisKKyAgICBfc2V0TmF0aXZlQnJlYWtwb2ludE9uQmFj
a2VuZDogZnVuY3Rpb24oc3RpY2t5SWQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzW3N0aWNreUlkXTsKKyAgICAgICAgdmFyIGRhdGEgPSB7
IHR5cGU6IGJyZWFrcG9pbnQudHlwZSwgY29uZGl0aW9uOiBicmVha3BvaW50LmNvbmRpdGlvbiB9
OworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldE5hdGl2ZUJyZWFrcG9pbnQoZGF0YSwgdGhp
cy5zdGlja3lCcmVha3BvaW50UmVzdG9yZWQuYmluZCh0aGlzLCBzdGlja3lJZCkpOwogICAgIH0s
CiAKICAgICBfcmVtb3ZlTmF0aXZlQnJlYWtwb2ludEZyb21CYWNrZW5kOiBmdW5jdGlvbihicmVh
a3BvaW50KQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVOYXRpdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnQuX2JhY2tlbmRJZCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9iYWNr
ZW5kSWRUb0JyZWFrcG9pbnRbYnJlYWtwb2ludC5fYmFja2VuZElkXQorICAgICAgICBkZWxldGUg
dGhpcy5fYmFja2VuZEJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuX2JhY2tlbmRJZF07CiAgICAgICAg
IGRlbGV0ZSBicmVha3BvaW50Ll9iYWNrZW5kSWQ7Ci0gICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFibGUtY2hhbmdlZCIpOwotICAgICAgICB0aGlzLl91cGRh
dGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKICAgICB9LAogCi0gICAgX3VwZGF0ZU5h
dGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5nczogZnVuY3Rpb24oKQorICAgIHN0aWNreUJyZWFrcG9p
bnRSZXN0b3JlZDogZnVuY3Rpb24oc3RpY2t5SWQsIGJhY2tlbmRJZCkKICAgICB7Ci0gICAgICAg
IHZhciBwZXJzaXN0ZW50QnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4g
dGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0g
dGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbaWRdOwotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQu
X3BlcnNpc3RlbnRDb25kaXRpb24pCi0gICAgICAgICAgICAgICAgcGVyc2lzdGVudEJyZWFrcG9p
bnRzLnB1c2goeyB0eXBlOiBicmVha3BvaW50Ll90eXBlLCBlbmFibGVkOiBicmVha3BvaW50LmVu
YWJsZWQsIGNvbmRpdGlvbjogYnJlYWtwb2ludC5fcGVyc2lzdGVudENvbmRpdGlvbiB9KTsKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tzdGlja3lJZF07
CisgICAgICAgIGlmICghYnJlYWtwb2ludCB8fCAhYnJlYWtwb2ludC5lbmFibGVkIHx8IGJyZWFr
cG9pbnQuX2JhY2tlbmRJZCkgeworICAgICAgICAgICAgaWYgKGJhY2tlbmRJZCkKKyAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoYmFja2VuZElk
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYmFja2Vu
ZElkKSB7CisgICAgICAgICAgICB0aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50KHN0aWNreUlk
KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3MubmF0aXZlQnJlYWtwb2ludHMgPSBwZXJzaXN0ZW50QnJlYWtwb2ludHM7CisKKyAg
ICAgICAgYnJlYWtwb2ludC5fYmFja2VuZElkID0gYmFja2VuZElkOworICAgICAgICB0aGlzLl9i
YWNrZW5kQnJlYWtwb2ludHNbYmFja2VuZElkXSA9IHRoaXMuX2JyZWFrcG9pbnRWaWV3c1tzdGlj
a3lJZF07CiAgICAgfSwKIAogICAgIF9uYXRpdmVCcmVha3BvaW50SGl0OiBmdW5jdGlvbihldmVu
dCkKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQgPSBldmVudC5kYXRhLmJyZWFrcG9p
bnRJZDsKKyAgICAgICAgdmFyIGJhY2tlbmRJZCA9IGV2ZW50LmRhdGEuYnJlYWtwb2ludElkOwog
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYmFja2VuZElkVG9CcmVha3BvaW50W2Jy
ZWFrcG9pbnRJZF07CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYmFja2VuZEJyZWFr
cG9pbnRzW2JhY2tlbmRJZF07CiAgICAgICAgIGlmICghYnJlYWtwb2ludCkKICAgICAgICAgICAg
IHJldHVybjsKIApAQCAtMTY1LDEwNSArMjA2LDEwMSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fbGFzdEhpdEJyZWFr
cG9pbnQ7CiAgICAgfSwKIAotICAgIHJlc3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fcGVyc2lzdGVudEJyZWFrcG9pbnRz
KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSAiRXZlbnRMaXN0ZW5l
ciIpCi0gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludChi
cmVha3BvaW50c1tpXS5jb25kaXRpb24uZXZlbnROYW1lKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGJyZWFrcG9pbnRzW2ldLnR5cGUgPT09ICJYSFIiKQotICAgICAgICAgICAgICAgIHRoaXMuY3Jl
YXRlWEhSQnJlYWtwb2ludChicmVha3BvaW50c1tpXS5jb25kaXRpb24udXJsLCAhYnJlYWtwb2lu
dHNbaV0uZW5hYmxlZCk7Ci0gICAgICAgIH0KLSAgICB9LAotCiAgICAgcmVzdG9yZURPTUJyZWFr
cG9pbnRzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBmdW5jdGlvbiBkaWRQdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQocGF0aCwgbm9kZUlkKQogICAgICAgICB7Ci0gICAgICAgICAgICBwYXRo
VG9Ob2RlSWRbcGF0aF0gPSBub2RlSWQ7CisgICAgICAgICAgICBpZiAobm9kZUlkKQorICAgICAg
ICAgICAgICAgIHBhdGhUb05vZGVbcGF0aF0gPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZv
cklkKG5vZGVJZCk7CiAgICAgICAgICAgICBwZW5kaW5nQ2FsbHMgLT0gMTsKICAgICAgICAgICAg
IGlmIChwZW5kaW5nQ2FsbHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07Ci0gICAgICAgICAgICAgICAg
dmFyIG5vZGVJZCA9IHBhdGhUb05vZGVJZFticmVha3BvaW50LmNvbmRpdGlvbi5wYXRoXTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZUlkKQotICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0
ZURPTUJyZWFrcG9pbnQobm9kZUlkLCBicmVha3BvaW50LmNvbmRpdGlvbi50eXBlLCAhYnJlYWtw
b2ludC5lbmFibGVkKTsKKyAgICAgICAgICAgIGZvciAodmFyIHN0aWNreUlkIGluIHRoaXMuX3N0
aWNreUJyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlz
Ll9zdGlja3lCcmVha3BvaW50c1tzdGlja3lJZF07CisgICAgICAgICAgICAgICAgaWYgKGJyZWFr
cG9pbnQudHlwZSAhPT0gIkRPTSIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIHZhciBub2RlID0gcGF0aFRvTm9kZVticmVha3BvaW50LmNvbmRpdGlvbi5w
YXRoXTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoYnJlYWtwb2ludC5lbmFibGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0
TmF0aXZlQnJlYWtwb2ludE9uQmFja2VuZChzdGlja3lJZCk7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2NyZWF0ZURPTUJyZWFrcG9pbnRWaWV3KHN0aWNreUlkLCBicmVha3BvaW50LCBub2Rl
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUg
dGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbc3RpY2t5SWRdOworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9wZXJzaXN0ZW50
QnJlYWtwb2ludHMoKTsKLSAgICAgICAgdmFyIHBhdGhUb05vZGVJZCA9IHt9OworICAgICAgICB2
YXIgcGF0aFRvTm9kZSA9IHt9OwogICAgICAgICB2YXIgcGVuZGluZ0NhbGxzID0gMDsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgaWYgKGJyZWFrcG9pbnRzW2ldLnR5cGUgIT09ICJET00iKQorICAgICAgICBmb3IgKHZh
ciBzdGlja3lJZCBpbiB0aGlzLl9zdGlja3lCcmVha3BvaW50cykgeworICAgICAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tzdGlja3lJZF07CisgICAgICAg
ICAgICBpZiAoYnJlYWtwb2ludC50eXBlICE9PSAiRE9NIikKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHZhciBwYXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBh
dGg7Ci0gICAgICAgICAgICBpZiAocGF0aCBpbiBwYXRoVG9Ob2RlSWQpCisgICAgICAgICAgICB2
YXIgcGF0aCA9IGJyZWFrcG9pbnQuY29uZGl0aW9uLnBhdGg7CisgICAgICAgICAgICBpZiAocGF0
aCBpbiBwYXRoVG9Ob2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
cGF0aFRvTm9kZUlkW3BhdGhdID0gMDsKKyAgICAgICAgICAgIHBhdGhUb05vZGVbcGF0aF0gPSBu
dWxsOwogICAgICAgICAgICAgcGVuZGluZ0NhbGxzICs9IDE7CiAgICAgICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChwYXRoLCBkaWRQdXNoTm9kZUJ5UGF0
aFRvRnJvbnRlbmQuYmluZCh0aGlzLCBwYXRoKSk7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAg
X3BlcnNpc3RlbnRCcmVha3BvaW50czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IFtdOwotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3Iuc2V0dGlu
Z3MubmF0aXZlQnJlYWtwb2ludHM7Ci0gICAgICAgIGlmIChicmVha3BvaW50cyBpbnN0YW5jZW9m
IEFycmF5KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50
c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoInR5cGUiIGluIGJyZWFrcG9pbnQgJiYgImNvbmRp
dGlvbiIgaW4gYnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYnJl
YWtwb2ludCkKLSAgICAgICAgICAgIH0KKyAgICBfcHJvamVjdENoYW5nZWQ6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHZhciBwcm9qZWN0SWQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJv
amVjdElkOworICAgICAgICBpZiAoIShwcm9qZWN0SWQgaW4gdGhpcy5fc3RpY2t5QnJlYWtwb2lu
dHNGb3JBbGxQcm9qZWN0cykpCisgICAgICAgICAgICB0aGlzLl9zdGlja3lCcmVha3BvaW50c0Zv
ckFsbFByb2plY3RzW3Byb2plY3RJZF0gPSB7fTsKKyAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtw
b2ludHMgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c0ZvckFsbFByb2plY3RzW3Byb2plY3RJZF07
CisgICAgICAgIHRoaXMuX2JhY2tlbmRCcmVha3BvaW50cyA9IHt9OworICAgICAgICB0aGlzLl9i
cmVha3BvaW50Vmlld3MgPSB7fTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5Qcm9qZWN0Q2hhbmdlZCk7
CisgICAgICAgIGZvciAodmFyIHN0aWNreUlkIGluIHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzKSB7
CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzW3N0
aWNreUlkXTsKKyAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50Ll9iYWNrZW5kSWQ7CisgICAg
ICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlID09PSAiRXZlbnRMaXN0ZW5lciIpCisgICAgICAg
ICAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRWaWV3KHN0aWNreUlk
LCBicmVha3BvaW50KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJyZWFrcG9pbnQudHlwZSA9PT0g
IlhIUiIpCisgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlWEhSQnJlYWtwb2ludFZpZXcoc3Rp
Y2t5SWQsIGJyZWFrcG9pbnQpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfSwKIAotICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgX3NhdmVCcmVha3BvaW50czogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKLSAg
ICAgICAgdGhpcy5fYmFja2VuZElkVG9CcmVha3BvaW50ID0ge307CisgICAgICAgIHZhciBicmVh
a3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZhciBzdGlja3lJZCBpbiB0aGlzLl9zdGlja3lC
cmVha3BvaW50cykKKyAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2godGhpcy5fc3RpY2t5QnJl
YWtwb2ludHNbc3RpY2t5SWRdKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLm5hdGl2
ZUJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0
U3RpY2t5QnJlYWtwb2ludHModGhpcy5fc3RpY2t5QnJlYWtwb2ludHNGb3JBbGxQcm9qZWN0cyk7
CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3Iu
TmF0aXZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGZyb250ZW5kSWQsIHR5cGUpCitX
ZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGJyZWFrcG9p
bnRJZCwgZW5hYmxlZCkKIHsKICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjsKLSAgICB0aGlz
Ll9fZnJvbnRlbmRJZCA9IGZyb250ZW5kSWQ7Ci0gICAgdGhpcy5fX3R5cGUgPSB0eXBlOworICAg
IHRoaXMuX2JyZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnRJZDsKKyAgICB0aGlzLl9lbmFibGVkID0g
ZW5hYmxlZDsKIH0KIAogV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0g
ewogICAgIGdldCBlbmFibGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiX2JhY2tlbmRJZCIg
aW4gdGhpczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CiAgICAgfSwKIAogICAgIHNl
dCBlbmFibGVkKGVuYWJsZWQpCiAgICAgewotICAgICAgICB0aGlzLl9tYW5hZ2VyLl9zZXROYXRp
dmVCcmVha3BvaW50RW5hYmxlZCh0aGlzLCBlbmFibGVkKTsKKyAgICAgICAgdGhpcy5fbWFuYWdl
ci5fc2V0TmF0aXZlQnJlYWtwb2ludEVuYWJsZWQodGhpcy5fYnJlYWtwb2ludElkLCBlbmFibGVk
KTsKICAgICB9LAogCiAgICAgcmVtb3ZlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlz
Ll9tYW5hZ2VyLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50KHRoaXMpOworICAgICAgICB0aGlzLl9t
YW5hZ2VyLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50KHRoaXMuX2JyZWFrcG9pbnRJZCk7CiAgICAg
ICAgIHRoaXMuX29uUmVtb3ZlKCk7CiAgICAgfSwKIAotICAgIGdldCBfZnJvbnRlbmRJZCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fX2Zyb250ZW5kSWQ7Ci0gICAgfSwKLQotICAgIGdl
dCBfdHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fX3R5cGU7Ci0gICAgfSwKLQog
ICAgIF9jb21wYXJlOiBmdW5jdGlvbih4LCB5KQogICAgIHsKICAgICAgICAgaWYgKHggIT09IHkp
CkBAIC0yNzgsMjQgKzMxNSwxOCBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90
b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLkRP
TUJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBmcm9udGVuZElkLCBub2RlSWQsIGRvbUV2
ZW50VHlwZSkKK1dlYkluc3BlY3Rvci5ET01CcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwg
YnJlYWtwb2ludElkLCBlbmFibGVkLCBjb25kaXRpb24sIG5vZGUpCiB7Ci0gICAgV2ViSW5zcGVj
dG9yLk5hdGl2ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBmcm9udGVuZElkLCAiRE9N
Iik7Ci0gICAgdGhpcy5fbm9kZUlkID0gbm9kZUlkOwotICAgIHRoaXMuX2RvbUV2ZW50VHlwZSA9
IGRvbUV2ZW50VHlwZTsKLSAgICB0aGlzLl9jb25kaXRpb24gPSB7IG5vZGVJZDogdGhpcy5fbm9k
ZUlkLCB0eXBlOiB0aGlzLl9kb21FdmVudFR5cGUgfTsKLQotICAgIHZhciBub2RlID0gV2ViSW5z
cGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZCh0aGlzLl9ub2RlSWQpOwotICAgIGlmIChub2RlKSB7
Ci0gICAgICAgIG5vZGUuYnJlYWtwb2ludHNbdGhpcy5fZG9tRXZlbnRUeXBlXSA9IHRoaXM7Ci0g
ICAgICAgIHRoaXMuX3BlcnNpc3RlbnRDb25kaXRpb24gPSB7IHBhdGg6IG5vZGUucGF0aCgpLCB0
eXBlOiB0aGlzLl9kb21FdmVudFR5cGUgfTsKLSAgICB9CisgICAgV2ViSW5zcGVjdG9yLk5hdGl2
ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBicmVha3BvaW50SWQsIGVuYWJsZWQpOwor
ICAgIHRoaXMuX25vZGUgPSBub2RlOworICAgIHRoaXMuX25vZGVJZCA9IG5vZGUuaWQ7CisgICAg
dGhpcy5fdHlwZSA9IGNvbmRpdGlvbi5kb21FdmVudFR5cGU7CiB9CiAKIFdlYkluc3BlY3Rvci5E
T01CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAgICBjb21wYXJlVG86IGZ1bmN0aW9uKG90aGVy
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmUodGhpcy5fZG9tRXZlbnRUeXBl
LCBvdGhlci5fZG9tRXZlbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmUodGhp
cy5fdHlwZSwgb3RoZXIuX3R5cGUpOwogICAgIH0sCiAKICAgICBwb3B1bGF0ZUxhYmVsRWxlbWVu
dDogZnVuY3Rpb24oZWxlbWVudCkKQEAgLTMwNiwxMyArMzM3LDEzIEBAIFdlYkluc3BlY3Rvci5E
T01CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChs
aW5raWZpZWROb2RlKTsKICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CiAgICAgICAgIGRlc2NyaXB0aW9uLmNsYXNzTmFtZSA9ICJzb3VyY2Ut
dGV4dCI7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRv
bUJyZWFrcG9pbnRUeXBlTGFiZWwodGhpcy5fZG9tRXZlbnRUeXBlKTsKKyAgICAgICAgZGVzY3Jp
cHRpb24udGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuZG9tQnJlYWtwb2ludFR5cGVMYWJlbCh0
aGlzLl90eXBlKTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAg
ICAgfSwKIAogICAgIHBvcHVsYXRlU3RhdHVzTWVzc2FnZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1l
bnQsIGV2ZW50RGF0YSkKICAgICB7Ci0gICAgICAgIHZhciBzdWJzdGl0dXRpb25zID0gW1dlYklu
c3BlY3Rvci5kb21CcmVha3BvaW50VHlwZUxhYmVsKHRoaXMuX2RvbUV2ZW50VHlwZSksIFdlYklu
c3BlY3Rvci5wYW5lbHMuZWxlbWVudHMubGlua2lmeU5vZGVCeUlkKHRoaXMuX25vZGVJZCldOwor
ICAgICAgICB2YXIgc3Vic3RpdHV0aW9ucyA9IFtXZWJJbnNwZWN0b3IuZG9tQnJlYWtwb2ludFR5
cGVMYWJlbCh0aGlzLl90eXBlKSwgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5saW5raWZ5
Tm9kZUJ5SWQodGhpcy5fbm9kZUlkKV07CiAgICAgICAgIHZhciBmb3JtYXR0ZXJzID0gewogICAg
ICAgICAgICAgczogZnVuY3Rpb24oc3Vic3RpdHV0aW9uKQogICAgICAgICAgICAgewpAQCAtMzI1
LDcgKzM1Niw3IEBAIFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7CiAgICAgICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGIpOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlzLl9k
b21FdmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50VHlwZXMuU3VidHJlZU1v
ZGlmaWVkKSB7CisgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBXZWJJbnNwZWN0b3IuRE9NQnJl
YWtwb2ludFR5cGVzLlN1YnRyZWVNb2RpZmllZCkgewogICAgICAgICAgICAgdmFyIHRhcmdldE5v
ZGUgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLmxpbmtpZnlOb2RlQnlJZChldmVudERh
dGEudGFyZ2V0Tm9kZUlkKTsKICAgICAgICAgICAgIGlmIChldmVudERhdGEuaW5zZXJ0aW9uKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS50YXJnZXROb2RlSWQgIT09IHRoaXMuX25v
ZGVJZCkKQEAgLTM0MCwyMCArMzcxLDE2IEBAIFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50LnBy
b3RvdHlwZSA9IHsKIAogICAgIF9vblJlbW92ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
dmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKHRoaXMuX25vZGVJZCk7
Ci0gICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgZGVsZXRlIG5vZGUuYnJlYWtwb2ludHNb
dGhpcy5fZG9tRXZlbnRUeXBlXTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX25vZGUuYnJlYWtwb2lu
dHNbdGhpcy5fdHlwZV07CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90
eXBlOwogCi1XZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgPSBmdW5jdGlvbiht
YW5hZ2VyLCBmcm9udGVuZElkLCBldmVudE5hbWUpCitXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBicmVha3BvaW50SWQsIGVuYWJsZWQsIGNv
bmRpdGlvbikKIHsKLSAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMs
IG1hbmFnZXIsIGZyb250ZW5kSWQsICJFdmVudExpc3RlbmVyIik7Ci0gICAgdGhpcy5fZXZlbnRO
YW1lID0gZXZlbnROYW1lOwotICAgIHRoaXMuX2NvbmRpdGlvbiA9IHsgZXZlbnROYW1lOiB0aGlz
Ll9ldmVudE5hbWUgfTsKLSAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0aW9uID0gdGhpcy5fY29u
ZGl0aW9uOworICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFu
YWdlciwgYnJlYWtwb2ludElkLCBlbmFibGVkKTsKKyAgICB0aGlzLl9ldmVudE5hbWUgPSBjb25k
aXRpb24uZXZlbnROYW1lOwogfQogCiBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnQuZXZlbnROYW1lRm9yVUkgPSBmdW5jdGlvbihldmVudE5hbWUpCkBAIC0zNjksNiArMzk2LDEx
IEBAIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludC5ldmVudE5hbWVGb3JVSSA9
IGZ1bmN0aW9uKGV2ZW50TmFtZSkKIH0KIAogV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgZXZlbnROYW1lKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9ldmVudE5hbWU7CisgICAgfSwKKwogICAgIGNvbXBhcmVUbzogZnVuY3Rp
b24ob3RoZXIpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29tcGFyZSh0aGlzLl9ldmVu
dE5hbWUsIG90aGVyLl9ldmVudE5hbWUpOwpAQCAtMzkzLDEyICs0MjUsMTAgQEAgV2ViSW5zcGVj
dG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9y
LkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5YSFJCcmVha3Bv
aW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRlbmRJZCwgdXJsKQorV2ViSW5zcGVjdG9yLlhI
UkJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBicmVha3BvaW50SWQsIGVuYWJsZWQsIGNv
bmRpdGlvbikKIHsKLSAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMs
IG1hbmFnZXIsIGZyb250ZW5kSWQsICJYSFIiKTsKLSAgICB0aGlzLl91cmwgPSB1cmw7Ci0gICAg
dGhpcy5fY29uZGl0aW9uID0geyB1cmw6IHRoaXMuX3VybCB9OwotICAgIHRoaXMuX3BlcnNpc3Rl
bnRDb25kaXRpb24gPSB0aGlzLl9jb25kaXRpb247CisgICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJy
ZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBicmVha3BvaW50SWQsIGVuYWJsZWQpOworICAg
IHRoaXMuX3VybCA9IGNvbmRpdGlvbi51cmw7CiB9CiAKIFdlYkluc3BlY3Rvci5YSFJCcmVha3Bv
aW50LnByb3RvdHlwZSA9IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKaW5kZXggNDcxOTRkYS4uZGQxZjk1OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBh
bmUuanMKQEAgLTM1LDE4ICszNSwxMSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFy
UGFuZSA9IGZ1bmN0aW9uKHRpdGxlKQogICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRDb250ZW50
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBCcmVha3BvaW50cyIpOwogCiAgICAgdGhpcy5i
b2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CisKKyAgICBXZWJJbnNw
ZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0aGlzLl9wcm9qZWN0Q2hhbmdl
ZCwgdGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3Rv
dHlwZSA9IHsKLSAgICByZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5saXN0
RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICBpZiAodGhpcy5saXN0RWxlbWVudC5w
YXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxk
KHRoaXMubGlzdEVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9LAotCiAgICAgYWRkQnJl
YWtwb2ludEl0ZW06IGZ1bmN0aW9uKGJyZWFrcG9pbnRJdGVtKQogICAgIHsKICAgICAgICAgdmFy
IGVsZW1lbnQgPSBicmVha3BvaW50SXRlbS5lbGVtZW50OwpAQCAtOTcsNiArOTAsMTUgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5ib2R5RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKICAgICAg
ICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbXB0eUVsZW1lbnQpOwog
ICAgICAgICB9CisgICAgfSwKKworICAgIF9wcm9qZWN0Q2hhbmdlZDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5saXN0RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICBp
ZiAodGhpcy5saXN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmJv
ZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMubGlzdEVsZW1lbnQpOworICAgICAgICAgICAgdGhp
cy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CisgICAgICAgIH0K
ICAgICB9CiB9CiAKQEAgLTI1Niw3ICsyNTgsOCBAQCBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jYXRlZ29yaWVz
VHJlZU91dGxpbmUgPSBuZXcgVHJlZU91dGxpbmUodGhpcy5jYXRlZ29yaWVzRWxlbWVudCk7CiAg
ICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhdGVnb3JpZXNFbGVtZW50KTsK
IAotICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJl
dmVudC1saXN0ZW5lci1icmVha3BvaW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0
aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0
aGlzLl9wcm9qZWN0Q2hhbmdlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2
ZW50cy5FdmVudExpc3RlbmVyQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQs
IHRoaXMpOwogCiAgICAgdGhpcy5fYnJlYWtwb2ludEl0ZW1zID0ge307CiAgICAgdGhpcy5fY3Jl
YXRlQ2F0ZWdvcnkoIktleWJvYXJkIiwgImxpc3RlbmVyIiwgWyJrZXlkb3duIiwgImtleXVwIiwg
ImtleXByZXNzIiwgInRleHRJbnB1dCJdKTsKQEAgLTMzOSwxMCArMzQyLDkgQEAgV2ViSW5zcGVj
dG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAog
ICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSBldmVudC5kYXRhLmJyZWFrcG9pbnQ7Ci0gICAgICAgIHZhciBldmVudE5h
bWUgPSBldmVudC5kYXRhLmV2ZW50TmFtZTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVu
dC5kYXRhOwogCi0gICAgICAgIHZhciBicmVha3BvaW50SXRlbSA9IHRoaXMuX2JyZWFrcG9pbnRJ
dGVtc1tldmVudE5hbWVdOworICAgICAgICB2YXIgYnJlYWtwb2ludEl0ZW0gPSB0aGlzLl9icmVh
a3BvaW50SXRlbXNbYnJlYWtwb2ludC5ldmVudE5hbWVdOwogICAgICAgICBicmVha3BvaW50SXRl
bS5icmVha3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKCJoaXQtc3RhdGUtY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRIaXRTdGF0ZUNoYW5n
ZWQuYmluZCh0aGlzLCBicmVha3BvaW50SXRlbSkpOwogICAgICAgICBicmVha3BvaW50LmFkZEV2
ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZC5iaW5kKHRoaXMs
IGJyZWFrcG9pbnRJdGVtKSk7CkBAIC0zODMsNyArMzg1LDcgQEAgV2ViSW5zcGVjdG9yLkV2ZW50
TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgY2F0
ZWdvcnlJdGVtLmNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBoYXNFbmFibGVkICYmIGhhc0Rpc2Fi
bGVkOwogICAgIH0sCiAKLSAgICByZXNldDogZnVuY3Rpb24oKQorICAgIF9wcm9qZWN0Q2hhbmdl
ZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHRoaXMu
X2JyZWFrcG9pbnRJdGVtcykgewogICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRJdGVtID0gdGhp
cy5fYnJlYWtwb2ludEl0ZW1zW2V2ZW50TmFtZV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4IDYxYmEzM2UuLmIxY2QyNGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBAIC0xNjksOSArMTY5LDYg
QEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
LnJlY2VudGx5TW9kaWZpZWROb2RlcyA9IFtdOwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJl
bnRRdWVyeTsKLQotICAgICAgICBpZiAoUHJlZmVyZW5jZXMubmF0aXZlSW5zdHJ1bWVudGF0aW9u
RW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmRvbUJyZWFrcG9pbnRzLnJl
c2V0KCk7CiAgICAgfSwKIAogICAgIHNldERvY3VtZW50OiBmdW5jdGlvbihpbnNwZWN0ZWRSb290
RG9jdW1lbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpp
bmRleCAzMzQ3OThjLi43OWUyZDhjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1BhbmVsLmpzCkBAIC00NDEsMTUgKzQ0MSw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zb3VyY2VJRE1hcCA9IHt9OwogCiAg
ICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhwcmVzc2lvbnMucmVmcmVzaEV4cHJlc3Np
b25zKCk7Ci0gICAgICAgIGlmICghcHJlc2VydmVJdGVtcykgewotICAgICAgICAgICAgdGhpcy5z
aWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5yZXNldCgpOwotICAgICAgICAgICAgaWYgKFByZWZl
cmVuY2VzLm5hdGl2ZUluc3RydW1lbnRhdGlvbkVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnNpZGViYXJQYW5lcy5kb21CcmVha3BvaW50cy5yZXNldCgpOwotICAgICAgICAgICAgICAg
IHRoaXMuc2lkZWJhclBhbmVzLnhockJyZWFrcG9pbnRzLnJlc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5zaWRlYmFyUGFuZXMuZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnJlc2V0KCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGlmICghcHJlc2VydmVJdGVtcykKICAgICAgICAgICAgIHRo
aXMuc2lkZWJhclBhbmVzLndvcmtlcnMucmVzZXQoKTsKLSAgICAgICAgfQogICAgIH0sCiAKICAg
ICBnZXQgdmlzaWJsZVZpZXcoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NldHRpbmdzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpz
CmluZGV4IDE2M2IxODQuLmJjNTBjZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TZXR0aW5ncy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMKQEAgLTcwLDYgKzcwLDEwIEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncyA9IGZ1bmN0
aW9uKCkKICAgICB0aGlzLmluc3RhbGxQcm9qZWN0U2V0dGluZygibmF0aXZlQnJlYWtwb2ludHMi
LCBbXSk7CiB9CiAKK1dlYkluc3BlY3Rvci5TZXR0aW5ncy5FdmVudHMgPSB7CisgICAgUHJvamVj
dENoYW5nZWQ6ICJwcm9qZWN0LWNoYW5nZWQiCit9CisKIFdlYkluc3BlY3Rvci5TZXR0aW5ncy5w
cm90b3R5cGUgPSB7CiAgICAgaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZzogZnVuY3Rpb24oa2V5
LCBkZWZhdWx0VmFsdWUpCiAgICAgewpAQCAtOTEsNyArOTUsMzEgQEAgV2ViSW5zcGVjdG9yLlNl
dHRpbmdzLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGZyYWdtZW50SW5kZXggPSB1cmwuaW5k
ZXhPZigiIyIpOwogICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPT0gLTEpCiAgICAgICAgICAg
ICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIGZyYWdtZW50SW5kZXgpOwotICAgICAgICB0aGlzLl9p
bnNwZWN0ZWRVUkwgPSB1cmw7CisgICAgICAgIHRoaXMuX3Byb2plY3RJZCA9IHVybDsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNldHRpbmdzLkV2
ZW50cy5Qcm9qZWN0Q2hhbmdlZCk7CisgICAgfSwKKworICAgIGdldCBwcm9qZWN0SWQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RJZDsKKyAgICB9LAorCisgICAgZmluZFNl
dHRpbmdGb3JBbGxQcm9qZWN0czogZnVuY3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IHt9OworICAgICAgICB2YXIgcmVnZXhwID0gIl4iICsga2V5ICsgIjooLiopIjsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cubG9jYWxTdG9yYWdlLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICB2YXIgZnVsbEtleSA9ICB3aW5kb3cubG9jYWxTdG9yYWdlLmtleShp
KTsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IGZ1bGxLZXkubWF0Y2gocmVnZXhwKTsKKyAgICAg
ICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIHJlc3VsdFttYXRjaFsxXV0gPSBKU09OLnBhcnNlKHdp
bmRvdy5sb2NhbFN0b3JhZ2VbZnVsbEtleV0pOworICAgICAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGZ1bGxLZXkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSwK
IAogICAgIF9nZXQ6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQpAQCAtMTIzLDcgKzE1MSw3
IEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUgPSB7CiAKICAgICBfZm9ybWF0UHJv
amVjdEtleTogZnVuY3Rpb24oa2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGtleSArICI6IiAr
IHRoaXMuX2luc3BlY3RlZFVSTDsKKyAgICAgICAgcmV0dXJuIGtleSArICI6IiArIHRoaXMuX3By
b2plY3RJZDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCmluZGV4IDAwODAxMGQuLjgxNjBjYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcwpAQCAtMjAzLDcgKzIwMyw3IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHBhbmUuYWRkQnJlYWtwb2ludEl0ZW0obmV3IFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50SXRlbShldmVudC5kYXRhKSk7CiAgICAgICAgIH0KLSAgICAgICAgV2Vi
SW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImRvbS1icmVha3Bv
aW50LWFkZGVkIiwgYnJlYWtwb2ludEFkZGVkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLkV2ZW50cy5ET01CcmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRBZGRlZCk7CiAgICAgICAg
IHJldHVybiBwYW5lOwogICAgIH0sCiAKQEAgLTIxNCw3ICsyMTQsNyBAQCB2YXIgV2ViSW5zcGVj
dG9yID0gewogICAgICAgICB7CiAgICAgICAgICAgICBwYW5lLmFkZEJyZWFrcG9pbnRJdGVtKG5l
dyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0oZXZlbnQuZGF0YSkpOwogICAgICAgICB9Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJ4
aHItYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnRBZGRlZCk7CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5FdmVudHMuWEhSQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50QWRkZWQp
OwogICAgICAgICByZXR1cm4gcGFuZTsKICAgICB9LAogCkBAIC0xMzA2LDYgKzEzMDYsMTEgQEAg
V2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGxpbmUsIGVuYWJsZWQsIGMKICAgICB0aGlzLmRlYnVnZ2VyTW9kZWwuYnJlYWtwb2lu
dFJlc3RvcmVkKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7
CiB9CiAKK1dlYkluc3BlY3Rvci5zdGlja3lCcmVha3BvaW50UmVzdG9yZWQgPSBmdW5jdGlvbihz
dGlja3lJZCwgYmFja2VuZElkKQoreworICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIuc3RpY2t5
QnJlYWtwb2ludFJlc3RvcmVkKHN0aWNreUlkLCBiYWNrZW5kSWQpOworfQorCiBXZWJJbnNwZWN0
b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNl
LCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKQogewogICAgIHRoaXMucGFu
ZWxzLnNjcmlwdHMuYWRkU2NyaXB0KG51bGwsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xp
bmUsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKQEAgLTEzMjQsNyArMTMyOSw2IEBAIFdlYklu
c3BlY3Rvci5yZXN1bWVkU2NyaXB0ID0gZnVuY3Rpb24oKQogV2ViSW5zcGVjdG9yLnJlc2V0ID0g
ZnVuY3Rpb24oKQogewogICAgIHRoaXMuZGVidWdnZXJNb2RlbC5yZXNldCgpOwotICAgIHRoaXMu
YnJlYWtwb2ludE1hbmFnZXIucmVzZXQoKTsKIAogICAgIGZvciAodmFyIHBhbmVsTmFtZSBpbiB0
aGlzLnBhbmVscykgewogICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsc1twYW5lbE5hbWVd
OwpAQCAtMTMzNyw4ICsxMzQxLDYgQEAgV2ViSW5zcGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQog
CiAgICAgdGhpcy5jb25zb2xlLmNsZWFyTWVzc2FnZXMoKTsKICAgICB0aGlzLmV4dGVuc2lvblNl
cnZlci5ub3RpZnlJbnNwZWN0b3JSZXNldCgpOwotCi0gICAgdGhpcy5icmVha3BvaW50TWFuYWdl
ci5yZXN0b3JlQnJlYWtwb2ludHMoKTsKIH0KIAogV2ViSW5zcGVjdG9yLnJlc2V0UHJvZmlsZXNQ
YW5lbCA9IGZ1bmN0aW9uKCkKQEAgLTEzNTcsMTAgKzEzNTksNiBAQCBXZWJJbnNwZWN0b3IuaW5z
cGVjdGVkVVJMQ2hhbmdlZCA9IGZ1bmN0aW9uKHVybCkKICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3QuaW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmwpOwogICAgIHRoaXMuc2V0dGluZ3MuaW5zcGVjdGVk
VVJMQ2hhbmdlZCh1cmwpOwogICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeUluc3BlY3Rl
ZFVSTENoYW5nZWQoKTsKLSAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzUmVzdG9yZWQpIHsKLSAg
ICAgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5yZXN0b3JlQnJlYWtwb2ludHMoKTsKLSAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludHNSZXN0b3JlZCA9IHRydWU7Ci0gICAgfQogfQogCiBXZWJJbnNw
ZWN0b3IuZGlkQ29tbWl0TG9hZCA9IGZ1bmN0aW9uKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76399</attachid>
            <date>2010-12-13 09:58:24 -0800</date>
            <delta_ts>2010-12-14 04:25:49 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>46612</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTUzZDA5Yi4uYTkxNDVlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMC0xMi0xMyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwdXNoIHBlcnNpc3RlbnQgYnJl
YWtwb2ludHMgaW50byBiYWNrZW5kIHN0YXRlIGNvb2tpZSBzbyB0aGV5IGhpdCBvbiBuYXZpZ2F0
aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4
NTgKKworICAgICAgICBCcmVha3BvaW50TWFuYWdlciBwdXNoZXMgYWxsIHBlcnNpc3RlbnQgYnJl
YWtwb2ludHMgdG8gYmFja2VuZCB3aGVuIGxvYWRlZC4KKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlciByZXN0b3JlcyBzdGlja3kgYnJlYWtwb2ludHMgZnJvbSBjb29raWUgb24gbmF2aWdhdGlv
bi4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3Bv
aW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdGF0ZTo6SW5zcGVjdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpyZWdpc3Rlck9iamVj
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmg6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50c1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRzU2lkZWJhclBhbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJh
clBhbmUucHJvdG90eXBlLl9yZW1vdmVMaXN0RWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX3Byb2plY3RDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBh
bmUucHJvdG90eXBlLl9jcmVhdGVDYXRlZ29yeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9icmVha3BvaW50QWRk
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGVi
YXJQYW5lLnByb3RvdHlwZS5fcHJvamVjdENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q2FsbFN0YWNrU2lkZWJhclBhbmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxl
bWVudHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3Rv
dHlwZS5yZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5yZXNldCk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlLmdldCBwcm9qZWN0SWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZS5maW5kU2V0dGluZ0ZvckFsbFBy
b2plY3RzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUuX2Zvcm1h
dFByb2plY3RLZXkpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZURPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZVhIUkJyZWFrcG9pbnRzU2lkZWJhclBhbmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5p
bnNwZWN0ZWRVUkxDaGFuZ2VkKToKKwogMjAxMC0xMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBu
b3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwKaW5kZXggYzIxNGY3NC4uYjgxY2E3NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCkBAIC0xNDUsNiArMTQ1LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbZG9t
YWluPURlYnVnZ2VyXSB2b2lkIGVkaXRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNvdXJjZUlELCBp
biBTdHJpbmcgbmV3Q29udGVudCwgb3V0IGJvb2xlYW4gc3VjY2Vzcywgb3V0IFN0cmluZyByZXN1
bHQsIG91dCBWYWx1ZSBuZXdDYWxsRnJhbWVzKTsKICAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0g
dm9pZCBnZXRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHNjcmlw
dFNvdXJjZSk7CiAKKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJl
YWtwb2ludHMoaW4gT2JqZWN0IGJyZWFrcG9pbnRzKTsKICAgICAgICAgW2RvbWFpbj1ET01dIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4gbG9uZyB0eXBlKTsKICAgICAg
ICAgW2RvbWFpbj1ET01dIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwg
aW4gbG9uZyB0eXBlKTsKICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoaW4gU3RyaW5nIGV2ZW50TmFtZSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGUwNDUzODIuLjM5YzgyMDcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNDksNiArMTQ5LDcgQEAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAg
ICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCiAgICAgLCBtX2hhc1hIUkJyZWFr
cG9pbnRXaXRoRW1wdHlVUkwoZmFsc2UpCisgICAgLCBtX3N0aWNreUJyZWFrcG9pbnRzUmVzdG9y
ZWQoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC01NjAsNyArNTYxLDYgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQogICAgIGJvb2wgZGVidWdnZXJXYXNF
bmFibGVkID0gZGVidWdnZXJFbmFibGVkKCk7CiAgICAgZGlzYWJsZURlYnVnZ2VyKCk7CiAgICAg
bV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGRlYnVnZ2VyV2FzRW5hYmxlZDsKLSAgICBjbGVh
ck5hdGl2ZUJyZWFrcG9pbnRzKCk7CiAjZW5kaWYKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZh
bHNlKTsKICAgICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKQEAgLTcxNywxMCArNzE3LDEwIEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogICAgICAgICBtX2NvdW50cy5jbGVhcigpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCi0gICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCisgICAgICAgIGlmIChtX2Rl
YnVnZ2VyQWdlbnQpIHsKICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdl
TmF2aWdhdGlvbigpOwotCi0gICAgICAgIGNsZWFyTmF0aXZlQnJlYWtwb2ludHMoKTsKKyAgICAg
ICAgICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpOworICAgICAgICB9CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQpAQCAtMTM4Miw2ICsx
MzgyLDU5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lKCkKICAgICAgICAgbV9k
ZWJ1Z2dlckFnZW50LT5yZXN1bWUoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXRTdGlja3lCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dHMpCit7CisgICAgbV9zdGF0ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpzdGlja3lCcmVh
a3BvaW50cywgYnJlYWtwb2ludHMpOworICAgIGlmICghbV9zdGlja3lCcmVha3BvaW50c1Jlc3Rv
cmVkKSB7CisgICAgICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpOworICAgICAgICBtX3N0
aWNreUJyZWFrcG9pbnRzUmVzdG9yZWQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKQoreworICAgIG1fZXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9YSFJCcmVha3BvaW50cy5jbGVhcigp
OworICAgIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNlOworCisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYWxsQnJlYWtwb2ludHMgPSBtX3N0YXRlLT5nZXRPYmplY3Qo
SW5zcGVjdG9yU3RhdGU6OnN0aWNreUJyZWFrcG9pbnRzKTsKKyAgICBLVVJMIHVybCA9IG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsKKyAgICB1cmwucmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBicmVha3Bv
aW50cyA9IGFsbEJyZWFrcG9pbnRzLT5nZXRBcnJheSh1cmwpOworICAgIGlmICghYnJlYWtwb2lu
dHMpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtw
b2ludHMtPmxlbmd0aCgpOyArK2kpCisgICAgICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50KGJy
ZWFrcG9pbnRzLT5nZXQoaSktPmFzT2JqZWN0KCkpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBldmVudExp
c3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUsICgiRXZlbnRMaXN0ZW5lciIpKTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUsICgiWEhSIikp
OworCisgICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIHR5
cGU7CisgICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoInR5cGUiLCAmdHlwZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICBib29sIGVuYWJsZWQ7CisgICAgaWYgKCFicmVha3BvaW50LT5nZXRC
b29sZWFuKCJlbmFibGVkIiwgJmVuYWJsZWQpIHx8ICFlbmFibGVkKQorICAgICAgICByZXR1cm47
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29uZGl0aW9uID0gYnJlYWtwb2ludC0+Z2V0
T2JqZWN0KCJjb25kaXRpb24iKTsKKyAgICBpZiAoIWNvbmRpdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7
CisgICAgICAgIFN0cmluZyBldmVudE5hbWU7CisgICAgICAgIGlmIChjb25kaXRpb24tPmdldFN0
cmluZygiZXZlbnROYW1lIiwgJmV2ZW50TmFtZSkpCisgICAgICAgICAgICBzZXRFdmVudExpc3Rl
bmVyQnJlYWtwb2ludChldmVudE5hbWUpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJOYXRp
dmVCcmVha3BvaW50VHlwZSkgeworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBpZiAoY29u
ZGl0aW9uLT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQorICAgICAgICAgICAgc2V0WEhSQnJlYWtw
b2ludCh1cmwpOworICAgIH0KK30KKwogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBtX2V2
ZW50TGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZlbnROYW1lKTsKQEAgLTE0MjgsMTIgKzE0ODEs
NiBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6Omhhc1hIUkJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiB1cmwsIFN0cmluZyogYnJlYWtwb2ludAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhck5hdGl2ZUJyZWFrcG9pbnRzKCkKLXsKLSAgICBt
X2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jbGVhcigpOwotICAgIG1fWEhSQnJlYWtwb2ludHMu
Y2xlYXIoKTsKLSAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKLX0K
ICNlbmRpZgogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDE0ZDU2MzIuLmU0ZGI5YzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI1NSw2ICsyNTUsNyBAQCBwdWJsaWM6
CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJBZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVzdW1lKCk7CiAKKyAgICB2
b2lkIHNldFN0aWNreUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVh
a3BvaW50cyk7CiAgICAgdm9pZCBzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSk7CiAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7CiAgICAgYm9vbCBoYXNFdmVudExpc3RlbmVyQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7CkBAIC0zMDksOCArMzEwLDggQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIHRvZ2dsZVJlY29y
ZEJ1dHRvbihib29sKTsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wg
YWx3YXlzKTsKLQotICAgIHZvaWQgY2xlYXJOYXRpdmVCcmVha3BvaW50cygpOworICAgIHZvaWQg
cmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCByZXN0b3JlU3RpY2t5QnJlYWtw
b2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9pZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0
YWJhc2UpOwpAQCAtMzkxLDYgKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+
IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX1hIUkJy
ZWFrcG9pbnRzOwogICAgIGJvb2wgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMOworICAg
IGJvb2wgbV9zdGlja3lCcmVha3BvaW50c1Jlc3RvcmVkOwogCiAgICAgT3duUHRyPEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3RhdGUuY3BwCmluZGV4IGFiOTAwZTcuLjA4NjU2NDggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTQwLDE1ICs0MCwxNiBAQCBJbnNwZWN0b3JTdGF0ZTo6SW5z
cGVjdG9yU3RhdGUoSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2NsaWVudChjbGll
bnQpCiB7CiAgICAgcmVnaXN0ZXJCb29sZWFuKG1vbml0b3JpbmdYSFIsIGZhbHNlLCAibW9uaXRv
cmluZ1hIUkVuYWJsZWQiLCAieGhyTW9uaXRvciIpOwotICAgIHJlZ2lzdGVyQm9vbGVhbih0aW1l
bGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UsICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCIsIChj
b25zdCBjaGFyKikwKTsKLSAgICByZWdpc3RlckJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZSwgZmFs
c2UsICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKLSAgICByZWdp
c3RlckJvb2xlYW4ocHJvZmlsZXJBbHdheXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAs
ICJwcm9maWxlckVuYWJsZWQiKTsKLSAgICByZWdpc3RlckJvb2xlYW4oZGVidWdnZXJBbHdheXNF
bmFibGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAsICJkZWJ1Z2dlckVuYWJsZWQiKTsKLSAgICBy
ZWdpc3RlckJvb2xlYW4oaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQsIHRydWUsIChjb25zdCBjaGFy
KikwLCAiSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQiKTsKLSAgICByZWdpc3RlckxvbmcoaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHQsIEluc3BlY3RvckNvbnRyb2xsZXI6OmRlZmF1bHRBdHRhY2hlZEhl
aWdodCwgKGNvbnN0IGNoYXIqKTAsICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCIpOwotICAgIHJl
Z2lzdGVyTG9uZyhwYXVzZU9uRXhjZXB0aW9uc1N0YXRlLCAwLCAicGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSIsIChjb25zdCBjaGFyKikwKTsKLSAgICByZWdpc3RlckJvb2xlYW4oY29uc29sZU1lc3Nh
Z2VzRW5hYmxlZCwgZmFsc2UsICJjb25zb2xlTWVzc2FnZXNFbmFibGVkIiwgKGNvbnN0IGNoYXIq
KTApOwotICAgIHJlZ2lzdGVyQm9vbGVhbih1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCBmYWxzZSwg
InVzZXJJbml0aWF0ZWRQcm9maWxpbmciLCAoY29uc3QgY2hhciopMCk7CisgICAgcmVnaXN0ZXJC
b29sZWFuKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCBmYWxzZSwgInRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkIiwgU3RyaW5nKCkpOworICAgIHJlZ2lzdGVyQm9vbGVhbihzZWFyY2hpbmdGb3JOb2Rl
LCBmYWxzZSwgInNlYXJjaGluZ0Zvck5vZGVFbmFibGVkIiwgU3RyaW5nKCkpOworICAgIHJlZ2lz
dGVyQm9vbGVhbihwcm9maWxlckFsd2F5c0VuYWJsZWQsIGZhbHNlLCBTdHJpbmcoKSwgInByb2Zp
bGVyRW5hYmxlZCIpOworICAgIHJlZ2lzdGVyQm9vbGVhbihkZWJ1Z2dlckFsd2F5c0VuYWJsZWQs
IGZhbHNlLCBTdHJpbmcoKSwgImRlYnVnZ2VyRW5hYmxlZCIpOworICAgIHJlZ2lzdGVyQm9vbGVh
bihpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgdHJ1ZSwgU3RyaW5nKCksICJJbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCIpOworICAgIHJlZ2lzdGVyTG9uZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCwg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCBTdHJpbmcoKSwgImlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0Iik7CisgICAgcmVnaXN0ZXJMb25nKHBhdXNlT25FeGNlcHRp
b25zU3RhdGUsIDAsICJwYXVzZU9uRXhjZXB0aW9uc1N0YXRlIiwgU3RyaW5nKCkpOworICAgIHJl
Z2lzdGVyQm9vbGVhbihjb25zb2xlTWVzc2FnZXNFbmFibGVkLCBmYWxzZSwgImNvbnNvbGVNZXNz
YWdlc0VuYWJsZWQiLCBTdHJpbmcoKSk7CisgICAgcmVnaXN0ZXJCb29sZWFuKHVzZXJJbml0aWF0
ZWRQcm9maWxpbmcsIGZhbHNlLCAidXNlckluaXRpYXRlZFByb2ZpbGluZyIsIFN0cmluZygpKTsK
KyAgICByZWdpc3Rlck9iamVjdChzdGlja3lCcmVha3BvaW50cywgU3RyaW5nKCksIFN0cmluZygp
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUo
Y29uc3QgU3RyaW5nJiBqc29uKQpAQCAtMTUyLDYgKzE1MywyNCBAQCBsb25nIEluc3BlY3RvclN0
YXRlOjpnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgaWQpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3RhdGU6OmdldE9iamVj
dChJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBp
ID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5l
bmQoKSk7CisgICAgcmV0dXJuIGktPnNlY29uZC5tX3ZhbHVlLT5hc09iamVjdCgpOworfQorCit2
b2lkIEluc3BlY3RvclN0YXRlOjpzZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoreworICAgIFByb3BlcnR5TWFwOjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVy
dGllcy5lbmQoKSk7CisgICAgUHJvcGVydHkmIHByb3BlcnR5ID0gaS0+c2Vjb25kOworICAgIHBy
b3BlcnR5Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICBpZiAocHJvcGVydHkubV9wcmVmZXJlbmNlTmFt
ZS5sZW5ndGgoKSkKKyAgICAgICAgbV9jbGllbnQtPnN0b3JlU2V0dGluZyhwcm9wZXJ0eS5tX3By
ZWZlcmVuY2VOYW1lLCB2YWx1ZS0+dG9KU09OU3RyaW5nKCkpOworICAgIHVwZGF0ZUNvb2tpZSgp
OworfQorCiB2b2lkIEluc3BlY3RvclN0YXRlOjpyZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJv
cGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxp
YXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCiB7CiAgICAgbV9wcm9wZXJ0aWVzLnNl
dChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0
ZSh2YWx1ZSksIGZyb250ZW5kQWxpYXMsIHByZWZlcmVuY2VOYW1lKSk7CkBAIC0xNjcsNiArMTg2
LDExIEBAIHZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyTG9uZyhJbnNwZWN0b3JQcm9wZXJ0
eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFsdWUsIGNvCiAgICAgbV9wcm9wZXJ0aWVzLnNldChwcm9w
ZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91
YmxlKXZhbHVlKSwgZnJvbnRlbmRBbGlhcywgcHJlZmVyZW5jZU5hbWUpKTsKIH0KIAordm9pZCBJ
bnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0
eUlkLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5j
ZU5hbWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3Jl
YXRlKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGZyb250ZW5kQWxpYXMsIHByZWZlcmVuY2VO
YW1lKSk7Cit9CisKIEluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eSBJbnNwZWN0b3JTdGF0ZTo6UHJv
cGVydHk6OmNyZWF0ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBmcm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKQogewogICAg
IFByb3BlcnR5IHByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3RhdGUuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKaW5kZXggYWEy
ZjFlYy4uNGY1N2RhNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3Rh
dGUuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCkBAIC01NSw2ICs1
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwKICAgICAgICAg
Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCwKICAgICAgICAgdXNlckluaXRpYXRlZFByb2ZpbGluZywK
KyAgICAgICAgc3RpY2t5QnJlYWtwb2ludHMsCiAgICAgICAgIGxhc3RQcm9wZXJ0eUlkCiAgICAg
fTsKIApAQCAtNjgsMTAgKzY5LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGdldEJvb2xlYW4oSW5z
cGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkKTsKICAgICBTdHJpbmcgZ2V0U3RyaW5nKEluc3Bl
Y3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCk7CiAgICAgbG9uZyBnZXRMb25nKEluc3BlY3RvclBy
b3BlcnR5SWQgcHJvcGVydHlJZCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdl
dE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKTsKIAogICAgIHZvaWQgc2V0Qm9vbGVhbihJ
bnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUpIHsgc2V0VmFsdWUocHJv
cGVydHlJZCwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSwgdmFsdWUgPyAidHJ1
ZSIgOiAiZmFsc2UiKTsgfQogICAgIHZvaWQgc2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJ
bnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSksIHZhbHVlKTsgfQogICAgIHZvaWQgc2V0TG9u
ZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFsdWUpIHsgc2V0VmFsdWUo
cHJvcGVydHlJZCwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBT
dHJpbmc6Om51bWJlcih2YWx1ZSkpOyB9CisgICAgdm9pZCBzZXRPYmplY3QoSW5zcGVjdG9yUHJv
cGVydHlJZCBwcm9wZXJ0eUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpOwog
CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQ29va2llKCk7CkBAIC04OSw2ICs5Miw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9w
ZXJ0eUlkLCBib29sIHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNvbnN0IFN0
cmluZyYgcHJlZmVyZW5jZU5hbWUpOwogICAgIHZvaWQgcmVnaXN0ZXJTdHJpbmcoSW5zcGVjdG9y
UHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcm
IGZyb250ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOwogICAgIHZvaWQg
cmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSwg
Y29uc3QgU3RyaW5nJiBmcm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1l
KTsKKyAgICB2b2lkIHJlZ2lzdGVyT2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJ
ZCwgY29uc3QgU3RyaW5nJiBmcm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VO
YW1lKTsKIAogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiB9OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDA0ZmZjZDMu
LjE3MmYwYTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dE1hbmFnZXIuanMKQEAgLTMwLDggKzMwLDE2IEBACiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlciA9IGZ1bmN0aW9uKCkKIHsKKyAgICB0aGlzLl9zdGlja3lCcmVha3BvaW50cyA9IHt9
OworICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5maW5kU2V0dGlu
Z0ZvckFsbFByb2plY3RzKCJuYXRpdmVCcmVha3BvaW50cyIpOworICAgIGZvciAodmFyIHByb2pl
Y3RJZCBpbiBicmVha3BvaW50cykKKyAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbcHJv
amVjdElkXSA9IHRoaXMuX3ZhbGlkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNbcHJvamVjdElk
XSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdGlja3lCcmVha3BvaW50cyh0aGlzLl9zdGlj
a3lCcmVha3BvaW50cyk7CisKICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAg
IHRoaXMuX2RvbUJyZWFrcG9pbnRzUmVzdG9yZWQgPSBmYWxzZTsKIAorICAgIFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5FdmVudHMu
UHJvamVjdENoYW5nZWQsIHRoaXMuX3Byb2plY3RDaGFuZ2VkLCB0aGlzKTsKICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKCJuYXRpdmUtYnJlYWtwb2ludC1o
aXQiLCB0aGlzLl9uYXRpdmVCcmVha3BvaW50SGl0LCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKCJkZWJ1Z2dlci1yZXN1bWVkIiwgdGhpcy5f
ZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsKIH0KQEAgLTQyLDggKzUwLDIxIEBAIFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMgPSB7CiAgICAgWEhSOiAi
WEhSIgogfQogCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzID0geworICAg
IERPTUJyZWFrcG9pbnRBZGRlZDogImRvbS1icmVha3BvaW50LWFkZGVkIiwKKyAgICBFdmVudExp
c3RlbmVyQnJlYWtwb2ludEFkZGVkOiAiZXZlbnQtbGlzdGVuZXItYnJlYWtwb2ludC1hZGRlZCIs
CisgICAgWEhSQnJlYWtwb2ludEFkZGVkOiAieGhyLWJyZWFrcG9pbnQtYWRkZWQiLAorICAgIE5h
dGl2ZUJyZWFrcG9pbnRIaXQ6ICJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLAorICAgIFByb2plY3RD
aGFuZ2VkOiAicHJvamVjdC1jaGFuZ2VkIgorfQorCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlID0gewotICAgIGNyZWF0ZURPTUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKG5v
ZGVJZCwgdHlwZSwgZGlzYWJsZWQpCisgICAgY3JlYXRlRE9NQnJlYWtwb2ludDogZnVuY3Rpb24o
bm9kZUlkLCB0eXBlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY3JlYXRlRE9NQnJlYWtwb2ludChu
b2RlSWQsIHR5cGUsIHRydWUsIGZhbHNlKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZURPTUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKG5vZGVJZCwgdHlwZSwgZW5hYmxlZCwgcmVzdG9yZWQpCiAgICAgewog
ICAgICAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQobm9kZUlk
KTsKICAgICAgICAgaWYgKCFub2RlKQpAQCAtNTMsNzMgKzc0LDgyIEBAIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChicmVha3BvaW50SWQg
aW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQodGhpcywg
YnJlYWtwb2ludElkLCAhZGlzYWJsZWQsIG5vZGUsIHR5cGUpOwotICAgICAgICB0aGlzLl9uYXRp
dmVCcmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5f
dXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJkb20tYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnQpOwot
ICAgICAgICByZXR1cm4gYnJlYWtwb2ludDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcg
V2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQobm9kZSwgdHlwZSk7CisgICAgICAgIHRoaXMuX3Nl
dE5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0
b3JlZCk7CisgICAgICAgIGlmIChlbmFibGVkICYmIHJlc3RvcmVkKQorICAgICAgICAgICAgYnJl
YWtwb2ludC5fZW5hYmxlKCk7CisKKyAgICAgICAgYnJlYWtwb2ludC52aWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5ET01CcmVha3BvaW50Vmlldyh0aGlzLCBicmVha3BvaW50SWQsIGVuYWJsZWQsIG5v
ZGUsIHR5cGUpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLkRPTUJyZWFrcG9pbnRBZGRlZCwgYnJlYWtw
b2ludC52aWV3KTsKICAgICB9LAogCiAgICAgY3JlYXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKGV2ZW50TmFtZSkKICAgICB7CisgICAgICAgIHRoaXMuX2NyZWF0ZUV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpOworICAgIH0sCisKKyAgICBf
Y3JlYXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZW5hYmxl
ZCwgcmVzdG9yZWQpCisgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3Jl
YXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRJZChldmVudE5hbWUpOwogICAgICAgICBpZiAoYnJl
YWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3Rl
bmVyQnJlYWtwb2ludCh0aGlzLCBicmVha3BvaW50SWQsIHRydWUsIGV2ZW50TmFtZSk7Ci0gICAg
ICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBicmVha3BvaW50Owot
ICAgICAgICB0aGlzLl91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKLSAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImV2ZW50LWxpc3RlbmVyLWJyZWFrcG9p
bnQtYWRkZWQiLCB7IGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsIGV2ZW50TmFtZTogZXZlbnROYW1l
IH0pOwotICAgICAgICByZXR1cm4gYnJlYWtwb2ludDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7Cisg
ICAgICAgIHRoaXMuX3NldE5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBicmVha3BvaW50
LCBlbmFibGVkLCByZXN0b3JlZCk7CisKKyAgICAgICAgYnJlYWtwb2ludC52aWV3ID0gbmV3IFdl
Ykluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludFZpZXcodGhpcywgYnJlYWtwb2ludElk
LCBlbmFibGVkLCBldmVudE5hbWUpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnQudmlldyk7CisgICAgfSwKKworICAgIGNyZWF0ZVhI
UkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NyZWF0ZVhI
UkJyZWFrcG9pbnQodXJsLCB0cnVlLCBmYWxzZSk7CiAgICAgfSwKIAotICAgIGNyZWF0ZVhIUkJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCwgZGlzYWJsZWQpCisgICAgX2NyZWF0ZVhIUkJyZWFrcG9p
bnQ6IGZ1bmN0aW9uKHVybCwgZW5hYmxlZCwgcmVzdG9yZWQpCiAgICAgewogICAgICAgICB2YXIg
YnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlWEhSQnJlYWtwb2ludElkKHVybCk7CiAgICAgICAg
IGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlhI
UkJyZWFrcG9pbnQodGhpcywgYnJlYWtwb2ludElkLCAhZGlzYWJsZWQsIHVybCk7CisgICAgICAg
IHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50KHVybCk7Cisg
ICAgICAgIHRoaXMuX3NldE5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBicmVha3BvaW50
LCBlbmFibGVkLCByZXN0b3JlZCk7CisKKyAgICAgICAgYnJlYWtwb2ludC52aWV3ID0gbmV3IFdl
Ykluc3BlY3Rvci5YSFJCcmVha3BvaW50Vmlldyh0aGlzLCBicmVha3BvaW50SWQsIGVuYWJsZWQs
IHVybCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMuWEhSQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50
LnZpZXcpOworICAgIH0sCisKKyAgICBfc2V0TmF0aXZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJl
YWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCkKKyAgICB7CiAgICAgICAg
IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBicmVha3BvaW50OwotICAg
ICAgICB0aGlzLl91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKLSAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInhoci1icmVha3BvaW50LWFkZGVkIiwgYnJl
YWtwb2ludCk7Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50OworICAgICAgICBicmVha3BvaW50
LmVuYWJsZWQgPSBlbmFibGVkOworICAgICAgICBpZiAocmVzdG9yZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChlbmFibGVkKQorICAgICAgICAgICAgYnJlYWtwb2ludC5fZW5h
YmxlKCk7CisgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOwogICAgIH0sCiAKICAgICBf
c2V0TmF0aXZlQnJlYWtwb2ludEVuYWJsZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5hYmxl
ZCkKICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0aXZlQnJlYWtwb2lu
dHNbYnJlYWtwb2ludElkXTsKLQorICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkID09PSBl
bmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZW5hYmxlZCkKICAgICAg
ICAgICAgIGJyZWFrcG9pbnQuX2VuYWJsZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBi
cmVha3BvaW50Ll9kaXNhYmxlKCk7Ci0KLSAgICAgICAgYnJlYWtwb2ludC5fZW5hYmxlZCA9IGVu
YWJsZWQ7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygp
OwotICAgICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNo
YW5nZWQiKTsKKyAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAg
dGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CiAgICAgfSwKIAogICAgIF9yZW1vdmVOYXRpdmVCcmVh
a3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50SWQpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07Ci0KICAgICAgICAg
aWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKICAgICAgICAgICAgIGJyZWFrcG9pbnQuX2Rpc2FibGUo
KTsKLQogICAgICAgICBkZWxldGUgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtwb2ludElk
XTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7Ci0g
ICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7Ci0g
ICAgfSwKLQotICAgIF91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3M6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwotICAgICAgICBmb3IgKHZh
ciBpZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykgewotICAgICAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1tpZF07Ci0gICAgICAgICAgICBicmVha3Bv
aW50cy5wdXNoKGJyZWFrcG9pbnQuX3NlcmlhbGl6ZVRvSlNPTigpKTsKLSAgICAgICAgfQotICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubmF0aXZlQnJlYWtwb2ludHMgPSBicmVha3BvaW50
czsKKyAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CiAgICAgfSwKIAogICAgIF9uYXRp
dmVCcmVha3BvaW50SGl0OiBmdW5jdGlvbihldmVudCkKQEAgLTEzOCwzMCArMTY4LDMyIEBAIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICgh
YnJlYWtwb2ludCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBicmVha3BvaW50Lmhp
dCA9IHRydWU7CisgICAgICAgIGJyZWFrcG9pbnQudmlldy5oaXQgPSB0cnVlOwogICAgICAgICB0
aGlzLl9sYXN0SGl0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB7IGJyZWFrcG9pbnQ6
IGJyZWFrcG9pbnQsIGV2ZW50RGF0YTogZXZlbnREYXRhIH0pOworICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRz
Lk5hdGl2ZUJyZWFrcG9pbnRIaXQsIHsgYnJlYWtwb2ludDogYnJlYWtwb2ludC52aWV3LCBldmVu
dERhdGE6IGV2ZW50RGF0YSB9KTsKICAgICB9LAogCiAgICAgX2RlYnVnZ2VyUmVzdW1lZDogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2xhc3RIaXRCcmVha3BvaW50
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludC5o
aXQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQudmlldy5oaXQgPSBm
YWxzZTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RIaXRCcmVha3BvaW50OwogICAgIH0sCiAK
LSAgICByZXN0b3JlQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKKyAgICBfcHJvamVjdENoYW5nZWQ6
IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5f
cGVyc2lzdGVudEJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIHRoaXMuX2RvbUJyZWFrcG9pbnRzID0g
W107CisgICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzID0ge307CisgICAgICAgIHRoaXMu
X2RvbUJyZWFrcG9pbnRzUmVzdG9yZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5Qcm9q
ZWN0Q2hhbmdlZCk7CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fc3RpY2t5QnJl
YWtwb2ludHNbV2ViSW5zcGVjdG9yLnNldHRpbmdzLnByb2plY3RJZF0gfHwgW107CiAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKLSAgICAgICAgICAgICAgICB0aGlzLl9k
b21CcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnRzW2ldKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGJyZWFrcG9pbnRzW2ldLnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5O
YXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKLSAgICAgICAgICAgICAgICB0aGlz
LmNyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbi5l
dmVudE5hbWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PT0g
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5YSFIp
Ci0gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVYSFJCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ld
LmNvbmRpdGlvbi51cmwsICFicmVha3BvaW50c1tpXS5lbmFibGVkKTsKKyAgICAgICAgICAgIHZh
ciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07CisgICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2lu
dFR5cGVzLkV2ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoYnJlYWtwb2ludC5jb25kaXRpb24uZXZlbnROYW1lLCBicmVha3Bv
aW50LmVuYWJsZWQsIHRydWUpOworICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludC50eXBl
ID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVz
LlhIUikKKyAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVYSFJCcmVha3BvaW50KGJyZWFrcG9p
bnQuY29uZGl0aW9uLnVybCwgYnJlYWtwb2ludC5lbmFibGVkLCB0cnVlKTsKICAgICAgICAgfQog
ICAgIH0sCiAKQEAgLTE3NCwxNiArMjA2LDE4IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAocGVuZGluZ0NhbGxzKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtw
b2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludHNbaV0u
dHlwZSAhPT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRU
eXBlcy5ET00pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07CisgICAgICAgICAgICAgICAgaWYgKGJy
ZWFrcG9pbnQudHlwZSAhPT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJy
ZWFrcG9pbnRUeXBlcy5ET00pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIHZhciBub2RlSWQgPSBwYXRoVG9Ob2RlSWRbYnJlYWtwb2ludC5jb25kaXRpb24u
cGF0aF07CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVJZCkKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5jcmVhdGVET01CcmVha3BvaW50KG5vZGVJZCwgYnJlYWtwb2ludC5jb25kaXRpb24udHlw
ZSwgIWJyZWFrcG9pbnQuZW5hYmxlZCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0
ZURPTUJyZWFrcG9pbnQobm9kZUlkLCBicmVha3BvaW50LmNvbmRpdGlvbi50eXBlLCBicmVha3Bv
aW50LmVuYWJsZWQsIHRydWUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZG9t
QnJlYWtwb2ludHNSZXN0b3JlZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9zYXZlQnJlYWtw
b2ludHMoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX2Rv
bUJyZWFrcG9pbnRzOworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9zdGlja3lCcmVh
a3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8fCBbXTsKICAgICAgICAg
dmFyIHBhdGhUb05vZGVJZCA9IHt9OwogICAgICAgICB2YXIgcGVuZGluZ0NhbGxzID0gMDsKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewpAQCAt
MTk2LDIwICsyMzAsNjEgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHBlbmRpbmdDYWxscyArPSAxOwogICAgICAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQocGF0aCwgZGlkUHVzaE5vZGVCeVBh
dGhUb0Zyb250ZW5kLmJpbmQodGhpcywgcGF0aCkpOwogICAgICAgICB9CisgICAgICAgIGlmICgh
cGVuZGluZ0NhbGxzKQorICAgICAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3JlZCA9
IHRydWU7CiAgICAgfSwKIAotICAgIF9wZXJzaXN0ZW50QnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkK
KyAgICBfc2F2ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgcmVz
dWx0ID0gW107Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0aW5n
cy5uYXRpdmVCcmVha3BvaW50czsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRzIGluc3RhbmNlb2Yg
QXJyYXkpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRz
W2ldOwotICAgICAgICAgICAgICAgIGlmICgidHlwZSIgaW4gYnJlYWtwb2ludCAmJiAiY29uZGl0
aW9uIiBpbiBicmVha3BvaW50KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChicmVh
a3BvaW50KQorICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
YnJlYWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07Cisg
ICAgICAgICAgICB2YXIgcGVyc2lzdGVudEJyZWFrcG9pbnQgPSBicmVha3BvaW50Ll9zZXJpYWxp
emVUb0pTT04oKTsKKyAgICAgICAgICAgIHBlcnNpc3RlbnRCcmVha3BvaW50LmVuYWJsZWQgPSBi
cmVha3BvaW50LmVuYWJsZWQ7CisgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHBlcnNpc3Rl
bnRCcmVha3BvaW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2RvbUJyZWFrcG9p
bnRzUmVzdG9yZWQpIHsKKyAgICAgICAgICAgIHZhciBzdGlja3lCcmVha3BvaW50cyA9IHRoaXMu
X3N0aWNreUJyZWFrcG9pbnRzW1dlYkluc3BlY3Rvci5zZXR0aW5ncy5wcm9qZWN0SWRdIHx8IFtd
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGlja3lCcmVha3BvaW50cy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChzdGlja3lCcmVha3BvaW50c1tpXS50eXBl
ID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVz
LkRPTSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaChzdGlja3lCcmVha3Bv
aW50c1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9y
LnNldHRpbmdzLm5hdGl2ZUJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7CisKKyAgICAgICAgdGhp
cy5fc3RpY2t5QnJlYWtwb2ludHNbV2ViSW5zcGVjdG9yLnNldHRpbmdzLnByb2plY3RJZF0gPSBi
cmVha3BvaW50czsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdGlja3lCcmVha3BvaW50
cyh0aGlzLl9zdGlja3lCcmVha3BvaW50cyk7CisgICAgfSwKKworICAgIF92YWxpZGF0ZUJyZWFr
cG9pbnRzOiBmdW5jdGlvbihwZXJzaXN0ZW50QnJlYWtwb2ludHMpCisgICAgeworICAgICAgICB2
YXIgYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzU2V0ID0ge307Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVyc2lzdGVudEJyZWFrcG9pbnRzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHBlcnNpc3RlbnRCcmVha3BvaW50
c1tpXTsKKyAgICAgICAgICAgIGlmICghKCJ0eXBlIiBpbiBicmVha3BvaW50ICYmICJlbmFibGVk
IiBpbiBicmVha3BvaW50ICYmICJjb25kaXRpb24iIGluIGJyZWFrcG9pbnQpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIGlkID0gYnJlYWtwb2ludC50eXBlICsg
IjoiOworICAgICAgICAgICAgdmFyIGNvbmRpdGlvbiA9IGJyZWFrcG9pbnQuY29uZGl0aW9uOwor
ICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5ET00pIHsKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZW9mIGNvbmRpdGlvbi5wYXRoICE9PSAic3RyaW5nIiB8fCB0eXBlb2YgY29uZGl0aW9u
LnR5cGUgIT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBpZCArPSBjb25kaXRpb24ucGF0aCArICI6IiArIGNvbmRpdGlvbi50eXBlOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikgewor
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLmV2ZW50TmFtZSAhPT0gInN0cmlu
ZyIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlkICs9
IGNvbmRpdGlvbi5ldmVudE5hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9pbnQu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRU
eXBlcy5YSFIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51cmwgIT09
ICJzdHJpbmciKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZCArPSBjb25kaXRpb24udXJsOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlk
IGluIGJyZWFrcG9pbnRzU2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgYnJlYWtwb2ludHNTZXRbaWRdID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1
c2goYnJlYWtwb2ludCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIGJyZWFrcG9pbnRzOwogICAgIH0sCiAKICAgICBfY3JlYXRlRE9NQnJlYWtwb2lu
dElkOiBmdW5jdGlvbihub2RlSWQsIHR5cGUpCkBAIC0yMjUsMTcgKzMwMCw4NSBAQCBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgIF9jcmVhdGVYSFJCcmVh
a3BvaW50SWQ6IGZ1bmN0aW9uKHVybCkKICAgICB7CiAgICAgICAgIHJldHVybiAieGhyOiIgKyB1
cmw7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworCitXZWJJbnNwZWN0
b3IuRE9NQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpCit7CisgICAgdGhpcy5fbm9k
ZUlkID0gbm9kZS5pZDsKKyAgICB0aGlzLl9wYXRoID0gbm9kZS5wYXRoKCk7CisgICAgdGhpcy5f
dHlwZSA9IHR5cGU7Cit9CisKK1dlYkluc3BlY3Rvci5ET01CcmVha3BvaW50LnByb3RvdHlwZSA9
IHsKKyAgICBfZW5hYmxlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLnNldERPTUJyZWFrcG9pbnQodGhpcy5fbm9kZUlkLCB0aGlzLl90eXBlKTsKICAgICB9LAog
Ci0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICBfZGlzYWJsZTogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5yZW1vdmVET01CcmVha3BvaW50KHRoaXMuX25vZGVJZCwgdGhpcy5fdHlwZSk7Cisg
ICAgfSwKKworICAgIF9zZXJpYWxpemVUb0pTT046IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9p
bnRUeXBlcy5ET007CisgICAgICAgIHJldHVybiB7IHR5cGU6IHR5cGUsIGNvbmRpdGlvbjogeyBw
YXRoOiB0aGlzLl9wYXRoLCB0eXBlOiB0aGlzLl90eXBlIH0gfTsKICAgICB9CiB9CiAKLVdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnQgPSBmdW5jdGlvbihldmVudE5hbWUpCit7CisgICAgdGhpcy5fZXZlbnROYW1lID0gZXZlbnRO
YW1lOworfQorCitXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQucHJvdG90eXBl
ID0geworICAgIF9lbmFibGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQodGhpcy5fZXZlbnROYW1lKTsKKyAgICB9
LAorCisgICAgX2Rpc2FibGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQucmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQodGhpcy5fZXZlbnROYW1lKTsKKyAg
ICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2lu
dFR5cGVzLkV2ZW50TGlzdGVuZXI7CisgICAgICAgIHJldHVybiB7IHR5cGU6IHR5cGUsIGNvbmRp
dGlvbjogeyBldmVudE5hbWU6IHRoaXMuX2V2ZW50TmFtZSB9IH07CisgICAgfQorfQorCitXZWJJ
bnNwZWN0b3IuWEhSQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHVybCkKK3sKKyAgICB0aGlzLl91cmwg
PSB1cmw7Cit9CisKK1dlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKKyAg
ICBfZW5hYmxlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNl
dFhIUkJyZWFrcG9pbnQodGhpcy5fdXJsKTsKKyAgICB9LAogCi1XZWJJbnNwZWN0b3IuTmF0aXZl
QnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFibGVkKQorICAgIF9kaXNhYmxl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZVhIUkJy
ZWFrcG9pbnQodGhpcy5fdXJsKTsKKyAgICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUjsKKyAgICAgICAgcmV0dXJuIHsgdHlw
ZTogdHlwZSwgY29uZGl0aW9uOiB7IHVybDogdGhpcy5fdXJsIH0gfTsKKyAgICB9Cit9CisKKwor
CitXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludFZpZXcgPSBmdW5jdGlvbihtYW5hZ2VyLCBp
ZCwgZW5hYmxlZCkKIHsKICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjsKICAgICB0aGlzLl9p
ZCA9IGlkOwpAQCAtMjQzLDcgKzM4Niw3IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50
ID0gZnVuY3Rpb24obWFuYWdlciwgaWQsIGVuYWJsZWQpCiAgICAgdGhpcy5faGl0ID0gZmFsc2U7
CiB9CiAKLVdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKK1dlYklu
c3BlY3Rvci5OYXRpdmVCcmVha3BvaW50Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGVuYWJs
ZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CkBAIC0yNTIsNiArMzk1
LDggQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgIHNl
dCBlbmFibGVkKGVuYWJsZWQpCiAgICAgewogICAgICAgICB0aGlzLl9tYW5hZ2VyLl9zZXROYXRp
dmVCcmVha3BvaW50RW5hYmxlZCh0aGlzLl9pZCwgZW5hYmxlZCk7CisgICAgICAgIHRoaXMuX2Vu
YWJsZWQgPSBlbmFibGVkOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygi
ZW5hYmxlLWNoYW5nZWQiKTsKICAgICB9LAogCiAgICAgZ2V0IGhpdCgpCkBAIC0yNjksNiArNDE0
LDcgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgIHsK
ICAgICAgICAgdGhpcy5fbWFuYWdlci5fcmVtb3ZlTmF0aXZlQnJlYWtwb2ludCh0aGlzLl9pZCk7
CiAgICAgICAgIHRoaXMuX29uUmVtb3ZlKCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJyZW1vdmVkIik7CiAgICAgfSwKIAogICAgIF9jb21wYXJlOiBmdW5jdGlvbih4
LCB5KQpAQCAtMjgzLDIyICs0MjksMTggQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQu
cHJvdG90eXBlID0gewogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2Vi
SW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQg
PSBmdW5jdGlvbihtYW5hZ2VyLCBpZCwgZW5hYmxlZCwgbm9kZSwgdHlwZSkKK1dlYkluc3BlY3Rv
ci5ET01CcmVha3BvaW50VmlldyA9IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFibGVkLCBub2Rl
LCB0eXBlKQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywg
bWFuYWdlciwgaWQsIGVuYWJsZWQpOworICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50
Vmlldy5jYWxsKHRoaXMsIG1hbmFnZXIsIGlkLCBlbmFibGVkKTsKICAgICB0aGlzLl9ub2RlID0g
bm9kZTsKICAgICB0aGlzLl9ub2RlSWQgPSBub2RlLmlkOwotICAgIHRoaXMuX3BhdGggPSBub2Rl
LnBhdGgoKTsKICAgICB0aGlzLl90eXBlID0gdHlwZTsKLSAgICBpZiAoZW5hYmxlZCkKLSAgICAg
ICAgdGhpcy5fZW5hYmxlKCk7Ci0KICAgICBub2RlLmJyZWFrcG9pbnRzW3RoaXMuX3R5cGVdID0g
dGhpczsKIH0KIAotV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlID0geworV2Vi
SW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICBjb21wYXJlVG86
IGZ1bmN0aW9uKG90aGVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmUodGhp
cy5fdHlwZSwgb3RoZXIuX3R5cGUpOwpAQCAtMzQ0LDUxICs0ODYsMzggQEAgV2ViSW5zcGVjdG9y
LkRPTUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmZv
cm1hdExvY2FsaXplZCgiUGF1c2VkIG9uIGEgXCIlc1wiIGJyZWFrcG9pbnQgc2V0IG9uICVzLiIs
IHN1YnN0aXR1dGlvbnMsIGZvcm1hdHRlcnMsICIiLCBhcHBlbmQpOwogICAgIH0sCiAKLSAgICBf
ZW5hYmxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldERP
TUJyZWFrcG9pbnQodGhpcy5fbm9kZUlkLCB0aGlzLl90eXBlKTsKLSAgICB9LAotCi0gICAgX2Rp
c2FibGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3Zl
RE9NQnJlYWtwb2ludCh0aGlzLl9ub2RlSWQsIHRoaXMuX3R5cGUpOwotICAgIH0sCi0KLSAgICBf
c2VyaWFsaXplVG9KU09OOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdHlwZSA9IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRE9NOwot
ICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBlbmFibGVkOiB0aGlzLl9lbmFibGVkLCBjb25k
aXRpb246IHsgcGF0aDogdGhpcy5fcGF0aCwgdHlwZTogdGhpcy5fdHlwZSB9IH07Ci0gICAgfSwK
LQogICAgIF9vblJlbW92ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMu
X25vZGUuYnJlYWtwb2ludHNbdGhpcy5fdHlwZV07CiAgICAgfQogfQogCi1XZWJJbnNwZWN0b3Iu
RE9NQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJy
ZWFrcG9pbnQucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRWaWV3LnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludFZpZXcucHJvdG90
eXBlOwogCi1XZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgPSBmdW5jdGlvbiht
YW5hZ2VyLCBpZCwgZW5hYmxlZCwgZXZlbnROYW1lKQorV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50VmlldyA9IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFibGVkLCBldmVudE5h
bWUpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5h
Z2VyLCBpZCwgZW5hYmxlZCk7CisgICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnRWaWV3
LmNhbGwodGhpcywgbWFuYWdlciwgaWQsIGVuYWJsZWQpOwogICAgIHRoaXMuX2V2ZW50TmFtZSA9
IGV2ZW50TmFtZTsKLSAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgdGhpcy5fZW5hYmxlKCk7CiB9
CiAKLVdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludC5ldmVudE5hbWVGb3JVSSA9
IGZ1bmN0aW9uKGV2ZW50TmFtZSkKK1dlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2lu
dFZpZXcuZXZlbnROYW1lRm9yVUkgPSBmdW5jdGlvbihldmVudE5hbWUpCiB7Ci0gICAgaWYgKCFX
ZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQuX2V2ZW50TmFtZXNGb3JVSSkgewot
ICAgICAgICBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQuX2V2ZW50TmFtZXNG
b3JVSSA9IHsKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludFZp
ZXcuX2V2ZW50TmFtZXNGb3JVSSkgeworICAgICAgICBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnRWaWV3Ll9ldmVudE5hbWVzRm9yVUkgPSB7CiAgICAgICAgICAgICAiaW5zdHJ1
bWVudGF0aW9uOnNldFRpbWVyIjogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZXQgVGltZXIiKSwK
ICAgICAgICAgICAgICJpbnN0cnVtZW50YXRpb246Y2xlYXJUaW1lciI6IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQ2xlYXIgVGltZXIiKSwKICAgICAgICAgICAgICJpbnN0cnVtZW50YXRpb246dGlt
ZXJGaXJlZCI6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGltZXIgRmlyZWQiKQogICAgICAgICB9
OwogICAgIH0KLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50
Ll9ldmVudE5hbWVzRm9yVUlbZXZlbnROYW1lXSB8fCBldmVudE5hbWUuc3Vic3RyaW5nKGV2ZW50
TmFtZS5pbmRleE9mKCI6IikgKyAxKTsKKyAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXJCcmVha3BvaW50Vmlldy5fZXZlbnROYW1lc0ZvclVJW2V2ZW50TmFtZV0gfHwgZXZlbnRO
YW1lLnN1YnN0cmluZyhldmVudE5hbWUuaW5kZXhPZigiOiIpICsgMSk7CiB9CiAKLVdlYkluc3Bl
Y3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CitXZWJJbnNwZWN0b3Iu
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgZXZlbnRO
YW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ldmVudE5hbWU7CisgICAgfSwKKwog
ICAgIGNvbXBhcmVUbzogZnVuY3Rpb24ob3RoZXIpCiAgICAgewogICAgICAgICByZXR1cm4gdGhp
cy5fY29tcGFyZSh0aGlzLl9ldmVudE5hbWUsIG90aGVyLl9ldmVudE5hbWUpOwpAQCAtNDA3LDM3
ICs1MzYsMTkgQEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LnByb3RvdHlw
ZSA9IHsKIAogICAgIF91aUV2ZW50TmFtZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludC5ldmVudE5hbWVGb3JVSSh0
aGlzLl9ldmVudE5hbWUpOwotICAgIH0sCi0KLSAgICBfZW5hYmxlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KHRo
aXMuX2V2ZW50TmFtZSk7Ci0gICAgfSwKLQotICAgIF9kaXNhYmxlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50
KHRoaXMuX2V2ZW50TmFtZSk7Ci0gICAgfSwKLQotICAgIF9zZXJpYWxpemVUb0pTT046IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5FdmVudExpc3RlbmVyOwotICAgICAgICByZXR1
cm4geyB0eXBlOiB0eXBlLCBlbmFibGVkOiB0aGlzLl9lbmFibGVkLCBjb25kaXRpb246IHsgZXZl
bnROYW1lOiB0aGlzLl9ldmVudE5hbWUgfSB9OworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LkV2ZW50TGlzdGVuZXJCcmVha3BvaW50Vmlldy5ldmVudE5hbWVGb3JVSSh0aGlzLl9ldmVudE5h
bWUpOwogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5
cGU7CitXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludFZpZXcucHJvdG90eXBlOwog
Ci1XZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFi
bGVkLCB1cmwpCitXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludFZpZXcgPSBmdW5jdGlvbihtYW5h
Z2VyLCBpZCwgZW5hYmxlZCwgdXJsKQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3Bv
aW50LmNhbGwodGhpcywgbWFuYWdlciwgaWQsIGVuYWJsZWQpOworICAgIFdlYkluc3BlY3Rvci5O
YXRpdmVCcmVha3BvaW50Vmlldy5jYWxsKHRoaXMsIG1hbmFnZXIsIGlkLCBlbmFibGVkKTsKICAg
ICB0aGlzLl91cmwgPSB1cmw7Ci0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHRoaXMuX2VuYWJs
ZSgpOwogfQogCi1XZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CitXZWJJ
bnNwZWN0b3IuWEhSQnJlYWtwb2ludFZpZXcucHJvdG90eXBlID0gewogICAgIGNvbXBhcmVUbzog
ZnVuY3Rpb24ob3RoZXIpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29tcGFyZSh0aGlz
Ll91cmwsIG90aGVyLl91cmwpOwpAQCAtNDYzLDI2ICs1NzQsMTAgQEAgV2ViSW5zcGVjdG9yLlhI
UkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIHN0YXR1cyA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUGF1c2VkIG9uIGEgWE1MSHR0cFJlcXVlc3QuIik7CiAgICAg
ICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RhdHVzKSk7
Ci0gICAgfSwKLQotICAgIF9lbmFibGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuc2V0WEhSQnJlYWtwb2ludCh0aGlzLl91cmwpOwotICAgIH0sCi0KLSAgICBf
ZGlzYWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1v
dmVYSFJCcmVha3BvaW50KHRoaXMuX3VybCk7Ci0gICAgfSwKLQotICAgIF9zZXJpYWxpemVUb0pT
T046IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5YSFI7Ci0gICAgICAgIHJldHVy
biB7IHR5cGU6IHR5cGUsIGVuYWJsZWQ6IHRoaXMuX2VuYWJsZWQsIGNvbmRpdGlvbjogeyB1cmw6
IHRoaXMuX3VybCB9IH07CiAgICAgfQogfQogCi1XZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90
eXBlOworV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludFZpZXcucHJvdG90eXBlOwogCiBXZWJJbnNw
ZWN0b3IuRE9NQnJlYWtwb2ludFR5cGVzID0gewogICAgIFN1YnRyZWVNb2RpZmllZDogMCwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQ
YW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBh
bmUuanMKaW5kZXggNDcxOTRkYS4uMDBiYjdjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKQEAgLTM1LDE4ICszNSwx
MSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKHRpdGxl
KQogICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJObyBCcmVha3BvaW50cyIpOwogCiAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLmVtcHR5RWxlbWVudCk7CisKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRz
LlByb2plY3RDaGFuZ2VkLCB0aGlzLl9wcm9qZWN0Q2hhbmdlZCwgdGhpcyk7CiB9CiAKIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICByZXNldDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5saXN0RWxlbWVudC5yZW1vdmVDaGlsZHJl
bigpOwotICAgICAgICBpZiAodGhpcy5saXN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7Ci0gICAg
ICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMubGlzdEVsZW1lbnQpOwot
ICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVu
dCk7Ci0gICAgICAgIH0KLSAgICB9LAotCiAgICAgYWRkQnJlYWtwb2ludEl0ZW06IGZ1bmN0aW9u
KGJyZWFrcG9pbnRJdGVtKQogICAgIHsKICAgICAgICAgdmFyIGVsZW1lbnQgPSBicmVha3BvaW50
SXRlbS5lbGVtZW50OwpAQCAtOTcsNiArOTAsMTUgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRz
U2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5y
ZW1vdmVDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKICAgICAgICAgICAgIHRoaXMuYm9keUVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5lbXB0eUVsZW1lbnQpOwogICAgICAgICB9CisgICAgfSwKKwor
ICAgIF9wcm9qZWN0Q2hhbmdlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5saXN0
RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICBpZiAodGhpcy5saXN0RWxlbWVudC5w
YXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxk
KHRoaXMubGlzdEVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTI1Niw3
ICsyNTgsOCBAQCBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBh
bmUgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jYXRlZ29yaWVzVHJlZU91dGxpbmUgPSBuZXcgVHJl
ZU91dGxpbmUodGhpcy5jYXRlZ29yaWVzRWxlbWVudCk7CiAgICAgdGhpcy5ib2R5RWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLmNhdGVnb3JpZXNFbGVtZW50KTsKIAotICAgIFdlYkluc3BlY3Rvci5i
cmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJldmVudC1saXN0ZW5lci1icmVha3Bv
aW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0
b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0aGlzLl9wcm9qZWN0Q2hhbmdlZCwg
dGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5FdmVudExpc3RlbmVyQnJl
YWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwogCiAgICAgdGhpcy5f
YnJlYWtwb2ludEl0ZW1zID0ge307CiAgICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoIktleWJvYXJk
IiwgImxpc3RlbmVyIiwgWyJrZXlkb3duIiwgImtleXVwIiwgImtleXByZXNzIiwgInRleHRJbnB1
dCJdKTsKQEAgLTI4OSw3ICsyOTIsNyBAQCBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFyIGV2ZW50TmFt
ZSA9IHR5cGUgKyAiOiIgKyBldmVudE5hbWVzW2ldOwogCiAgICAgICAgICAgICB2YXIgYnJlYWtw
b2ludEl0ZW0gPSB7fTsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9IFdlYkluc3BlY3Rvci5FdmVu
dExpc3RlbmVyQnJlYWtwb2ludC5ldmVudE5hbWVGb3JVSShldmVudE5hbWUpOworICAgICAgICAg
ICAgdmFyIHRpdGxlID0gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50Vmlldy5l
dmVudE5hbWVGb3JVSShldmVudE5hbWUpOwogICAgICAgICAgICAgYnJlYWtwb2ludEl0ZW0uZWxl
bWVudCA9IG5ldyBUcmVlRWxlbWVudCh0aXRsZSk7CiAgICAgICAgICAgICBjYXRlZ29yeUl0ZW0u
ZWxlbWVudC5hcHBlbmRDaGlsZChicmVha3BvaW50SXRlbS5lbGVtZW50KTsKICAgICAgICAgICAg
IHZhciBoaXRNYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKQEAgLTMzOSwx
MCArMzQyLDkgQEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQ
YW5lLnByb3RvdHlwZSA9IHsKIAogICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50
KQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhLmJyZWFrcG9pbnQ7
Ci0gICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudC5kYXRhLmV2ZW50TmFtZTsKKyAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwogCi0gICAgICAgIHZhciBicmVha3BvaW50SXRl
bSA9IHRoaXMuX2JyZWFrcG9pbnRJdGVtc1tldmVudE5hbWVdOworICAgICAgICB2YXIgYnJlYWtw
b2ludEl0ZW0gPSB0aGlzLl9icmVha3BvaW50SXRlbXNbYnJlYWtwb2ludC5ldmVudE5hbWVdOwog
ICAgICAgICBicmVha3BvaW50SXRlbS5icmVha3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgICAg
YnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJoaXQtc3RhdGUtY2hhbmdlZCIsIHRoaXMuX2Jy
ZWFrcG9pbnRIaXRTdGF0ZUNoYW5nZWQuYmluZCh0aGlzLCBicmVha3BvaW50SXRlbSkpOwogICAg
ICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3Bv
aW50UmVtb3ZlZC5iaW5kKHRoaXMsIGJyZWFrcG9pbnRJdGVtKSk7CkBAIC0zODMsNyArMzg1LDcg
QEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgY2F0ZWdvcnlJdGVtLmNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBo
YXNFbmFibGVkICYmIGhhc0Rpc2FibGVkOwogICAgIH0sCiAKLSAgICByZXNldDogZnVuY3Rpb24o
KQorICAgIF9wcm9qZWN0Q2hhbmdlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgZm9yICh2
YXIgZXZlbnROYW1lIGluIHRoaXMuX2JyZWFrcG9pbnRJdGVtcykgewogICAgICAgICAgICAgdmFy
IGJyZWFrcG9pbnRJdGVtID0gdGhpcy5fYnJlYWtwb2ludEl0ZW1zW2V2ZW50TmFtZV07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMK
aW5kZXggOGI3NDEyNi4uMjY1YzgwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcwpAQCAtMjYsNyArMjYsNyBAQAogV2ViSW5z
cGVjdG9yLkNhbGxTdGFja1NpZGViYXJQYW5lID0gZnVuY3Rpb24oKQogewogICAgIFdlYkluc3Bl
Y3Rvci5TaWRlYmFyUGFuZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FsbCBT
dGFjayIpKTsKLSAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcigibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgdGhpcy5fbmF0aXZlQnJlYWtwb2ludEhpdCwg
dGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5OYXRpdmVCcmVha3BvaW50
SGl0LCB0aGlzLl9uYXRpdmVCcmVha3BvaW50SGl0LCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKCJzY3JpcHQtYnJlYWtwb2ludC1oaXQiLCB0
aGlzLl9zY3JpcHRCcmVha3BvaW50SGl0LCB0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCA2MWJhMzNlLi5iMWNkMjRjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtMTY5LDkg
KzE2OSw2IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXMgPSBbXTsKIAogICAgICAgICBkZWxldGUgdGhp
cy5jdXJyZW50UXVlcnk7Ci0KLSAgICAgICAgaWYgKFByZWZlcmVuY2VzLm5hdGl2ZUluc3RydW1l
bnRhdGlvbkVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5kb21CcmVha3Bv
aW50cy5yZXNldCgpOwogICAgIH0sCiAKICAgICBzZXREb2N1bWVudDogZnVuY3Rpb24oaW5zcGVj
dGVkUm9vdERvY3VtZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanMKaW5kZXggNWFhNDc4MC4uOTdkNTQ0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBAIC00NDMsMTUgKzQ0Myw4IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zb3VyY2VJRE1hcCA9IHt9
OwogCiAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhwcmVzc2lvbnMucmVmcmVzaEV4
cHJlc3Npb25zKCk7Ci0gICAgICAgIGlmICghcHJlc2VydmVJdGVtcykgewotICAgICAgICAgICAg
dGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5yZXNldCgpOwotICAgICAgICAgICAgaWYg
KFByZWZlcmVuY2VzLm5hdGl2ZUluc3RydW1lbnRhdGlvbkVuYWJsZWQpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLnNpZGViYXJQYW5lcy5kb21CcmVha3BvaW50cy5yZXNldCgpOwotICAgICAgICAg
ICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLnhockJyZWFrcG9pbnRzLnJlc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnJlc2V0
KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICghcHJlc2VydmVJdGVtcykKICAgICAgICAg
ICAgIHRoaXMuc2lkZWJhclBhbmVzLndvcmtlcnMucmVzZXQoKTsKLSAgICAgICAgfQogICAgIH0s
CiAKICAgICBnZXQgdmlzaWJsZVZpZXcoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRp
bmdzLmpzCmluZGV4IDE2M2IxODQuLmJjNTBjZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2V0dGluZ3MuanMKQEAgLTcwLDYgKzcwLDEwIEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncyA9
IGZ1bmN0aW9uKCkKICAgICB0aGlzLmluc3RhbGxQcm9qZWN0U2V0dGluZygibmF0aXZlQnJlYWtw
b2ludHMiLCBbXSk7CiB9CiAKK1dlYkluc3BlY3Rvci5TZXR0aW5ncy5FdmVudHMgPSB7CisgICAg
UHJvamVjdENoYW5nZWQ6ICJwcm9qZWN0LWNoYW5nZWQiCit9CisKIFdlYkluc3BlY3Rvci5TZXR0
aW5ncy5wcm90b3R5cGUgPSB7CiAgICAgaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZzogZnVuY3Rp
b24oa2V5LCBkZWZhdWx0VmFsdWUpCiAgICAgewpAQCAtOTEsNyArOTUsMzEgQEAgV2ViSW5zcGVj
dG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGZyYWdtZW50SW5kZXggPSB1
cmwuaW5kZXhPZigiIyIpOwogICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPT0gLTEpCiAgICAg
ICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIGZyYWdtZW50SW5kZXgpOwotICAgICAgICB0
aGlzLl9pbnNwZWN0ZWRVUkwgPSB1cmw7CisgICAgICAgIHRoaXMuX3Byb2plY3RJZCA9IHVybDsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNldHRp
bmdzLkV2ZW50cy5Qcm9qZWN0Q2hhbmdlZCk7CisgICAgfSwKKworICAgIGdldCBwcm9qZWN0SWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RJZDsKKyAgICB9LAorCisgICAg
ZmluZFNldHRpbmdGb3JBbGxQcm9qZWN0czogZnVuY3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IHt9OworICAgICAgICB2YXIgcmVnZXhwID0gIl4iICsga2V5ICsgIjooLiop
IjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cubG9jYWxTdG9yYWdlLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgZnVsbEtleSA9ICB3aW5kb3cubG9jYWxTdG9yYWdl
LmtleShpKTsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IGZ1bGxLZXkubWF0Y2gocmVnZXhwKTsK
KyAgICAgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlc3VsdFttYXRjaFsxXV0gPSBKU09OLnBh
cnNlKHdpbmRvdy5sb2NhbFN0b3JhZ2VbZnVsbEtleV0pOworICAgICAgICAgICAgfSBjYXRjaChl
KSB7CisgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGZ1bGxL
ZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfSwKIAogICAgIF9nZXQ6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQpAQCAtMTIzLDcg
KzE1MSw3IEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUgPSB7CiAKICAgICBfZm9y
bWF0UHJvamVjdEtleTogZnVuY3Rpb24oa2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGtleSAr
ICI6IiArIHRoaXMuX2luc3BlY3RlZFVSTDsKKyAgICAgICAgcmV0dXJuIGtleSArICI6IiArIHRo
aXMuX3Byb2plY3RJZDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzCmluZGV4IDhlMTY1ZGMuLmY2OTQ3YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMjAzLDcgKzIwMyw3IEBAIHZhciBXZWJJbnNwZWN0b3Ig
PSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHBhbmUuYWRkQnJlYWtwb2ludEl0ZW0obmV3IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50SXRlbShldmVudC5kYXRhKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImRvbS1i
cmVha3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludEFkZGVkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLkV2ZW50cy5ET01CcmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRBZGRlZCk7CiAg
ICAgICAgIHJldHVybiBwYW5lOwogICAgIH0sCiAKQEAgLTIxNCw3ICsyMTQsNyBAQCB2YXIgV2Vi
SW5zcGVjdG9yID0gewogICAgICAgICB7CiAgICAgICAgICAgICBwYW5lLmFkZEJyZWFrcG9pbnRJ
dGVtKG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0oZXZlbnQuZGF0YSkpOwogICAgICAg
ICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKCJ4aHItYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnRBZGRlZCk7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMuWEhSQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50
QWRkZWQpOwogICAgICAgICByZXR1cm4gcGFuZTsKICAgICB9LAogCkBAIC0xMzI0LDcgKzEzMjQs
NiBAQCBXZWJJbnNwZWN0b3IucmVzdW1lZFNjcmlwdCA9IGZ1bmN0aW9uKCkKIFdlYkluc3BlY3Rv
ci5yZXNldCA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLmRlYnVnZ2VyTW9kZWwucmVzZXQoKTsK
LSAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc2V0KCk7CiAKICAgICBmb3IgKHZhciBwYW5l
bE5hbWUgaW4gdGhpcy5wYW5lbHMpIHsKICAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNb
cGFuZWxOYW1lXTsKQEAgLTEzMzcsOCArMTMzNiw2IEBAIFdlYkluc3BlY3Rvci5yZXNldCA9IGZ1
bmN0aW9uKCkKIAogICAgIHRoaXMuY29uc29sZS5jbGVhck1lc3NhZ2VzKCk7CiAgICAgdGhpcy5l
eHRlbnNpb25TZXJ2ZXIubm90aWZ5SW5zcGVjdG9yUmVzZXQoKTsKLQotICAgIHRoaXMuYnJlYWtw
b2ludE1hbmFnZXIucmVzdG9yZUJyZWFrcG9pbnRzKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5yZXNl
dFByb2ZpbGVzUGFuZWwgPSBmdW5jdGlvbigpCkBAIC0xMzU3LDEwICsxMzU0LDYgQEAgV2ViSW5z
cGVjdG9yLmluc3BlY3RlZFVSTENoYW5nZWQgPSBmdW5jdGlvbih1cmwpCiAgICAgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Lmluc3BlY3RlZFVSTENoYW5nZWQodXJsKTsKICAgICB0aGlzLnNldHRpbmdz
Lmluc3BlY3RlZFVSTENoYW5nZWQodXJsKTsKICAgICB0aGlzLmV4dGVuc2lvblNlcnZlci5ub3Rp
ZnlJbnNwZWN0ZWRVUkxDaGFuZ2VkKCk7Ci0gICAgaWYgKCF0aGlzLl9icmVha3BvaW50c1Jlc3Rv
cmVkKSB7Ci0gICAgICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZUJyZWFrcG9pbnRz
KCk7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzUmVzdG9yZWQgPSB0cnVlOwotICAgIH0KIH0K
IAogV2ViSW5zcGVjdG9yLmRpZENvbW1pdExvYWQgPSBmdW5jdGlvbigpCg==
</data>
<flag name="review"
          id="67344"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>