<?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>48434</bug_id>
          
          <creation_ts>2010-10-27 09:00:35 -0700</creation_ts>
          <short_desc>Web Inspector: persist JavaScript breakpoints in frontend settings</short_desc>
          <delta_ts>2010-12-22 09:36:37 -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>
          <dependson>51463</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300263</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-27 09:00:35 -0700</bug_when>
    <thetext>Web Inspector: persist breakpoints in frontend settings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300264</commentid>
    <comment_count>1</comment_count>
      <attachid>72042</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-27 09:01:16 -0700</bug_when>
    <thetext>Created attachment 72042
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300946</commentid>
    <comment_count>2</comment_count>
      <attachid>72042</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-28 01:40:25 -0700</bug_when>
    <thetext>Comment on attachment 72042
Patch.

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

&gt; WebCore/inspector/InspectorState.cpp:162
&gt; +    RefPtr&lt;InspectorObject&gt; object;

seems like an unused variable

&gt; WebCore/inspector/InspectorState.cpp:170
&gt; +    i-&gt;second.m_value = value;

you can alias i-&gt;second for clarity (since it is used 3 times in the function)

&gt; WebCore/inspector/front-end/BreakpointManager.js:138
&gt; +                breakpoints[breakpoint.url][line] = {enabled: breakpoint.enabled, condition: breakpoint.condition};

while we have no consistent opinion on this, having spaces after &apos;{&apos; and before &apos;}&apos; is preferred (as noted by joepeck)

&gt; WebCore/inspector/front-end/Settings.js:91
&gt; +            } catch(e) {

since empty catch blocks are considered a poor practice, please add a comment clarifying why this fall-through is OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300989</commentid>
    <comment_count>3</comment_count>
      <attachid>72169</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-28 04:42:52 -0700</bug_when>
    <thetext>Created attachment 72169
Patch.

All comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324944</commentid>
    <comment_count>4</comment_count>
      <attachid>77102</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-21 04:54:12 -0800</bug_when>
    <thetext>Created attachment 77102
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325004</commentid>
    <comment_count>5</comment_count>
      <attachid>77102</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-21 07:52:56 -0800</bug_when>
    <thetext>Comment on attachment 77102
Patch.

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

&gt; WebCore/bindings/js/ScriptDebugServer.cpp:162
&gt; +    intptr_t sourceIDValue = tokens[0].toIntPtr();

Please check for possible parse errors by passing &amp;success flag into toIntPtr.

&gt; WebCore/inspector/Inspector.idl:248
&gt; +        [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceID, out unsigned int lineNumber, out String condition, out boolean enabled, out unsigned int originalLineNumber);

This method should report breakpointId if we have decided to address breakpoints using ids in other places, otherwise the API is inconsistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325041</commentid>
    <comment_count>6</comment_count>
      <attachid>77102</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-21 09:47:40 -0800</bug_when>
    <thetext>Comment on attachment 77102
Patch.

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

&gt; WebCore/inspector/front-end/BreakpointManager.js:114
&gt; +        this._setNativeBreakpoint(breakpointId, breakpoint, enabled, restored);

this method should be renamed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325042</commentid>
    <comment_count>7</comment_count>
      <attachid>77124</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-21 09:50:23 -0800</bug_when>
    <thetext>Created attachment 77124
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325043</commentid>
    <comment_count>8</comment_count>
      <attachid>77125</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-21 09:52:07 -0800</bug_when>
    <thetext>Created attachment 77125
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325045</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-21 09:54:06 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 77102 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77102&amp;action=review
&gt; 
&gt; &gt; WebCore/bindings/js/ScriptDebugServer.cpp:162
&gt; &gt; +    intptr_t sourceIDValue = tokens[0].toIntPtr();
&gt; 
&gt; Please check for possible parse errors by passing &amp;success flag into toIntPtr.
&gt; 

Done.

&gt; &gt; WebCore/inspector/Inspector.idl:248
&gt; &gt; +        [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceID, out unsigned int lineNumber, out String condition, out boolean enabled, out unsigned int originalLineNumber);
&gt; 
&gt; This method should report breakpointId if we have decided to address breakpoints using ids in other places, otherwise the API is inconsistent.

We need to know in frontend scriptID and line where breakpoint was resolved by JS engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325051</commentid>
    <comment_count>10</comment_count>
      <attachid>77125</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-21 10:04:08 -0800</bug_when>
    <thetext>Comment on attachment 77125
Patch.

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

&gt; WebCore/inspector/Inspector.idl:248
&gt; +        [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceID, out unsigned int lineNumber, out String condition, out boolean enabled, out unsigned int originalLineNumber);

no need to pass condition and enable parameters as FE already knows them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325449</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-22 05:13:59 -0800</bug_when>
    <thetext>Committed r74473: &lt;http://trac.webkit.org/changeset/74473&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325453</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-22 05:20:35 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 77125 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77125&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/Inspector.idl:248
&gt; &gt; +        [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceID, out unsigned int lineNumber, out String condition, out boolean enabled, out unsigned int originalLineNumber);
&gt; 
&gt; no need to pass condition and enable parameters as FE already knows them

We have no guarantee this data would not change on frontend between call to InspectorBackend.setStickyBreakpoints() and the moment when breakpointResolved notification is dispatched on frontend. So we have to pass this data to frontend to be sure that it&apos;s up to date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325456</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-22 05:27:01 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74473 might have broken Leopard Intel Release (Build) and Leopard Intel Debug (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325478</commentid>
    <comment_count>14</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-22 06:17:58 -0800</bug_when>
    <thetext>Committed r74477: &lt;http://trac.webkit.org/changeset/74477&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325517</commentid>
    <comment_count>15</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-12-22 09:19:14 -0800</bug_when>
    <thetext>I believe this is causing inspector/timeline-mark-timeline.html to crash on win debug. I&apos;ll add an expectation.

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=inspector%2Ftimeline-mark-timeline.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325524</commentid>
    <comment_count>16</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-12-22 09:36:37 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I believe this is causing inspector/timeline-mark-timeline.html to crash on win debug. I&apos;ll add an expectation.
&gt; 
&gt; http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=inspector%2Ftimeline-mark-timeline.html

Nevermind, just flaky.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72042</attachid>
            <date>2010-10-27 09:01:16 -0700</date>
            <delta_ts>2010-10-28 04:42:52 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17306</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmIxNjY1Mi4uZDRjZGUyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0MCBAQAogMjAxMC0xMC0yNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGZyb250ZW5kIHNldHRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODQzNAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YnJlYWtwb2ludHNTZXR0aW5nS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmxvYWRCcmVha3BvaW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmxvYWRCcmVha3BvaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpzZXRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyT2JqZWN0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtw
b2ludE9uQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUuZ2V0U2V0dGluZ0Zv
ckFsbFByb2plY3RzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUu
aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJv
dG90eXBlLl9mb3JtYXRQcm9qZWN0S2V5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2Vk
KToKKworMjAxMC0xMC0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9y
Zz4KKwogICAgICAgICBVbnJldmlld2VkLCBmaXggbGluZSBlbmRpbmdzIGluIEluc3BlY3RvclN0
YXRlLmgKIAogICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oOgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5pZGwKaW5kZXggMmRhMGE5Mi4uYjVkNzM4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsCkBAIC0xMzEsNiArMTMxLDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1C
YWNrZW5kXSB2b2lkIGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAg
W2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkaXNhYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdh
eXMpOwogCisgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc2V0QnJlYWtwb2ludHMo
aW4gT2JqZWN0IGJyZWFrcG9pbnRzKTsKKwogICAgICAgICBbaGFuZGxlcj1EZWJ1Z10gdm9pZCBz
ZXRCcmVha3BvaW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxpbmVOdW1i
ZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gU3RyaW5nIGNvbmRpdGlvbiwgb3V0IGJvb2xlYW4g
c3VjY2Vzcywgb3V0IHVuc2lnbmVkIGludCBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICAgICAgW2hh
bmRsZXI9RGVidWddIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBTdHJpbmcgc291cmNlSUQsIGlu
IHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CiAgICAgICAgIFtoYW5kbGVyPURlYnVnXSB2b2lk
IGFjdGl2YXRlQnJlYWtwb2ludHMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggZDYyZWJiNi4uZWM3MjEzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE2ODAsNiArMTY4MCwxMSBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnJlc3VtZSgpCiAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVzdW1lKCk7
CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludHMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQoreworICAgIG1fc3RhdGUtPnNldE9iamVj
dChJbnNwZWN0b3JTdGF0ZTo6YnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKK30KKwogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXROYXRpdmVCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBicmVha3BvaW50LCBTdHJpbmcqIGJyZWFrcG9pbnRJZCkKIHsKICAgICAqYnJl
YWtwb2ludElkID0gIiI7CkBAIC0xNzc1LDE5ICsxNzgwLDIyIEBAIFN0cmluZyBJbnNwZWN0b3JD
b250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXkoKQogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBrZXlQcmVmaXgsICgiYnJlYWtwb2ludHM6IikpOwogICAgIGlmICghbV9tYWlu
UmVzb3VyY2UpCiAgICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4ga2V5UHJlZml4ICsgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6bWQ1QmFzZTE2KG1fbWFpblJlc291cmNlLT5yZXF1ZXN0VVJM
KCkpOworICAgIEtVUkwgdXJsID0gbV9tYWluUmVzb3VyY2UtPnJlcXVlc3RVUkwoKTsKKyAgICB1
cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIGtleVByZWZpeCArIHVy
bDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6
bG9hZEJyZWFrcG9pbnRzKCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JD
b250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQogewotICAgIFN0cmluZyBqc29uU3RyaW5nOwot
ICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksICZq
c29uU3RyaW5nKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29uU3Ry
aW5nKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IG1fc3RhdGUt
PmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJlYWtwb2ludHMpOworICAgIHJldHVybiBicmVh
a3BvaW50cy0+Z2V0T2JqZWN0KGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJyZWFrcG9pbnRzKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtw
b2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb2plY3RCcmVha3BvaW50cykKIHsK
LSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBicmVh
a3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicmVha3BvaW50
cyk7CisgICAgYnJlYWtwb2ludHMtPnNldE9iamVjdChicmVha3BvaW50c1NldHRpbmdLZXkoKSwg
cHJvamVjdEJyZWFrcG9pbnRzKTsKKyAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVjdG9yU3Rh
dGU6OmJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDE4ZGIwN2YuLjkwYzJlZWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI1Miw2ICsyNTIsOCBAQCBwdWJs
aWM6CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVidWdnZXJBZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVzdW1lKCk7CiAKKyAg
ICB2b2lkIHNldEJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3Bv
aW50cyk7CisKICAgICB2b2lkIHNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtwb2ludElkKTsKICAgICB2b2lkIHJl
bW92ZU5hdGl2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwogI2VuZGlm
CkBAIC0zMzEsNyArMzMzLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKICAgICBTdHJp
bmcgYnJlYWtwb2ludHNTZXR0aW5nS2V5KCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxv
YWRCcmVha3BvaW50cygpOwogICAgIHZvaWQgc2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBhN2VhY2Y2Li5iMDgwYjBiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMTAwLDEw
ICsxMDAsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZQogICAgIFN0cmluZyBicmVha3BvaW50
SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsICphY3R1YWxMaW5lTnVtYmVyKTsKICAg
ICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCAqYWN0dWFsTGluZU51bWJl
cik7CiAKLSAgICBTdHJpbmcga2V5ID0gbWQ1QmFzZTE2KHVybCk7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRz
LmZpbmQoa2V5KTsKKyAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVy
YXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOwogICAgIGlmIChpdCA9PSBt
X3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2lu
dHMuc2V0KGtleSwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgICAgIGl0ID0gbV9z
dGlja3lCcmVha3BvaW50cy5zZXQodXJsLCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKICAg
ICBpdC0+c2Vjb25kLnNldCgqYWN0dWFsTGluZU51bWJlciwgYnJlYWtwb2ludCk7CiAgICAgc2F2
ZUJyZWFrcG9pbnRzKCk7CiB9CkBAIC0xMjMsNyArMTIyLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGwKICAgICB1bnNpZ25lZCBzdGlja3lMaW5lID0gbWFwcGluZ0l0LT5zZWNvbmQ7CiAgICAg
bV9icmVha3BvaW50c01hcHBpbmcucmVtb3ZlKG1hcHBpbmdJdCk7CiAKLSAgICBIYXNoTWFwPFN0
cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2lu
dHMuZmluZChtZDVCYXNlMTYodXJsKSk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFr
cG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKICAg
ICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yMDEsMjMgKzIwMCw2IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJG
b3JQYWdlTmF2aWdhdGlvbigpCiAgICAgbV9icmVha3BvaW50c0xvYWRlZCA9IGZhbHNlOwogfQog
Ci1TdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6bWQ1QmFzZTE2KGNvbnN0IFN0cmluZyYg
c3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODlh
YmNkZWYiOwotCi0gICAgTUQ1IG1kNTsKLSAgICBtZDUuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMoKSksIHN0cmluZy5sZW5ndGgoKSAq
IDIpOwotICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZGlnZXN0OwotICAgIG1kNS5jaGVja3N1bShk
aWdlc3QpOwotCi0gICAgVmVjdG9yPGNoYXIsIDMyPiByZXN1bHQ7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxNjsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGlnaXRzWyhkaWdlc3Rb
aV0gPj4gNCkgJiAweGZdKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChkaWdpdHNbZGlnZXN0W2ld
ICYgMHhmXSk7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0
LnNpemUoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKCkKIHsKICAgICBpZiAoIW1fcGF1c2VkU2NyaXB0
U3RhdGUpCkBAIC0yMzYsMTAgKzIxOCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
bG9hZEJyZWFrcG9pbnRzKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fYnJlYWtwb2ludHNMb2Fk
ZWQgPSB0cnVlOwogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRTZXR0aW5nID0g
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5sb2FkQnJlYWtwb2ludHMoKTsKLSAgICBpZiAoIXBhcnNl
ZFNldHRpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
cmVha3BvaW50cyA9IHBhcnNlZFNldHRpbmctPmFzT2JqZWN0KCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnJlYWtwb2ludHMgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmxvYWRCcmVh
a3BvaW50cygpOwogICAgIGlmICghYnJlYWtwb2ludHMpCiAgICAgICAgIHJldHVybjsKICAgICBm
b3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy0+YmVnaW4oKTsg
aXQgIT0gYnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7CkBAIC0yNzYsNyArMjU1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBjb25zdCBTdHJpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgbG9hZEJyZWFrcG9p
bnRzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3Ig
aXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOworICAgIEhhc2hN
YXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVh
a3BvaW50cy5maW5kKHVybCk7CiAgICAgaWYgKGl0ICE9IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5k
KCkpIHsKICAgICAgICAgZm9yIChTb3VyY2VCcmVha3BvaW50czo6aXRlcmF0b3IgYnJlYWtwb2lu
dEl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBicmVha3BvaW50SXQgIT0gaXQtPnNlY29uZC5lbmQo
KTsgKyticmVha3BvaW50SXQpIHsKICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gYnJlYWtw
b2ludEl0LT5maXJzdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
YXRlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA2YTUw
NGM2Li5jNjZjMDY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0
ZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCkBAIC01MSw2
ICs1MSw3IEBAIEluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQq
IGNsaWVudCkKICAgICByZWdpc3RlckxvbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRlZmF1bHRBdHRhY2hlZEhlaWdodCwgKGNvbnN0IGNoYXIqKTAsICJp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodCIpOwogICAgIHJlZ2lzdGVyTG9uZyhwYXVzZU9uRXhjZXB0
aW9uc1N0YXRlLCAwLCAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsIChjb25zdCBjaGFyKikwKTsK
ICAgICByZWdpc3RlckJvb2xlYW4oY29uc29sZU1lc3NhZ2VzRW5hYmxlZCwgZmFsc2UsICJjb25z
b2xlTWVzc2FnZXNFbmFibGVkIiwgKGNvbnN0IGNoYXIqKTApOworICAgIHJlZ2lzdGVyT2JqZWN0
KGJyZWFrcG9pbnRzLCAoY29uc3QgY2hhciopMCwgKGNvbnN0IGNoYXIqKTApOwogfQogCiB2b2lk
IEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcm
IGpzb24pCkBAIC0xNTQsNiArMTU1LDI0IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmco
SW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KEluc3BlY3RvclBy
b3BlcnR5SWQgaWQpCit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRp
ZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgcmV0dXJuIGktPnNlY29uZC5tX3Zh
bHVlLT5hc09iamVjdCgpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpzZXRPYmplY3QoSW5z
cGVjdG9yUHJvcGVydHlJZCBpZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQor
eworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOwor
ICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgaS0+c2Vjb25kLm1fdmFs
dWUgPSB2YWx1ZTsKKyAgICBpZiAoaS0+c2Vjb25kLm1fcHJlZmVyZW5jZU5hbWUubGVuZ3RoKCkp
CisgICAgICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoaS0+c2Vjb25kLm1fcHJlZmVyZW5jZU5h
bWUsIHZhbHVlLT50b0pTT05TdHJpbmcoKSk7CisgICAgdXBkYXRlQ29va2llKCk7Cit9CisKIHZv
aWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHBy
b3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRBbGlhcywgY29uc3Qg
U3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKIHsKICAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5
SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSwg
ZnJvbnRlbmRBbGlhcywgcHJlZmVyZW5jZU5hbWUpKTsKQEAgLTE2OSw2ICsxODgsMTEgQEAgdm9p
ZCBJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVy
dHlJZCwgbG9uZyB2YWx1ZSwgY28KICAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFBy
b3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUp
LCBmcm9udGVuZEFsaWFzLCBwcmVmZXJlbmNlTmFtZSkpOwogfQogCit2b2lkIEluc3BlY3RvclN0
YXRlOjpyZWdpc3Rlck9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0
IFN0cmluZyYgZnJvbnRlbmRBbGlhcywgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKK3sK
KyAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSwgZnJvbnRlbmRBbGlhcywgcHJlZmVyZW5jZU5hbWUpKTsKK30K
KwogSW5zcGVjdG9yU3RhdGU6OlByb3BlcnR5IEluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250
ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCiB7CiAgICAgUHJvcGVydHkg
cHJvcGVydHk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaAppbmRleCAzODdmM2M3Li42Yjcz
MzM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVi
bGljOgogICAgICAgICBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCwKICAgICAgICAgcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSwKICAgICAgICAgY29uc29sZU1lc3NhZ2VzRW5hYmxlZCwKKyAgICAgICAg
YnJlYWtwb2ludHMsCiAgICAgICAgIGxhc3RQcm9wZXJ0eUlkCiAgICAgfTsKIApAQCAtNjksMTAg
KzcwLDEyIEBAIHB1YmxpYzoKICAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJ
ZCBwcm9wZXJ0eUlkKTsKICAgICBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQg
cHJvcGVydHlJZCk7CiAgICAgbG9uZyBnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVy
dHlJZCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0
b3JQcm9wZXJ0eUlkIGlkKTsKIAogICAgIHZvaWQgc2V0Qm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0
eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwgSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSwgdmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsg
fQogICAgIHZvaWQgc2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JTdHJpbmc6
OmNyZWF0ZSh2YWx1ZSksIHZhbHVlKTsgfQogICAgIHZvaWQgc2V0TG9uZyhJbnNwZWN0b3JQcm9w
ZXJ0eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwgSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBTdHJpbmc6Om51bWJlcih2
YWx1ZSkpOyB9CisgICAgdm9pZCBzZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0
eUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpOwogCiBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlQ29va2llKCk7CkBAIC05MCw2ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZh
bHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5j
ZU5hbWUpOwogICAgIHZvaWQgcmVnaXN0ZXJTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9w
ZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMs
IGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOwogICAgIHZvaWQgcmVnaXN0ZXJMb25nKElu
c3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSwgY29uc3QgU3RyaW5nJiBm
cm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKKyAgICB2b2lkIHJl
Z2lzdGVyT2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5n
JiBmcm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKIAogICAgIElu
c3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDc3YmE4OWQuLjJjOTM0ODAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAg
LTEwNiwxMyArMTA2LDM5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAKICAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50LnRhcmdldC5pZF07CisgICAg
ICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OworCisgICAgICAgIGRlbGV0ZSB0aGlz
Ll9icmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKKworICAgICAgICBpZiAoIWJyZWFrcG9pbnQu
dXJsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJ
bnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5icmVha3BvaW50czsKKyAgICAgICAgdmFyIHNv
dXJjZUJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHNbYnJlYWtwb2ludC51cmxdOworICAgICAgICBp
ZiAoIXNvdXJjZUJyZWFrcG9pbnRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
IWJyZWFrcG9pbnQubGluZSBpbiBzb3VyY2VCcmVha3BvaW50cykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGVsZXRlIHNvdXJjZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnQubGluZV07Cisg
ICAgICAgIGZvciAodmFyIGxpbmUgaW4gc291cmNlQnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmJyZWFrcG9pbnRzID0gYnJlYWtwb2lu
dHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGJyZWFr
cG9pbnRzW2JyZWFrcG9pbnQudXJsXTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9u
U2V0dGluZ3MuYnJlYWtwb2ludHMgPSBicmVha3BvaW50czsKICAgICB9LAogCiAgICAgX3NldEJy
ZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGlzT25lVGltZSkKICAgICB7
CiAgICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQoc3VjY2VzcywgbGluZSkKICAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIWlzT25lVGltZSAmJiBicmVha3BvaW50
LnVybCkgeworICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5h
cHBsaWNhdGlvblNldHRpbmdzLmJyZWFrcG9pbnRzOworICAgICAgICAgICAgICAgIGlmICghKGJy
ZWFrcG9pbnQudXJsIGluIGJyZWFrcG9pbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtw
b2ludHNbYnJlYWtwb2ludC51cmxdID0ge307CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludHNb
YnJlYWtwb2ludC51cmxdW2xpbmVdID0ge2VuYWJsZWQ6IGJyZWFrcG9pbnQuZW5hYmxlZCwgY29u
ZGl0aW9uOiBicmVha3BvaW50LmNvbmRpdGlvbn07CisgICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuYnJlYWtwb2ludHMgPSBicmVha3BvaW50czsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgbGluZSA9PSBicmVha3BvaW50
LmxpbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaWYgKGlzT25lVGlt
ZSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IDI4MDViYzUu
LmI3MTdhNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5n
cy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKQEAgLTc4
LDYgKzc4LDMwIEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuX19kZWZpbmVTZXR0ZXJfXyhrZXksIHRoaXMuX3NldFByb2plY3RTZXR0aW5nLmJpbmQo
dGhpcywga2V5KSk7CiAgICAgfSwKIAorICAgIGdldFNldHRpbmdGb3JBbGxQcm9qZWN0czogZnVu
Y3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHt9OworICAgICAgICB2YXIg
cmVnZXhwID0gIl4iICsga2V5ICsgIjoiOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdp
bmRvdy5sb2NhbFN0b3JhZ2UubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBzdG9yYWdl
S2V5ID0gd2luZG93LmxvY2FsU3RvcmFnZS5rZXkoaSk7CisgICAgICAgICAgICBpZiAoc3RvcmFn
ZUtleS5zZWFyY2gocmVnZXhwKSA9PT0gLTEpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlc3VsdFtzdG9yYWdlS2V5XSA9IEpT
T04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZVtzdG9yYWdlS2V5XSk7CisgICAgICAgICAgICB9
IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0sCisKKyAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCisg
ICAgeworICAgICAgICB2YXIgZnJhZ21lbnRJbmRleCA9IHVybC5pbmRleE9mKCIjIik7CisgICAg
ICAgIGlmIChmcmFnbWVudEluZGV4ICE9PSAtMSkKKyAgICAgICAgICAgIHVybCA9IHVybC5zdWJz
dHJpbmcoMCwgZnJhZ21lbnRJbmRleCk7CisgICAgICAgIHRoaXMuX2luc3BlY3RlZFVSTCA9IHVy
bDsKKyAgICB9LAorCiAgICAgX2dldDogZnVuY3Rpb24oa2V5LCBkZWZhdWx0VmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoa2V5IGluIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKQEAgLTEwNywxMSAr
MTMxLDcgQEAgV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsKIAogICAgIF9mb3Jt
YXRQcm9qZWN0S2V5OiBmdW5jdGlvbihrZXkpCiAgICAgewotICAgICAgICB2YXIgdXJsID0gdGhp
cy5fbWFpblJlc291cmNlVVJMOwotICAgICAgICB2YXIgZnJhZ21lbnRJbmRleCA9IHVybC5pbmRl
eE9mKCIjIik7Ci0gICAgICAgIGlmIChmcmFnbWVudEluZGV4ICE9PSAtMSkKLSAgICAgICAgICAg
IHVybCA9IHVybC5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCk7Ci0gICAgICAgIHJldHVybiBr
ZXkgKyAiLiIgKyB1cmw7CisgICAgICAgIHJldHVybiBrZXkgKyAiOiIgKyB0aGlzLl9pbnNwZWN0
ZWRVUkw7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwppbmRleCA4NWNhM2Y2Li5iY2QzZjRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKQEAgLTUzMCw3ICs1MzAsOSBAQCBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25l
ID0gZnVuY3Rpb24oKQogICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcygicG9ydC0iICsg
cG9ydCk7CiAKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZGVkKCk7CisKICAgICBXZWJJ
bnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZ3Mo
KTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnRzKFdlYkluc3BlY3Rvci5hcHBs
aWNhdGlvblNldHRpbmdzLmdldFNldHRpbmdGb3JBbGxQcm9qZWN0cygiYnJlYWtwb2ludHMiKSk7
CiAKICAgICB0aGlzLl9yZWdpc3RlclNob3J0Y3V0cygpOwogCkBAIC0xNTMxLDYgKzE1MzMsNyBA
QCBXZWJJbnNwZWN0b3IuYnJpbmdUb0Zyb250ID0gZnVuY3Rpb24oKQogV2ViSW5zcGVjdG9yLmlu
c3BlY3RlZFVSTENoYW5nZWQgPSBmdW5jdGlvbih1cmwpCiB7CiAgICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Lmluc3BlY3RlZFVSTENoYW5nZWQodXJsKTsKKyAgICB0aGlzLmFwcGxpY2F0aW9uU2V0
dGluZ3MuaW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmwpOwogICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVy
Lm5vdGlmeUluc3BlY3RlZFVSTENoYW5nZWQoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72169</attachid>
            <date>2010-10-28 04:42:52 -0700</date>
            <delta_ts>2010-12-21 04:54:12 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17372</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQ1YjY1Yi4uNDNiNzg4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTc4Miw2ICs3ODIsNDEgQEAKIAogMjAxMC0xMC0yNyAgUGF2ZWwg
UG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFr
cG9pbnRzIGluIGZyb250ZW5kIHNldHRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODQzNAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YnJlYWtwb2ludHNTZXR0aW5nS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmxvYWRCcmVha3BvaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2lu
dHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmxvYWRCcmVha3BvaW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRl
OjpzZXRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVy
T2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0
QnJlYWtwb2ludE9uQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0
aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUuZ2V0U2V0
dGluZ0ZvckFsbFByb2plY3RzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90
b3R5cGUuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGlu
Z3MucHJvdG90eXBlLl9mb3JtYXRQcm9qZWN0S2V5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKToKKworMjAxMC0xMC0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBVbnJldmlld2VkLCBmaXggbGluZSBlbmRpbmdzIGluIEluc3Bl
Y3RvclN0YXRlLmgKIAogICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oOgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwKaW5kZXggMmRhMGE5Mi4uYjVkNzM4OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCkBAIC0xMzEsNiArMTMxLDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFu
ZGxlcj1CYWNrZW5kXSB2b2lkIGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKICAg
ICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkaXNhYmxlRGVidWdnZXIoaW4gYm9vbGVh
biBhbHdheXMpOwogCisgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc2V0QnJlYWtw
b2ludHMoaW4gT2JqZWN0IGJyZWFrcG9pbnRzKTsKKwogICAgICAgICBbaGFuZGxlcj1EZWJ1Z10g
dm9pZCBzZXRCcmVha3BvaW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxp
bmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gU3RyaW5nIGNvbmRpdGlvbiwgb3V0IGJv
b2xlYW4gc3VjY2Vzcywgb3V0IHVuc2lnbmVkIGludCBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICAg
ICAgW2hhbmRsZXI9RGVidWddIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBTdHJpbmcgc291cmNl
SUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CiAgICAgICAgIFtoYW5kbGVyPURlYnVn
XSB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggZDYyZWJiNi4uZWM3MjEzNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE2ODAsNiArMTY4MCwxMSBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZSgpCiAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVz
dW1lKCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludHMoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQoreworICAgIG1fc3RhdGUtPnNl
dE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKK30KKwog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXROYXRpdmVCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50LCBTdHJpbmcqIGJyZWFrcG9pbnRJZCkKIHsKICAg
ICAqYnJlYWtwb2ludElkID0gIiI7CkBAIC0xNzc1LDE5ICsxNzgwLDIyIEBAIFN0cmluZyBJbnNw
ZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXkoKQogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBrZXlQcmVmaXgsICgiYnJlYWtwb2ludHM6IikpOwogICAgIGlmICgh
bV9tYWluUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4ga2V5UHJlZml4
ICsgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6bWQ1QmFzZTE2KG1fbWFpblJlc291cmNlLT5yZXF1
ZXN0VVJMKCkpOworICAgIEtVUkwgdXJsID0gbV9tYWluUmVzb3VyY2UtPnJlcXVlc3RVUkwoKTsK
KyAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIGtleVByZWZp
eCArIHVybDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQ29udHJv
bGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQogewotICAgIFN0cmluZyBqc29uU3Ry
aW5nOwotICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5
KCksICZqc29uU3RyaW5nKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihq
c29uU3RyaW5nKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IG1f
c3RhdGUtPmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJlYWtwb2ludHMpOworICAgIHJldHVy
biBicmVha3BvaW50cy0+Z2V0T2JqZWN0KGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZl
QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb2plY3RCcmVha3BvaW50
cykKIHsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgp
LCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicmVh
a3BvaW50cyk7CisgICAgYnJlYWtwb2ludHMtPnNldE9iamVjdChicmVha3BvaW50c1NldHRpbmdL
ZXkoKSwgcHJvamVjdEJyZWFrcG9pbnRzKTsKKyAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVj
dG9yU3RhdGU6OmJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDE4ZGIwN2YuLjkwYzJlZWYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI1Miw2ICsyNTIsOCBA
QCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVzdW1lKCk7
CiAKKyAgICB2b2lkIHNldEJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
cmVha3BvaW50cyk7CisKICAgICB2b2lkIHNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtwb2ludElkKTsKICAgICB2
b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwog
I2VuZGlmCkBAIC0zMzEsNyArMzMzLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKICAg
ICBTdHJpbmcgYnJlYWtwb2ludHNTZXR0aW5nS2V5KCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGxvYWRCcmVha3BvaW50cygpOwogICAgIHZvaWQgc2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBhN2VhY2Y2Li5iMDgwYjBi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAt
MTAwLDEwICsxMDAsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZQogICAgIFN0cmluZyBicmVh
a3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsICphY3R1YWxMaW5lTnVtYmVy
KTsKICAgICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCAqYWN0dWFsTGlu
ZU51bWJlcik7CiAKLSAgICBTdHJpbmcga2V5ID0gbWQ1QmFzZTE2KHVybCk7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQoa2V5KTsKKyAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+
OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOwogICAgIGlmIChp
dCA9PSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9IG1fc3RpY2t5QnJl
YWtwb2ludHMuc2V0KGtleSwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgICAgIGl0
ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQodXJsLCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJz
dDsKICAgICBpdC0+c2Vjb25kLnNldCgqYWN0dWFsTGluZU51bWJlciwgYnJlYWtwb2ludCk7CiAg
ICAgc2F2ZUJyZWFrcG9pbnRzKCk7CiB9CkBAIC0xMjMsNyArMTIyLDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQs
IHVuc2lnbmVkIGwKICAgICB1bnNpZ25lZCBzdGlja3lMaW5lID0gbWFwcGluZ0l0LT5zZWNvbmQ7
CiAgICAgbV9icmVha3BvaW50c01hcHBpbmcucmVtb3ZlKG1hcHBpbmdJdCk7CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJl
YWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJj
ZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJs
KTsKICAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yMDEsMjMgKzIwMCw2IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
Y2xlYXJGb3JQYWdlTmF2aWdhdGlvbigpCiAgICAgbV9icmVha3BvaW50c0xvYWRlZCA9IGZhbHNl
OwogfQogCi1TdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6bWQ1QmFzZTE2KGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0
NTY3ODlhYmNkZWYiOwotCi0gICAgTUQ1IG1kNTsKLSAgICBtZDUuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMoKSksIHN0cmluZy5sZW5n
dGgoKSAqIDIpOwotICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZGlnZXN0OwotICAgIG1kNS5jaGVj
a3N1bShkaWdlc3QpOwotCi0gICAgVmVjdG9yPGNoYXIsIDMyPiByZXN1bHQ7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGlnaXRzWyhk
aWdlc3RbaV0gPj4gNCkgJiAweGZdKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChkaWdpdHNbZGln
ZXN0W2ldICYgMHhmXSk7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwg
cmVzdWx0LnNpemUoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKCkKIHsKICAgICBpZiAoIW1fcGF1c2Vk
U2NyaXB0U3RhdGUpCkBAIC0yMzYsMTAgKzIxOCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6bG9hZEJyZWFrcG9pbnRzKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fYnJlYWtwb2lu
dHNMb2FkZWQgPSB0cnVlOwogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRTZXR0
aW5nID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5sb2FkQnJlYWtwb2ludHMoKTsKLSAgICBpZiAo
IXBhcnNlZFNldHRpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50cyA9IHBhcnNlZFNldHRpbmctPmFzT2JqZWN0KCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmxv
YWRCcmVha3BvaW50cygpOwogICAgIGlmICghYnJlYWtwb2ludHMpCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy0+YmVn
aW4oKTsgaXQgIT0gYnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7CkBAIC0yNzYsNyArMjU1LDcg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgbG9hZEJy
ZWFrcG9pbnRzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRl
cmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOworICAg
IEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5maW5kKHVybCk7CiAgICAgaWYgKGl0ICE9IG1fc3RpY2t5QnJlYWtwb2lu
dHMuZW5kKCkpIHsKICAgICAgICAgZm9yIChTb3VyY2VCcmVha3BvaW50czo6aXRlcmF0b3IgYnJl
YWtwb2ludEl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBicmVha3BvaW50SXQgIT0gaXQtPnNlY29u
ZC5lbmQoKTsgKyticmVha3BvaW50SXQpIHsKICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0g
YnJlYWtwb2ludEl0LT5maXJzdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAppbmRl
eCA2YTUwNGM2Li5jYmUxNDE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCkBA
IC01MSw2ICs1MSw3IEBAIEluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCkKICAgICByZWdpc3RlckxvbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQs
IEluc3BlY3RvckNvbnRyb2xsZXI6OmRlZmF1bHRBdHRhY2hlZEhlaWdodCwgKGNvbnN0IGNoYXIq
KTAsICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCIpOwogICAgIHJlZ2lzdGVyTG9uZyhwYXVzZU9u
RXhjZXB0aW9uc1N0YXRlLCAwLCAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsIChjb25zdCBjaGFy
KikwKTsKICAgICByZWdpc3RlckJvb2xlYW4oY29uc29sZU1lc3NhZ2VzRW5hYmxlZCwgZmFsc2Us
ICJjb25zb2xlTWVzc2FnZXNFbmFibGVkIiwgKGNvbnN0IGNoYXIqKTApOworICAgIHJlZ2lzdGVy
T2JqZWN0KGJyZWFrcG9pbnRzLCAoY29uc3QgY2hhciopMCwgKGNvbnN0IGNoYXIqKTApOwogfQog
CiB2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBT
dHJpbmcmIGpzb24pCkBAIC0xNTQsNiArMTU1LDI0IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6Omdl
dExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KEluc3Bl
Y3RvclByb3BlcnR5SWQgaWQpCit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3By
b3BlcnRpZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsK
KyAgICByZXR1cm4gaS0+c2Vjb25kLm1fdmFsdWUtPmFzT2JqZWN0KCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yU3RhdGU6OnNldE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkg
PSBtX3Byb3BlcnRpZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVu
ZCgpKTsKKyAgICBQcm9wZXJ0eSYgcHJvcGVydHkgPSBpLT5zZWNvbmQ7CisgICAgcHJvcGVydHku
bV92YWx1ZSA9IHZhbHVlOworICAgIGlmIChwcm9wZXJ0eS5tX3ByZWZlcmVuY2VOYW1lLmxlbmd0
aCgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKHByb3BlcnR5Lm1fcHJlZmVyZW5j
ZU5hbWUsIHZhbHVlLT50b0pTT05TdHJpbmcoKSk7CisgICAgdXBkYXRlQ29va2llKCk7Cit9CisK
IHZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlk
IHByb3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRBbGlhcywgY29u
c3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKIHsKICAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3Bl
cnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVl
KSwgZnJvbnRlbmRBbGlhcywgcHJlZmVyZW5jZU5hbWUpKTsKQEAgLTE2OSw2ICsxODgsMTEgQEAg
dm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJv
cGVydHlJZCwgbG9uZyB2YWx1ZSwgY28KICAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQs
IFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFs
dWUpLCBmcm9udGVuZEFsaWFzLCBwcmVmZXJlbmNlTmFtZSkpOwogfQogCit2b2lkIEluc3BlY3Rv
clN0YXRlOjpyZWdpc3Rlck9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNv
bnN0IFN0cmluZyYgZnJvbnRlbmRBbGlhcywgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkK
K3sKKyAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZnJvbnRlbmRBbGlhcywgcHJlZmVyZW5jZU5hbWUpKTsK
K30KKwogSW5zcGVjdG9yU3RhdGU6OlByb3BlcnR5IEluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eTo6
Y3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGZy
b250ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCiB7CiAgICAgUHJvcGVy
dHkgcHJvcGVydHk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0
ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaAppbmRleCAzODdmM2M3Li42
YjczMzM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKQEAgLTU2LDYgKzU2LDcgQEAg
cHVibGljOgogICAgICAgICBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCwKICAgICAgICAgcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSwKICAgICAgICAgY29uc29sZU1lc3NhZ2VzRW5hYmxlZCwKKyAgICAg
ICAgYnJlYWtwb2ludHMsCiAgICAgICAgIGxhc3RQcm9wZXJ0eUlkCiAgICAgfTsKIApAQCAtNjks
MTAgKzcwLDEyIEBAIHB1YmxpYzoKICAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVy
dHlJZCBwcm9wZXJ0eUlkKTsKICAgICBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5
SWQgcHJvcGVydHlJZCk7CiAgICAgbG9uZyBnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJv
cGVydHlJZCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNw
ZWN0b3JQcm9wZXJ0eUlkIGlkKTsKIAogICAgIHZvaWQgc2V0Qm9vbGVhbihJbnNwZWN0b3JQcm9w
ZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwgSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSwgdmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2Ui
KTsgfQogICAgIHZvaWQgc2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JTdHJp
bmc6OmNyZWF0ZSh2YWx1ZSksIHZhbHVlKTsgfQogICAgIHZvaWQgc2V0TG9uZyhJbnNwZWN0b3JQ
cm9wZXJ0eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwg
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBTdHJpbmc6Om51bWJl
cih2YWx1ZSkpOyB9CisgICAgdm9pZCBzZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9w
ZXJ0eUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlQ29va2llKCk7CkBAIC05MCw2ICs5Myw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29s
IHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxpYXMsIGNvbnN0IFN0cmluZyYgcHJlZmVy
ZW5jZU5hbWUpOwogICAgIHZvaWQgcmVnaXN0ZXJTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb250ZW5kQWxp
YXMsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOwogICAgIHZvaWQgcmVnaXN0ZXJMb25n
KEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSwgY29uc3QgU3RyaW5n
JiBmcm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKKyAgICB2b2lk
IHJlZ2lzdGVyT2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3QgU3Ry
aW5nJiBmcm9udGVuZEFsaWFzLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKIAogICAg
IEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDc3YmE4OWQuLjQyNDhjNDEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMK
QEAgLTEwNiwxMyArMTA2LDM5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUgPSB7CiAKICAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50LnRhcmdldC5pZF07Cisg
ICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OworCisgICAgICAgIGRlbGV0ZSB0
aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKKworICAgICAgICBpZiAoIWJyZWFrcG9p
bnQudXJsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBX
ZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5icmVha3BvaW50czsKKyAgICAgICAgdmFy
IHNvdXJjZUJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHNbYnJlYWtwb2ludC51cmxdOworICAgICAg
ICBpZiAoIXNvdXJjZUJyZWFrcG9pbnRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoIWJyZWFrcG9pbnQubGluZSBpbiBzb3VyY2VCcmVha3BvaW50cykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVsZXRlIHNvdXJjZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnQubGluZV07
CisgICAgICAgIGZvciAodmFyIGxpbmUgaW4gc291cmNlQnJlYWtwb2ludHMpIHsKKyAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmJyZWFrcG9pbnRzID0gYnJlYWtw
b2ludHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGJy
ZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0
aW9uU2V0dGluZ3MuYnJlYWtwb2ludHMgPSBicmVha3BvaW50czsKICAgICB9LAogCiAgICAgX3Nl
dEJyZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGlzT25lVGltZSkKICAg
ICB7CiAgICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQoc3VjY2VzcywgbGluZSkKICAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIWlzT25lVGltZSAmJiBicmVha3Bv
aW50LnVybCkgeworICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rv
ci5hcHBsaWNhdGlvblNldHRpbmdzLmJyZWFrcG9pbnRzOworICAgICAgICAgICAgICAgIGlmICgh
KGJyZWFrcG9pbnQudXJsIGluIGJyZWFrcG9pbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWtwb2ludHNbYnJlYWtwb2ludC51cmxdID0ge307CisgICAgICAgICAgICAgICAgYnJlYWtwb2lu
dHNbYnJlYWtwb2ludC51cmxdW2xpbmVdID0geyBlbmFibGVkOiBicmVha3BvaW50LmVuYWJsZWQs
IGNvbmRpdGlvbjogYnJlYWtwb2ludC5jb25kaXRpb24gfTsKKyAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5icmVha3BvaW50cyA9IGJyZWFrcG9pbnRzOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBsaW5lID09IGJyZWFr
cG9pbnQubGluZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpZiAoaXNP
bmVUaW1lKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGlu
Z3MuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggMjgw
NWJjNS4uZWFmNGNlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nl
dHRpbmdzLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwpA
QCAtNzgsNiArNzgsMzEgQEAgV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdGhpcy5fX2RlZmluZVNldHRlcl9fKGtleSwgdGhpcy5fc2V0UHJvamVjdFNldHRpbmcu
YmluZCh0aGlzLCBrZXkpKTsKICAgICB9LAogCisgICAgZ2V0U2V0dGluZ0ZvckFsbFByb2plY3Rz
OiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0ge307CisgICAgICAg
IHZhciByZWdleHAgPSAiXiIgKyBrZXkgKyAiOiI7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgd2luZG93LmxvY2FsU3RvcmFnZS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0
b3JhZ2VLZXkgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmtleShpKTsKKyAgICAgICAgICAgIGlmIChz
dG9yYWdlS2V5LnNlYXJjaChyZWdleHApID09PSAtMSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W3N0b3JhZ2VLZXld
ID0gSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVt
b3ZlSXRlbShzdG9yYWdlS2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlv
bih1cmwpCisgICAgeworICAgICAgICB2YXIgZnJhZ21lbnRJbmRleCA9IHVybC5pbmRleE9mKCIj
Iik7CisgICAgICAgIGlmIChmcmFnbWVudEluZGV4ICE9PSAtMSkKKyAgICAgICAgICAgIHVybCA9
IHVybC5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCk7CisgICAgICAgIHRoaXMuX2luc3BlY3Rl
ZFVSTCA9IHVybDsKKyAgICB9LAorCiAgICAgX2dldDogZnVuY3Rpb24oa2V5LCBkZWZhdWx0VmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoa2V5IGluIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKQEAg
LTEwNywxMSArMTMyLDcgQEAgV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsKIAog
ICAgIF9mb3JtYXRQcm9qZWN0S2V5OiBmdW5jdGlvbihrZXkpCiAgICAgewotICAgICAgICB2YXIg
dXJsID0gdGhpcy5fbWFpblJlc291cmNlVVJMOwotICAgICAgICB2YXIgZnJhZ21lbnRJbmRleCA9
IHVybC5pbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChmcmFnbWVudEluZGV4ICE9PSAtMSkKLSAg
ICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCk7Ci0gICAgICAg
IHJldHVybiBrZXkgKyAiLiIgKyB1cmw7CisgICAgICAgIHJldHVybiBrZXkgKyAiOiIgKyB0aGlz
Ll9pbnNwZWN0ZWRVUkw7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcwppbmRleCA4NWNhM2Y2Li5iY2QzZjRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTUzMCw3ICs1MzAsOSBAQCBXZWJJbnNwZWN0b3IuZG9M
b2FkZWREb25lID0gZnVuY3Rpb24oKQogICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcygi
cG9ydC0iICsgcG9ydCk7CiAKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZGVkKCk7CisK
ICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncyA9IG5ldyBXZWJJbnNwZWN0b3Iu
U2V0dGluZ3MoKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnRzKFdlYkluc3Bl
Y3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmdldFNldHRpbmdGb3JBbGxQcm9qZWN0cygiYnJlYWtw
b2ludHMiKSk7CiAKICAgICB0aGlzLl9yZWdpc3RlclNob3J0Y3V0cygpOwogCkBAIC0xNTMxLDYg
KzE1MzMsNyBAQCBXZWJJbnNwZWN0b3IuYnJpbmdUb0Zyb250ID0gZnVuY3Rpb24oKQogV2ViSW5z
cGVjdG9yLmluc3BlY3RlZFVSTENoYW5nZWQgPSBmdW5jdGlvbih1cmwpCiB7CiAgICAgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0Lmluc3BlY3RlZFVSTENoYW5nZWQodXJsKTsKKyAgICB0aGlzLmFwcGxp
Y2F0aW9uU2V0dGluZ3MuaW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmwpOwogICAgIHRoaXMuZXh0ZW5z
aW9uU2VydmVyLm5vdGlmeUluc3BlY3RlZFVSTENoYW5nZWQoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77102</attachid>
            <date>2010-12-21 04:54:12 -0800</date>
            <delta_ts>2010-12-21 09:50:23 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>65982</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMmQ3NThiLi4wODI0OTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTIt
MjEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcGVy
c2lzdCBKYXZhU2NyaXB0IGJyZWFrcG9pbnRzIGluIGZyb250ZW5kIHNldHRpbmdzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg0MzQKKworICAgICAg
ICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5zZXRCcmVha3BvaW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZGVidWdnZXItYnJlYWtwb2ludHMtbm90LWFjdGl2YXRlZC1vbi1yZWxv
YWQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXItcGF1c2Utb24tYnJlYWtwb2lu
dC5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1s
OgorCiAyMDEwLTEyLTIwICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCmluZGV4IGU0NGZjYTkuLjQxMzQ2MTMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QyLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QyLmpzCkBAIC05MCw2ICs5MCwxMyBAQCBJbnNwZWN0b3JUZXN0LmNhcHR1cmVTdGFja1RyYWNl
ID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKICAgICB9CiB9OwogCitJbnNwZWN0b3JUZXN0LnNldEJy
ZWFrcG9pbnQgPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbikK
K3sKKyAgICB2YXIgc2NyaXB0cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdHNG
b3JVUkwodXJsKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kp
CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoc2NyaXB0
c1tpXS5zb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKK30KKwogSW5z
cGVjdG9yVGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIHsKICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IGV4ZWN1dGlvbiBwYXVzZWQuIik7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItYnJlYWtwb2ludHMtbm90LWFjdGl2
YXRlZC1vbi1yZWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1icmVh
a3BvaW50cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCmluZGV4IGZjMmM5MjYuLjJmZGM5
ZWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1icmVha3BvaW50
cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kZWJ1Z2dlci1icmVha3BvaW50cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCkBAIC0y
NCw3ICsyNCw3IEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24oKQogICAgIGZ1bmN0aW9uIHN0ZXAyKCkK
ICAgICB7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNYWluIHJlc291cmNlIHdh
cyBzaG93bi4iKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZpc2libGVW
aWV3LnNvdXJjZUZyYW1lLl9zZXRCcmVha3BvaW50KDgpOworICAgICAgICBJbnNwZWN0b3JUZXN0
LnNldEJyZWFrcG9pbnQoV2ViSW5zcGVjdG9yLm1haW5SZXNvdXJjZS51cmwsIDgsIHRydWUsICIi
KTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRz
QnV0dG9uLmVsZW1lbnQuY2xpY2soKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdl
KHN0ZXAzKTsKICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXItcGF1c2Utb24tYnJlYWtwb2ludC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyLXBhdXNlLW9uLWJyZWFrcG9pbnQuaHRtbAppbmRleCA0ODMxZDQyLi40MzI2MGIyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItcGF1c2Utb24tYnJlYWtwb2lu
dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1wYXVzZS1vbi1icmVh
a3BvaW50Lmh0bWwKQEAgLTIyLDcgKzIyLDcgQEAgdmFyIHRlc3QgPSBmdW5jdGlvbigpCiAgICAg
ZnVuY3Rpb24gc3RlcDIoKQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQo
IlNjcmlwdCBzb3VyY2Ugd2FzIHNob3duLiIpOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxz
LnNjcmlwdHMudmlzaWJsZVZpZXcuc291cmNlRnJhbWUuX3NldEJyZWFrcG9pbnQoOSk7CisgICAg
ICAgIEluc3BlY3RvclRlc3Quc2V0QnJlYWtwb2ludChXZWJJbnNwZWN0b3IubWFpblJlc291cmNl
LnVybCwgOSwgdHJ1ZSwgIiIpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RGdW5jdGlv
bkFuZFdhaXRVbnRpbFBhdXNlZChzdGVwMyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQKaW5k
ZXggMjIyMWM4NC4uYTVkOGRmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jl
cG9ydC1wcm90b2NvbC1lcnJvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVjdGVkLnR4dApAQCAtODQsOCArODQsNyBA
QCBUZXN0cyB0aGF0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIGlzIGNhdGNoaW5nIGluY29y
cmVjdCBtZXNzYWdlcy4KICAgICBzdWNjZXNzIDogZmFsc2UKICAgICBlcnJvcnMgOiB7CiAgICAg
ICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6IERlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iCi0gICAgICAgIDEgOiAiUHJvdG9jb2wgRXJyb3I6IEFyZ3VtZW50ICdzb3VyY2VJRCcgd2l0
aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIgotICAgICAgICAyIDogIlByb3RvY29sIEVy
cm9yOiBBcmd1bWVudCAnbGluZU51bWJlcicgd2l0aCB0eXBlICdOdW1iZXInIHdhcyBub3QgZm91
bmQuIgorICAgICAgICAxIDogIlByb3RvY29sIEVycm9yOiBBcmd1bWVudCAnYnJlYWtwb2ludElk
JyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3VuZC4iCiAgICAgfQogfQogewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwKaW5kZXgg
ZDQ4OTYxZC4uNGMwZmY2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9y
dC1wcm90b2NvbC1lcnJvcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0
LXByb3RvY29sLWVycm9ycy5odG1sCkBAIC0xNyw3ICsxNyw3IEBAIGZ1bmN0aW9uIHRlc3QoKQog
ICAgICAgICAneyJzZXEiOjQsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMi
Ont9fScsCiAgICAgICAgICd7InNlcSI6NSwiY29tbWFuZCI6InJlc291cmNlQ29udGVudCIsImFy
Z3VtZW50cyI6eyJpZGVudGlmaWVyIjoibm90IGEgbnVtYmVyIn19JywKICAgICAgICAgJ3sic2Vx
Ijo2LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6e319JywKLSAgICAg
ICAgJ3sic2VxIjo3LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6eyJz
b3VyY2VJRCI6InNvbWVTb3VyY2VJZCIsImxpbmVOdW1iZXIiOjB9fScsCisgICAgICAgICd7InNl
cSI6NywiY29tbWFuZCI6InJlbW92ZUJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOnsiYnJlYWtwb2lu
dElkIjoic29tZUJyZWFrcG9pbnRJZCJ9fScsCiAKICAgICBdOwogICAgIHZhciBudW1iZXJPZlJl
cG9ydHMgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBmZjExMTEwLi5lZDM4YzJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEwLTEyLTIxICBQ
YXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBlcnNpc3Qg
SmF2YVNjcmlwdCBicmVha3BvaW50cyBpbiBmcm9udGVuZCBzZXR0aW5ncy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NDM0CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9EZWJ1Z2dlclNjcmlwdC5q
czoKKyAgICAgICAgKCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdn
ZXJGcm9tRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0U3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRTdGlja3lCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN0b3JlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckZvclBhZ2VOYXZpZ2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZS5yZW1vdmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlLl9zZXJpYWxpemVUb0pTT04p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50LnByb3RvdHlwZS5fc2VyaWFsaXplVG9KU09OKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5fZGVidWdnZXJQYXVzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanM6CisKIDIwMTAtMTItMTcgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGE0NDBiODEuLmQ2ZDYx
YzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC01MCw2
ICs1MCw3IEBACiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNpbmNs
dWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KQEAgLTEzNywyNCArMTM4LDM0IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2
ZXI6Omhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4g
bV9wYWdlTGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwogfQogCi1ib29sIFNjcmlwdERlYnVn
U2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFr
cG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExp
bmVOdW1iZXIpCitTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25k
aXRpb24sIGJvb2wgZW5hYmxlZCwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpCiB7CiAgICAg
aW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFz
b3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAiIjsK
ICAgICBCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAg
IGl0ID0gbV9icmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2ludHMo
KSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7Cisg
ICAgaWYgKGl0LT5zZWNvbmQuY29udGFpbnMobGluZU51bWJlcikpCisgICAgICAgIHJldHVybiAi
IjsKKyAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50KGVuYWJs
ZWQsIGNvbmRpdGlvbikpOwogICAgICphY3R1YWxMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhzb3VyY2VJRCwgIjoiLCBTdHJp
bmc6Om51bWJlcihsaW5lTnVtYmVyKSk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBicmVha3BvaW50SWQpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlE
LnRvSW50UHRyKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdG9rZW5zOworICAgIGJyZWFrcG9pbnRJ
ZC5zcGxpdCgiOiIsIHRva2Vucyk7CisgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMikKKyAgICAg
ICAgcmV0dXJuOworICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSB0b2tlbnNbMF0udG9JbnRQ
dHIoKTsKICAgICBpZiAoIXNvdXJjZUlEVmFsdWUpCiAgICAgICAgIHJldHVybjsKKyAgICBib29s
IHN1Y2Nlc3M7CisgICAgdW5zaWduZWQgbGluZU51bWJlciA9IHRva2Vuc1sxXS50b1VJbnQoJnN1
Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuOwogICAgIEJyZWFrcG9p
bnRzTWFwOjppdGVyYXRvciBpdCA9IG1fYnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsK
ICAgICBpZiAoaXQgIT0gbV9icmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgaXQtPnNlY29uZC5y
ZW1vdmUobGluZU51bWJlcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgK
aW5kZXggMzE3MmM2NS4uODFjZDlhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuaApAQCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0ZW5lcihT
Y3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2Ny
aXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKLSAgICB2b2lkIHJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7
CisgICAgU3RyaW5nIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCwgdW5z
aWduZWQqIGFjdHVhbExpbmVOdW1iZXIpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CiAg
ICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7CiAgICAgdm9p
ZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsg
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9EZWJ1Z2dlclNjcmlwdC5qcyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvRGVidWdnZXJTY3JpcHQuanMKaW5kZXggNjAyNjIxNC4uNTBmNzkx
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9EZWJ1Z2dlclNjcmlwdC5qcworKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0LmpzCkBAIC0zMSw3ICszMSw2IEBA
CiAoZnVuY3Rpb24gKCkgewogCiB2YXIgRGVidWdnZXJTY3JpcHQgPSB7fTsKLURlYnVnZ2VyU2Ny
aXB0Ll9icmVha3BvaW50cyA9IHt9OwogCiBEZWJ1Z2dlclNjcmlwdC5QYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID0gewogICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucyA6IDAsCkBAIC0xMDAsMjUgKzk5
LDEzIEBAIERlYnVnZ2VyU2NyaXB0LnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVjU3RhdGUs
IGFyZ3MpCiAgICAgdmFyIGxvY2F0aW9ucyA9IERlYnVnLmZpbmRCcmVha1BvaW50QWN0dWFsTG9j
YXRpb25zKGJyZWFrSWQpOwogICAgIGlmICghbG9jYXRpb25zLmxlbmd0aCkKICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKLSAgICB2YXIgYWN0dWFsTGluZU51bWJlciA9IGxvY2F0aW9uc1swXS5s
aW5lOwotCi0gICAgdmFyIGtleSA9IGFyZ3Muc2NyaXB0SWQgKyAiOiIgKyBhY3R1YWxMaW5lTnVt
YmVyOwotICAgIGlmIChrZXkgaW4gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7Ci0gICAg
ICAgIC8vIFJlbW92ZSBvbGQgYnJlYWtwb2ludC4KLSAgICAgICAgRGVidWcuZmluZEJyZWFrUG9p
bnQoRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0sIHRydWUpOwotICAgIH0KLSAgICBE
ZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XSA9IGJyZWFrSWQ7Ci0gICAgcmV0dXJuIERl
YnVnZ2VyU2NyaXB0Ll92OFRvV2Via2l0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKTsKKyAg
ICBhcmdzLmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fdjhUb1dlYmtpdExpbmVOdW1iZXIo
bG9jYXRpb25zWzBdLmxpbmUpOworICAgIHJldHVybiBicmVha0lkLnRvU3RyaW5nKCk7CiB9CiAK
IERlYnVnZ2VyU2NyaXB0LnJlbW92ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFy
Z3MpCiB7Ci0gICAgYXJncy5saW5lTnVtYmVyID0gRGVidWdnZXJTY3JpcHQuX3dlYmtpdFRvVjhM
aW5lTnVtYmVyKGFyZ3MubGluZU51bWJlcik7Ci0gICAgdmFyIGtleSA9IGFyZ3Muc2NyaXB0SWQg
KyAiOiIgKyBhcmdzLmxpbmVOdW1iZXI7Ci0gICAgdmFyIGJyZWFrSWQgPSBEZWJ1Z2dlclNjcmlw
dC5fYnJlYWtwb2ludHNba2V5XTsKLSAgICBpZiAoYnJlYWtJZCkKLSAgICAgICAgRGVidWcuZmlu
ZEJyZWFrUG9pbnQoYnJlYWtJZCwgdHJ1ZSk7Ci0gICAgZGVsZXRlIERlYnVnZ2VyU2NyaXB0Ll9i
cmVha3BvaW50c1trZXldOworICAgIERlYnVnLmZpbmRCcmVha1BvaW50KGFyZ3MuYnJlYWtwb2lu
dElkLCB0cnVlKTsKIH0KIAogRGVidWdnZXJTY3JpcHQucGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9
IGZ1bmN0aW9uKCkKQEAgLTE5MCwxMSArMTc3LDcgQEAgRGVidWdnZXJTY3JpcHQuZWRpdFNjcmlw
dFNvdXJjZSA9IGZ1bmN0aW9uKHNjcmlwdElkLCBuZXdTb3VyY2UpCiAKIERlYnVnZ2VyU2NyaXB0
LmNsZWFyQnJlYWtwb2ludHMgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCiB7Ci0gICAgZm9y
ICh2YXIga2V5IGluIERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50cykgewotICAgICAgICB2YXIg
YnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXldOwotICAgICAgICBEZWJ1
Zy5maW5kQnJlYWtQb2ludChicmVha0lkLCB0cnVlKTsKLSAgICB9Ci0gICAgRGVidWdnZXJTY3Jp
cHQuX2JyZWFrcG9pbnRzID0ge307CisgICAgRGVidWcuY2xlYXJBbGxCcmVha1BvaW50cygpOwog
fQogCiBEZWJ1Z2dlclNjcmlwdC5zZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IGZ1bmN0aW9uKGV4
ZWNTdGF0ZSwgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAK
aW5kZXggOWRmY2E1NS4uNGI0NjExYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5jcHAKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpy
ZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnZQog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgYWxsIGJyZWFrcG9pbnRzIHNldCBieSB0aGUgYWdlbnQuCiB9
CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50LCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCB1bnNpZ25lZCogYWN0dWFsTGluZU51bWJlcikKK1N0cmluZyBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCB1bnNpZ25lZCogYWN0dWFs
TGluZU51bWJlcikKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29udGV4
dCgpOwpAQCAtMTUyLDI3ICsxNTIsMjUgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGIKICAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5ldygpOwogICAgIGFyZ3Mt
PlNldCh2ODo6U3RyaW5nOjpOZXcoInNjcmlwdElkIiksIHY4U3RyaW5nKHNvdXJjZUlEKSk7CiAg
ICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6
TmV3KGxpbmVOdW1iZXIpKTsKLSAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRp
b24iKSwgdjhTdHJpbmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKLSAgICBhcmdzLT5TZXQodjg6
OlN0cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFi
bGVkKSk7CisgICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29uZGl0aW9uIiksIHY4U3Ry
aW5nKGNvbmRpdGlvbikpOworICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWQi
KSwgdjg6OkJvb2xlYW46Ok5ldyhlbmFibGVkKSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNh
c3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic2V0QnJlYWtw
b2ludCIpKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHY4OjpEZWJ1Zzo6
Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOwotICAgIGlmICghcmVzdWx0LT5Jc051
bWJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKHJlc3VsdC0+SW50MzJW
YWx1ZSgpID49IDApOwotICAgICphY3R1YWxMaW5lTnVtYmVyID0gcmVzdWx0LT5JbnQzMlZhbHVl
KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGJyZWFrcG9p
bnRJZCA9IHY4OjpEZWJ1Zzo6Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOworICAg
IGlmICghYnJlYWtwb2ludElkLT5Jc1N0cmluZygpKQorICAgICAgICByZXR1cm4gIiI7CisgICAg
KmFjdHVhbExpbmVOdW1iZXIgPSBhcmdzLT5HZXQodjg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVy
IikpLT5JbnQzMlZhbHVlKCk7CisgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKGJy
ZWFrcG9pbnRJZC0+VG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBicmVha3BvaW50SWQpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0Nv
bnRleHQoKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29u
dGV4dCk7CiAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5l
dygpOwotICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoInNjcmlwdElkIiksIHY4U3RyaW5n
KHNvdXJjZUlEKSk7Ci0gICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU51bWJlciIp
LCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVOdW1iZXIpKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmlu
Zzo6TmV3KCJicmVha3BvaW50SWQiKSwgdjhTdHJpbmcoYnJlYWtwb2ludElkKSk7CiAKICAgICB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpT
dHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CiAgICAgdjg6OkRlYnVnOjpDYWxsKHJl
bW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmgKaW5kZXggNWM1ZDZjNi4uNDBkZDVmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNTUsOCArNTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVtb3Zl
TGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIGJvb2wgc2V0QnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9p
bnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKLSAg
ICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlcik7CisgICAgU3RyaW5nIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wg
ZW5hYmxlZCwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpOworICAgIHZvaWQgcmVtb3ZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CiAgICAgdm9pZCBjbGVhckJyZWFr
cG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRl
ZCk7CiAgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2
YXRlZCh0cnVlKTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggMTJlNzIzZC4uYTU5Mzg1
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC0yMTgsOCArMjE4LDggQEAgbW9kdWxlIGNv
cmUgewogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMo
KTsKICAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMo
KTsKIAotICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIHNldEJyZWFrcG9pbnQoaW4gU3Ry
aW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgaW4gYm9vbGVhbiBlbmFi
bGVkLCBpbiBTdHJpbmcgY29uZGl0aW9uLCBvdXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgdW5zaWdu
ZWQgaW50IGFjdHVhbExpbmVOdW1iZXIpOwotICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lk
IHJlbW92ZUJyZWFrcG9pbnQoaW4gU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxp
bmVOdW1iZXIpOworICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIHNldEJyZWFrcG9pbnQo
aW4gU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgaW4gU3RyaW5n
IGNvbmRpdGlvbiwgaW4gYm9vbGVhbiBlbmFibGVkLCBvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCwg
b3V0IHVuc2lnbmVkIGludCBhY3R1YWxMaW5lTnVtYmVyKTsKKyAgICAgICAgW2RvbWFpbj1EZWJ1
Z2dlcl0gdm9pZCByZW1vdmVCcmVha3BvaW50KGluIFN0cmluZyBicmVha3BvaW50SWQpOwogCiAg
ICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldFN0aWNreUJyZWFrcG9pbnRzKGluIE9i
amVjdCBicmVha3BvaW50cyk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJv
d3NlckRlYnVnZ2VyLgogCkBAIC0yNDUsNyArMjQ1LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAg
ICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGVkaXRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNvdXJj
ZUlELCBpbiBTdHJpbmcgbmV3Q29udGVudCwgb3V0IGJvb2xlYW4gc3VjY2Vzcywgb3V0IFN0cmlu
ZyByZXN1bHQsIG91dCBWYWx1ZSBuZXdDYWxsRnJhbWVzKTsKICAgICAgICAgW2RvbWFpbj1EZWJ1
Z2dlcl0gdm9pZCBnZXRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5n
IHNjcmlwdFNvdXJjZSk7CiAKLSAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVnZ2VyXSB2b2lk
IGJyZWFrcG9pbnRSZXN0b3JlZChvdXQgU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwg
b3V0IGludCBsaW5lLCBvdXQgYm9vbGVhbiBlbmFibGVkLCBvdXQgU3RyaW5nIGNvbmRpdGlvbik7
IC8vIEZJWE1FOiBzaG91bGQgYmUgYnJlYWtwb2ludFJlc29sdmVkCisgICAgICAgIFtub3RpZnks
IGRvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBicmVha3BvaW50UmVzb2x2ZWQob3V0IFN0cmluZyBicmVh
a3BvaW50SWQsIG91dCBTdHJpbmcgc291cmNlSUQsIG91dCB1bnNpZ25lZCBpbnQgbGluZU51bWJl
ciwgb3V0IFN0cmluZyBjb25kaXRpb24sIG91dCBib29sZWFuIGVuYWJsZWQsIG91dCB1bnNpZ25l
ZCBpbnQgb3JpZ2luYWxMaW5lTnVtYmVyKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX1dPUktFUlMp
ICYmIEVOQUJMRV9XT1JLRVJTCiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1EZWJ1Z2dlcl0gdm9p
ZCBkaWRDcmVhdGVXb3JrZXIob3V0IGxvbmcgaWQsIG91dCBTdHJpbmcgdXJsLCBvdXQgYm9vbGVh
biBpc1NoYXJlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDc5
MWUzYTYuLmViNGMwZTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBA
IC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5o
IgotI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJTY3JpcHRQcm9maWxl
ci5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDIzMzJkODcuLmM4ODJjMTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsNyArMTUwLDYg
QEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCiAgICAgLCBtX2hhc1hIUkJy
ZWFrcG9pbnRXaXRoRW1wdHlVUkwoZmFsc2UpCi0gICAgLCBtX3N0aWNreUJyZWFrcG9pbnRzUmVz
dG9yZWQoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC0xMzQ5LDYgKzEzNDgsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlz
KQogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCiAgICAgbV9kZWJ1Z2dlckFnZW50ID0g
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwor
ICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpOwogCiAgICAgbV9mcm9udGVuZC0+ZGVidWdn
ZXJXYXNFbmFibGVkKCk7CiB9CkBAIC0xMzk2LDEwICsxMzk2LDYgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpyZXN1bWUoKQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTdGlja3lC
cmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCiB7CiAg
ICAgbV9zdGF0ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpzdGlja3lCcmVha3BvaW50cywg
YnJlYWtwb2ludHMpOwotICAgIGlmICghbV9zdGlja3lCcmVha3BvaW50c1Jlc3RvcmVkKSB7Ci0g
ICAgICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpOwotICAgICAgICBtX3N0aWNreUJyZWFr
cG9pbnRzUmVzdG9yZWQgPSB0cnVlOwotICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpyZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKQpAQCAtMTQyMCw4ICsxNDE2LDkgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUsICgiRXZlbnRMaXN0ZW5l
ciIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgeGhyTmF0aXZlQnJlYWtwb2lu
dFR5cGUsICgiWEhSIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBldmVudExp
c3RlbmVyQnJlYWtwb2ludFR5cGUsICgiRXZlbnRMaXN0ZW5lciIpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgamF2YVNjcmlwdEJyZWFrcG9pbnRUeXBlLCAoIkpTIikpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4aHJCcmVha3BvaW50VHlwZSwgKCJYSFIiKSk7
CiAKICAgICBpZiAoIWJyZWFrcG9pbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MjksMTcgKzE0
MjYsMzMgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlU3RpY2t5QnJlYWtwb2lu
dChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnIKICAgICBpZiAoIWJyZWFrcG9pbnQtPmdl
dFN0cmluZygidHlwZSIsICZ0eXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgZW5hYmxl
ZDsKLSAgICBpZiAoIWJyZWFrcG9pbnQtPmdldEJvb2xlYW4oImVuYWJsZWQiLCAmZW5hYmxlZCkg
fHwgIWVuYWJsZWQpCisgICAgaWYgKCFicmVha3BvaW50LT5nZXRCb29sZWFuKCJlbmFibGVkIiwg
JmVuYWJsZWQpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Y29uZGl0aW9uID0gYnJlYWtwb2ludC0+Z2V0T2JqZWN0KCJjb25kaXRpb24iKTsKICAgICBpZiAo
IWNvbmRpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHR5cGUgPT0gZXZlbnRMaXN0
ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7CisgICAgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnRUeXBlKSB7CisgICAgICAgIGlmICghZW5hYmxlZCkKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgU3RyaW5nIGV2ZW50TmFtZTsKICAgICAgICAgaWYgKGNvbmRpdGlvbi0+
Z2V0U3RyaW5nKCJldmVudE5hbWUiLCAmZXZlbnROYW1lKSkKICAgICAgICAgICAgIHNldEV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IHho
ck5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7CisgICAgfSBlbHNlIGlmICh0eXBlID09IGphdmFTY3Jp
cHRCcmVha3BvaW50VHlwZSkgeworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBpZiAoIWNv
bmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgZG91YmxlIGxpbmVOdW1iZXI7CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXROdW1i
ZXIoImxpbmVOdW1iZXIiLCAmbGluZU51bWJlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIFN0cmluZyBqYXZhU2NyaXB0Q29uZGl0aW9uOworICAgICAgICBpZiAoIWNvbmRpdGlvbi0+
Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmamF2YVNjcmlwdENvbmRpdGlvbikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCisgICAgICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPnNldFN0aWNreUJyZWFrcG9pbnQodXJsLCBsaW5lTnVtYmVyLCBqYXZhU2Ny
aXB0Q29uZGl0aW9uLCBlbmFibGVkKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0geGhyQnJlYWtw
b2ludFR5cGUpIHsKKyAgICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBTdHJpbmcgdXJsOwogICAgICAgICBpZiAoY29uZGl0aW9uLT5nZXRTdHJpbmcoInVy
bCIsICZ1cmwpKQogICAgICAgICAgICAgc2V0WEhSQnJlYWtwb2ludCh1cmwpOwpAQCAtMTUxMywy
NiArMTUyNiw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nCiAgICAgZnVuY3Rpb24uY2FsbCgp
OwogfQogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi1TdHJpbmcgSW5zcGVjdG9y
Q29udHJvbGxlcjo6YnJlYWtwb2ludHNTZXR0aW5nS2V5KCkKLXsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywga2V5UHJlZml4LCAoImJyZWFrcG9pbnRzOiIpKTsKLSAgICByZXR1cm4g
a2V5UHJlZml4ICsgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6bWQ1QmFzZTE2KG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT51cmwoKS5zdHJpbmcoKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckNvbnRyb2xsZXI6OmxvYWRCcmVha3BvaW50
cygpCi17Ci0gICAgU3RyaW5nIGpzb25TdHJpbmc7Ci0gICAgbV9jbGllbnQtPnBvcHVsYXRlU2V0
dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwgJmpzb25TdHJpbmcpOwotICAgIHJldHVybiBJ
bnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb25TdHJpbmcpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNhdmVCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YnJlYWtwb2ludHMpCi17Ci0gICAgbV9jbGllbnQtPnN0b3JlU2V0dGluZyhicmVha3BvaW50c1Nl
dHRpbmdLZXkoKSwgYnJlYWtwb2ludHMtPnRvSlNPTlN0cmluZygpKTsKLX0KLSNlbmRpZgotCiBz
dGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBQYXRo
IHF1YWRQYXRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGY1
NTA5MGMuLmU1NzBjOTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
QEAgLTMzNSwxMyArMzM1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAot
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OwotICAgIFN0cmluZyBicmVha3BvaW50c1NldHRpbmdLZXkoKTsKLSAg
ICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBsb2FkQnJlYWtwb2ludHMoKTsKLSAgICB2b2lk
IHNhdmVCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMp
OwotI2VuZGlmCi0KICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ7CkBAIC0zOTUsNyArMzg4LDYgQEAgcHJpdmF0ZToKICAgICBI
YXNoU2V0PFN0cmluZz4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHM7CiAgICAgSGFzaFNldDxT
dHJpbmc+IG1fWEhSQnJlYWtwb2ludHM7CiAgICAgYm9vbCBtX2hhc1hIUkJyZWFrcG9pbnRXaXRo
RW1wdHlVUkw7Ci0gICAgYm9vbCBtX3N0aWNreUJyZWFrcG9pbnRzUmVzdG9yZWQ7CiAKICAgICBP
d25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9wcm9maWxlckFnZW50OwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDBiMThi
MGMuLjAwNDY5ODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCkBAIC0zNywxNiArMzcsOSBAQAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvTUQ1Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgU3RyaW5nIGZvcm1hdEJy
ZWFrcG9pbnRJZChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQot
ewotICAgIHJldHVybiBtYWtlU3RyaW5nKHNvdXJjZUlELCAnOicsIFN0cmluZzo6bnVtYmVyKGxp
bmVOdW1iZXIpKTsKLX0KLQogUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogewogICAgIE93blB0cjxJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIsIGZyb250ZW5kKSk7CkBAIC02MSw3ICs1NCw2
IEBAIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29uCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIo
aW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAgICAgLCBt
X3BhdXNlZFNjcmlwdFN0YXRlKDApCi0gICAgLCBtX2JyZWFrcG9pbnRzTG9hZGVkKGZhbHNlKQog
ICAgICwgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCiB7CiB9CkBAIC04Nyw0OSAr
NzksMzcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWFjdGl2YXRlQnJlYWtwb2lu
dHMoKQogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5kZWFjdGl2YXRlQnJlYWtwb2lu
dHMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwg
Y29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wqIHN1Y2Nlc3MsIHVuc2lnbmVkIGludCogYWN0
dWFsTGluZU51bWJlcikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U3RpY2t5QnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQoZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAgICAqc3VjY2VzcyA9IFNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50LCBsaW5l
TnVtYmVyLCBhY3R1YWxMaW5lTnVtYmVyKTsKLSAgICBpZiAoISpzdWNjZXNzKQotICAgICAgICBy
ZXR1cm47CisgICAgSGFzaE1hcDxTdHJpbmcsIFNjcmlwdEJyZWFrcG9pbnRzPjo6aXRlcmF0b3Ig
aXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBpZiAoaXQgPT0gbV9zdGlj
a3lCcmVha3BvaW50cy5lbmQoKSkKKyAgICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNl
dCh1cmwsIFNjcmlwdEJyZWFrcG9pbnRzKCkpLmZpcnN0OworICAgIGl0LT5zZWNvbmQuc2V0KGxp
bmVOdW1iZXIsIEJyZWFrcG9pbnQoY29uZGl0aW9uLCBlbmFibGVkKSk7CiAKLSAgICBTdHJpbmcg
dXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChzb3VyY2VJRCk7Ci0gICAgaWYgKHVybC5pc0VtcHR5
KCkpCisgICAgVVJMVG9Tb3VyY2VJRHNNYXA6Oml0ZXJhdG9yIHVybFRvU291cmNlSURzSXRlcmF0
b3IgPSBtX3VybFRvU291cmNlSURzLmZpbmQodXJsKTsKKyAgICBpZiAodXJsVG9Tb3VyY2VJRHNJ
dGVyYXRvciA9PSBtX3VybFRvU291cmNlSURzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgYnJlYWtwb2ludElkID0gZm9ybWF0QnJlYWtwb2ludElkKHNvdXJjZUlELCAqYWN0
dWFsTGluZU51bWJlcik7Ci0gICAgbV9icmVha3BvaW50c01hcHBpbmcuc2V0KGJyZWFrcG9pbnRJ
ZCwgKmFjdHVhbExpbmVOdW1iZXIpOwotCi0gICAgU3RyaW5nIGtleSA9IG1kNUJhc2UxNih1cmwp
OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0g
bV9zdGlja3lCcmVha3BvaW50cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1fc3RpY2t5QnJl
YWtwb2ludHMuZW5kKCkpCi0gICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQoa2V5
LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKLSAgICBpdC0+c2Vjb25kLnNldCgqYWN0dWFs
TGluZU51bWJlciwgYnJlYWtwb2ludCk7Ci0gICAgc2F2ZUJyZWFrcG9pbnRzKCk7CisgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHNvdXJjZUlEcyA9IHVybFRvU291cmNlSURzSXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZUlEcy5zaXplKCk7ICsraSkK
KyAgICAgICAgcmVzdG9yZUJyZWFrcG9pbnQoc291cmNlSURzW2ldLCBsaW5lTnVtYmVyLCBjb25k
aXRpb24sIGVuYWJsZWQpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikK
K3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwg
Ym9vbCBlbmFibGVkLCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgdW5zaWduZWQgaW50KiBhY3R1YWxM
aW5lTnVtYmVyKQogewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVCcmVh
a3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLQotICAgIFN0cmluZyB1cmwgPSBtX3NvdXJj
ZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IGZvcm1hdEJyZWFrcG9pbnRJZChz
b3VyY2VJRCwgbGluZU51bWJlcik7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPjo6aXRl
cmF0b3IgbWFwcGluZ0l0ID0gbV9icmVha3BvaW50c01hcHBpbmcuZmluZChicmVha3BvaW50SWQp
OwotICAgIGlmIChtYXBwaW5nSXQgPT0gbV9icmVha3BvaW50c01hcHBpbmcuZW5kKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzdGlja3lMaW5lID0gbWFwcGluZ0l0LT5zZWNvbmQ7
Ci0gICAgbV9icmVha3BvaW50c01hcHBpbmcucmVtb3ZlKG1hcHBpbmdJdCk7CisgICAgKmJyZWFr
cG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJj
ZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGFjdHVhbExpbmVOdW1iZXIpOwor
fQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQg
PSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwotICAgIGlmIChpdCA9
PSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Cit2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50SWQpCit7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9p
bnQoYnJlYWtwb2ludElkKTsKK30KIAotICAgIGl0LT5zZWNvbmQucmVtb3ZlKHN0aWNreUxpbmUp
OwotICAgIHNhdmVCcmVha3BvaW50cygpOwordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpy
ZXN0b3JlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkKQoreworICAgIHVuc2ln
bmVkIGFjdHVhbExpbmVOdW1iZXIgPSAwOworICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJl
ciwgY29uZGl0aW9uLCBlbmFibGVkLCAmYWN0dWFsTGluZU51bWJlcik7CisgICAgaWYgKCFicmVh
a3BvaW50SWQuaXNFbXB0eSgpKQorICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2
ZWQoYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgYWN0dWFsTGluZU51bWJlciwgY29uZGl0aW9uLCBl
bmFibGVkLCBsaW5lTnVtYmVyKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpl
ZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3
Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIG5ld0NhbGxGcmFtZXMpCkBAIC0yMDAsMjggKzE4MCw5IEBAIGxvbmcgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpCiAKIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Y2xlYXJGb3JQYWdlTmF2aWdhdGlvbigpCiB7Ci0gICAgbV9zb3VyY2VJ
RFRvVVJMLmNsZWFyKCk7CiAgICAgbV9zY3JpcHRJRFRvQ29udGVudC5jbGVhcigpOworICAgIG1f
dXJsVG9Tb3VyY2VJRHMuY2xlYXIoKTsKICAgICBtX3N0aWNreUJyZWFrcG9pbnRzLmNsZWFyKCk7
Ci0gICAgbV9icmVha3BvaW50c01hcHBpbmcuY2xlYXIoKTsKLSAgICBtX2JyZWFrcG9pbnRzTG9h
ZGVkID0gZmFsc2U7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjptZDVCYXNl
MTYoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRz
W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0KLSAgICBNRDUgbWQ1OwotICAgIG1kNS5hZGRCeXRl
cyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVycygpKSwg
c3RyaW5nLmxlbmd0aCgpICogMik7Ci0gICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3Q7Ci0g
ICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7Ci0KLSAgICBWZWN0b3I8Y2hhciwgMzI+IHJlc3VsdDsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChkaWdpdHNbKGRpZ2VzdFtpXSA+PiA0KSAmIDB4Zl0pOwotICAgICAgICByZXN1bHQuYXBwZW5k
KGRpZ2l0c1tkaWdlc3RbaV0gJiAweGZdKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxGcmFtZXMoKQpAQCAtMjM2LDM5
ICsxOTcsNiBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpjdXJyZW50Q2FsbEZyYW1lcygpCiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LmNhbGxG
cmFtZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpsb2FkQnJlYWtwb2lu
dHMoKQotewotICAgIGlmIChtX2JyZWFrcG9pbnRzTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9icmVha3BvaW50c0xvYWRlZCA9IHRydWU7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHBhcnNlZFNldHRpbmcgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmxvYWRCcmVha3BvaW50
cygpOwotICAgIGlmICghcGFyc2VkU2V0dGluZykKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzID0gcGFyc2VkU2V0dGluZy0+YXNPYmplY3Qo
KTsKLSAgICBpZiAoIWJyZWFrcG9pbnRzKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IGJy
ZWFrcG9pbnRzLT5lbmQoKTsgKytpdCkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50c0ZvclVSTCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7Ci0gICAgICAgIGlm
ICghYnJlYWtwb2ludHNGb3JVUkwpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3Igc291cmNlQnJlYWtwb2lu
dHNJdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KGl0LT5maXJzdCwgU291cmNlQnJlYWtwb2lu
dHMoKSkuZmlyc3Q7Ci0gICAgICAgIFNjcmlwdEJyZWFrcG9pbnQ6OnNvdXJjZUJyZWFrcG9pbnRz
RnJvbUluc3BlY3Rvck9iamVjdChicmVha3BvaW50c0ZvclVSTCwgJnNvdXJjZUJyZWFrcG9pbnRz
SXQtPnNlY29uZCk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNh
dmVCcmVha3BvaW50cygpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQobV9zdGlja3lCcmVha3BvaW50cy5iZWdp
bigpKTsgaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBp
ZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNGb3JVUkwgPSBTY3JpcHRCcmVha3Bv
aW50OjppbnNwZWN0b3JPYmplY3RGcm9tU291cmNlQnJlYWtwb2ludHMoaXQtPnNlY29uZCk7Ci0g
ICAgICAgIGJyZWFrcG9pbnRzLT5zZXRPYmplY3QoaXQtPmZpcnN0LCBicmVha3BvaW50c0ZvclVS
TCk7Ci0gICAgfQotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2F2ZUJyZWFrcG9pbnRzKGJy
ZWFrcG9pbnRzKTsKLX0KLQogLy8gSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIgZnVuY3Rpb25zCiAK
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZp
cnN0TGluZSwgU2NyaXB0V29ybGRUeXBlIHdvcmxkVHlwZSkKQEAgLTI4MSwyMyArMjA5LDIwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGxvYWRCcmVha3BvaW50cygpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBT
b3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5k
KG1kNUJhc2UxNih1cmwpKTsKLSAgICBpZiAoaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQo
KSkgewotICAgICAgICBmb3IgKFNvdXJjZUJyZWFrcG9pbnRzOjppdGVyYXRvciBicmVha3BvaW50
SXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IGJyZWFrcG9pbnRJdCAhPSBpdC0+c2Vjb25kLmVuZCgp
OyArK2JyZWFrcG9pbnRJdCkgewotICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBicmVha3Bv
aW50SXQtPmZpcnN0OwotICAgICAgICAgICAgaWYgKGZpcnN0TGluZSA+IGxpbmVOdW1iZXIpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhY3R1YWxMaW5l
TnVtYmVyID0gMDsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50SXQtPnNlY29uZCwg
bGluZU51bWJlciwgJmFjdHVhbExpbmVOdW1iZXIpOwotICAgICAgICAgICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9mcm9udGVuZC0+YnJl
YWtwb2ludFJlc3RvcmVkKHNvdXJjZUlELCB1cmwsIGFjdHVhbExpbmVOdW1iZXIsIGJyZWFrcG9p
bnRJdC0+c2Vjb25kLmVuYWJsZWQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLmNvbmRpdGlvbik7Ci0g
ICAgICAgICAgICBTdHJpbmcgYnJlYWtwb2ludElkID0gZm9ybWF0QnJlYWtwb2ludElkKHNvdXJj
ZUlELCBhY3R1YWxMaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIG1fYnJlYWtwb2ludHNNYXBwaW5n
LnNldChicmVha3BvaW50SWQsIGxpbmVOdW1iZXIpOwotICAgICAgICB9CisgICAgVVJMVG9Tb3Vy
Y2VJRHNNYXA6Oml0ZXJhdG9yIHVybFRvU291cmNlSURzSXRlcmF0b3IgPSBtX3VybFRvU291cmNl
SURzLmZpbmQodXJsKTsKKyAgICBpZiAodXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9PSBtX3VybFRv
U291cmNlSURzLmVuZCgpKQorICAgICAgICB1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID0gbV91cmxU
b1NvdXJjZUlEcy5zZXQodXJsLCBWZWN0b3I8U3RyaW5nPigpKS5maXJzdDsKKyAgICB1cmxUb1Nv
dXJjZUlEc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKHNvdXJjZUlEKTsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBTY3JpcHRCcmVha3BvaW50cz46Oml0ZXJhdG9yIHN0aWNreUJyZWFrcG9pbnRzSXRl
cmF0b3IgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBpZiAoc3RpY2t5QnJl
YWtwb2ludHNJdGVyYXRvciA9PSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBTY3JpcHRCcmVha3BvaW50cyYgYnJlYWtwb2ludHMgPSBzdGlj
a3lCcmVha3BvaW50c0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgZm9yIChTY3JpcHRCcmVha3BvaW50
czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBicmVha3Bv
aW50cy5lbmQoKTsgKytpdCkgeworICAgICAgICBjb25zdCBCcmVha3BvaW50JiBicmVha3BvaW50
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVzdG9yZUJyZWFrcG9pbnQoc291cmNlSUQsIGl0LT5m
aXJzdCwgYnJlYWtwb2ludC5maXJzdCwgYnJlYWtwb2ludC5zZWNvbmQpOwogICAgIH0KLSAgICBt
X3NvdXJjZUlEVG9VUkwuc2V0KHNvdXJjZUlELCB1cmwpOwogfQogCiB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKaW5kZXggYWRjOTI1YS4uNmU0NWU1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaApAQCAtMzEsMTIgKzMxLDEyIEBACiAjZGVmaW5lIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnRfaAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJM
RShJTlNQRUNUT1IpCi0jaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgogI2luY2x1ZGUgIlNj
cmlwdERlYnVnTGlzdGVuZXIuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDggKzYxLDkgQEAg
cHVibGljOgogCiAgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBkZWFj
dGl2YXRlQnJlYWtwb2ludHMoKTsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJp
bmcmIGNvbmRpdGlvbiwgYm9vbCogc3VjY2VzcywgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVt
YmVyKTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
dW5zaWduZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBzZXRTdGlja3lCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJv
b2wgZW5hYmxlZCwgU3RyaW5nKiBicmVha3BvaW50SWQsIHVuc2lnbmVkIGludCogYWN0dWFsTGlu
ZU51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtw
b2ludElkKTsKIAogICAgIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVz
dWx0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKICAgICB2b2lkIGdl
dFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJj
ZSk7CkBAIC04MSwzMCArODIsMjcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckZvclBhZ2VO
YXZpZ2F0aW9uKCk7CiAKLSAgICBzdGF0aWMgU3RyaW5nIG1kNUJhc2UxNihjb25zdCBTdHJpbmcm
IHN0cmluZyk7Ci0KIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0
b3JDb250cm9sbGVyKiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKIAogICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAKLSAgICB2b2lkIGxvYWRCcmVha3Bv
aW50cygpOwotICAgIHZvaWQgc2F2ZUJyZWFrcG9pbnRzKCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgU2NyaXB0V29ybGRUeXBlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRl
Kik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCk7CiAKKyAgICB2b2lkIHJlc3RvcmVC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQpOworCiAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBt
X2Zyb250ZW5kOwogICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwotICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc291cmNlSURUb1VSTDsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBtX3NjcmlwdElEVG9Db250ZW50OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTb3Vy
Y2VCcmVha3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKLSAgICBIYXNoTWFwPFN0cmluZywg
dW5zaWduZWQ+IG1fYnJlYWtwb2ludHNNYXBwaW5nOwotICAgIGJvb2wgbV9icmVha3BvaW50c0xv
YWRlZDsKLSAgICBzdGF0aWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogc19kZWJ1Z2dlckFnZW50
T25CcmVha3BvaW50OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
ID4gVVJMVG9Tb3VyY2VJRHNNYXA7CisgICAgVVJMVG9Tb3VyY2VJRHNNYXAgbV91cmxUb1NvdXJj
ZUlEczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IEJyZWFrcG9pbnQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBCcmVha3BvaW50PiBTY3JpcHRCcmVha3BvaW50
czsKKyAgICBIYXNoTWFwPFN0cmluZywgU2NyaXB0QnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtw
b2ludHM7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha1Byb2dyYW1EZXRhaWxz
OwogICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQ7CiB9OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcwppbmRleCAzMmE2YTNkLi5kZDBjZTEyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcwpAQCAtMjksOCArMjksOSBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludCA9IGZ1bmN0
aW9uKGRlYnVnZ2VyTW9kZWwsIHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
bikKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oZGVidWdnZXJNb2RlbCwgYnJl
YWtwb2ludElkLCBzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiB7Cisg
ICAgdGhpcy5pZCA9IGJyZWFrcG9pbnRJZDsKICAgICB0aGlzLnVybCA9IHVybDsKICAgICB0aGlz
LmxpbmUgPSBsaW5lOwogICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKQEAgLTQxLDI3ICs0
MiwxMiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGRlYnVnZ2VyTW9kZWws
IHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsCiAgICAgdGhpcy5fZGVidWdnZXJNb2RlbCA9
IGRlYnVnZ2VyTW9kZWw7CiB9CiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50LmpzQnJlYWtwb2lu
dElkID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUpCi17Ci0gICAgcmV0dXJuIHNvdXJjZUlEICsg
IjoiICsgbGluZTsKLX0KLQogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewog
ICAgIGdldCBlbmFibGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwog
ICAgIH0sCiAKLSAgICBzZXQgZW5hYmxlZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Vu
YWJsZWQgPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZW5hYmxl
ZCA9IHg7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwuX3NldEJyZWFrcG9pbnRPbkJhY2tl
bmQodGhpcyk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFibGUt
Y2hhbmdlZCIpOwotICAgIH0sCi0KICAgICBnZXQgc291cmNlVGV4dCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fc291cmNlVGV4dDsKQEAgLTczLDI4ICs1OSwxMSBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJsYWJlbC1jaGFuZ2VkIik7CiAgICAgfSwKIAotICAgIGdldCBpZCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQo
dGhpcy5zb3VyY2VJRCwgdGhpcy5saW5lKTsKLSAgICB9LAotCiAgICAgZ2V0IGNvbmRpdGlvbigp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9uOwogICAgIH0sCiAKLSAgICBz
ZXQgY29uZGl0aW9uKGMpCi0gICAgewotICAgICAgICBjID0gYyB8fCAiIjsKLSAgICAgICAgaWYg
KHRoaXMuX2NvbmRpdGlvbiA9PT0gYykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
aGlzLl9jb25kaXRpb24gPSBjOwotICAgICAgICBpZiAodGhpcy5lbmFibGVkKQotICAgICAgICAg
ICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fc2V0QnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7
Ci0gICAgfSwKLQogICAgIGdldCBoaXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2hp
dDsKQEAgLTEzNCw3ICsxMDMsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUg
PSB7CiAKICAgICByZW1vdmU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIEluc3BlY3RvckJh
Y2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLnNvdXJjZUlELCB0aGlzLmxpbmUpOworICAgICAg
ICB0aGlzLl9kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5pZCk7CiAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CiAgICAgICAgIHRoaXMu
cmVtb3ZlQWxsTGlzdGVuZXJzKCk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWJ1Z2dlck1vZGVs
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpz
CmluZGV4IDYwNGRhNjAuLjVjZDg2NDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTM2LDE2ICszNiwyMCBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbigpCiAgICAgICAgIHRoaXMuX3N0aWNreUJy
ZWFrcG9pbnRzW3Byb2plY3RJZF0gPSB0aGlzLl92YWxpZGF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9p
bnRzW3Byb2plY3RJZF0pOwogICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3RpY2t5QnJlYWtwb2lu
dHModGhpcy5fc3RpY2t5QnJlYWtwb2ludHMpOwogCi0gICAgdGhpcy5fbmF0aXZlQnJlYWtwb2lu
dHMgPSB7fTsKKyAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwogICAgIHRoaXMuX2RvbUJyZWFr
cG9pbnRzUmVzdG9yZWQgPSBmYWxzZTsKKyAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50cyA9IHt9
OwogCiAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlNldHRpbmdzLkV2ZW50cy5Qcm9qZWN0Q2hhbmdlZCwgdGhpcy5fcHJvamVjdENoYW5nZWQs
IHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5f
c2NyaXB0QnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5C
cmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fc2NyaXB0QnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwog
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0aGlzLl9kZWJ1Z2dlclBh
dXNlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdnZXJSZXN1bWVkLCB0
aGlzLl9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOwogfQogCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzID0geworV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcyA9IHsKICAgICBET006ICJET00iLAorICAgIEpTOiAi
SlMiLAogICAgIEV2ZW50TGlzdGVuZXI6ICJFdmVudExpc3RlbmVyIiwKICAgICBYSFI6ICJYSFIi
CiB9CkBAIC03MCw3ICs3NCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnRJ
ZCA9IHRoaXMuX2NyZWF0ZURPTUJyZWFrcG9pbnRJZChub2RlSWQsIHR5cGUpOwotICAgICAgICBp
ZiAoYnJlYWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQorICAgICAgICBpZiAo
YnJlYWtwb2ludElkIGluIHRoaXMuX2JyZWFrcG9pbnRzKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50
KG5vZGUsIHR5cGUpOwpAQCAtOTAsNyArOTQsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlID0gewogICAgIF9jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludDog
ZnVuY3Rpb24oZXZlbnROYW1lLCBlbmFibGVkLCByZXN0b3JlZCkKICAgICB7CiAgICAgICAgIHZh
ciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElkKGV2
ZW50TmFtZSk7Ci0gICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtw
b2ludHMpCisgICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7CkBAIC0xMDAsNiArMTA0
LDM1IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5FdmVudHMuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludC52
aWV3KTsKICAgICB9LAogCisgICAgX2NyZWF0ZUphdmFTY3JpcHRCcmVha3BvaW50OiBmdW5jdGlv
bih1cmwsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCwgcmVzdG9yZWQpCisgICAgewor
ICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9p
bnRJZCh1cmwsIGxpbmVOdW1iZXIpOworICAgICAgICBpZiAoYnJlYWtwb2ludElkIGluIHRoaXMu
X2JyZWFrcG9pbnRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBicmVha3Bv
aW50ID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludCh1cmwsIGxpbmVOdW1i
ZXIsIGNvbmRpdGlvbik7CisgICAgICAgIHRoaXMuX3NldE5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCk7CisgICAgfSwKKworICAgIF9z
Y3JpcHRCcmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFy
IHNjcmlwdEJyZWFrcG9pbnQgPSBldmVudC5kYXRhOworCisgICAgICAgIGlmICghc2NyaXB0QnJl
YWtwb2ludC5yZXN0b3JlZCkKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVh
a3BvaW50KHNjcmlwdEJyZWFrcG9pbnQudXJsLCBzY3JpcHRCcmVha3BvaW50Lm9yaWdpbmFsTGlu
ZU51bWJlciwgc2NyaXB0QnJlYWtwb2ludC5jb25kaXRpb24sIHNjcmlwdEJyZWFrcG9pbnQuZW5h
YmxlZCwgZmFsc2UpOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlSmF2
YVNjcmlwdEJyZWFrcG9pbnRJZChzY3JpcHRCcmVha3BvaW50LnVybCwgc2NyaXB0QnJlYWtwb2lu
dC5vcmlnaW5hbExpbmVOdW1iZXIpOworICAgICAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50c1tz
Y3JpcHRCcmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnRJZDsKKyAgICB9LAorCisgICAgX3Njcmlw
dEJyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBz
Y3JpcHRCcmVha3BvaW50SWQgPSBldmVudC5kYXRhOworICAgICAgICB2YXIgYnJlYWtwb2ludElk
ID0gdGhpcy5fc2NyaXB0QnJlYWtwb2ludHNbc2NyaXB0QnJlYWtwb2ludElkXTsKKyAgICAgICAg
ZGVsZXRlIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRzW3NjcmlwdEJyZWFrcG9pbnRJZF07CisgICAg
ICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpCisgICAgICAgICAgICB0
aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgfSwKKwogICAg
IGNyZWF0ZVhIUkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCkKICAgICB7CiAgICAgICAgIHRoaXMu
X2NyZWF0ZVhIUkJyZWFrcG9pbnQodXJsLCB0cnVlLCBmYWxzZSk7CkBAIC0xMDgsNyArMTQxLDcg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfY3Jl
YXRlWEhSQnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBlbmFibGVkLCByZXN0b3JlZCkKICAgICB7
CiAgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVYSFJCcmVha3BvaW50SWQo
dXJsKTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50
cykKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0
b3IuWEhSQnJlYWtwb2ludCh1cmwpOwpAQCAtMTIwLDcgKzE1Myw3IEBAIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0TmF0aXZlQnJlYWtwb2lu
dDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCkK
ICAgICB7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBi
cmVha3BvaW50OworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJl
YWtwb2ludDsKICAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5hYmxlZDsKICAgICAgICAg
aWYgKHJlc3RvcmVkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDcgKzE2NCw3IEBAIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0TmF0
aXZlQnJlYWtwb2ludEVuYWJsZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5hYmxlZCkKICAg
ICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJl
YWtwb2ludElkXTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ti
cmVha3BvaW50SWRdOwogICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkID09PSBlbmFibGVk
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZW5hYmxlZCkKQEAgLTE0NCwyMyAr
MTc3LDI2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAK
ICAgICBfcmVtb3ZlTmF0aXZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludElkKQogICAg
IHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVh
a3BvaW50SWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2Jy
ZWFrcG9pbnRJZF07CiAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCiAgICAgICAgICAg
ICBicmVha3BvaW50Ll9kaXNhYmxlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVh
a3BvaW50c1ticmVha3BvaW50SWRdOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludElkXTsKICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CiAgICAgfSwK
IAogICAgIGJyZWFrcG9pbnRWaWV3Rm9yRXZlbnREYXRhOiBmdW5jdGlvbihldmVudERhdGEpCiAg
ICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludElkOwotICAgICAgICBpZiAoZXZlbnREYXRhLmJy
ZWFrcG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJl
YWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgaWYgKGV2ZW50RGF0YS5icmVha3BvaW50VHlwZSA9
PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5ET00pCiAg
ICAgICAgICAgICBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVET01CcmVha3BvaW50SWQoZXZl
bnREYXRhLm5vZGVJZCwgZXZlbnREYXRhLnR5cGUpOwotICAgICAgICBlbHNlIGlmIChldmVudERh
dGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRp
dmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgZWxzZSBpZiAoZXZlbnRE
YXRhLmJyZWFrcG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzLkV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgICBicmVha3BvaW50SWQgPSB0
aGlzLl9jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElkKGV2ZW50RGF0YS5ldmVudE5hbWUp
OwotICAgICAgICBlbHNlIGlmIChldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuWEhSKQorICAgICAg
ICBlbHNlIGlmIChldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuWEhSKQogICAgICAgICAgICAgYnJlYWtwb2lu
dElkID0gdGhpcy5fY3JlYXRlWEhSQnJlYWtwb2ludElkKGV2ZW50RGF0YS5icmVha3BvaW50VVJM
KTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVh
a3BvaW50SWRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOwogICAgICAg
ICBpZiAoYnJlYWtwb2ludCkKICAgICAgICAgICAgIHJldHVybiBicmVha3BvaW50LnZpZXc7CiAg
ICAgfSwKQEAgLTE5MSwxNiArMjI3LDE5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAKICAgICBfcHJvamVjdENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQog
ICAgIHsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgdGhp
cy5fYnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3Jl
ZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50cyA9IHt9OwogICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkKTsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElk
XSB8fCBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7
ICsraSkgewogICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAg
ICAgICAgICAgIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgICAg
IGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5C
cmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVh
dGVFdmVudExpc3RlbmVyQnJlYWtwb2ludChicmVha3BvaW50LmNvbmRpdGlvbi5ldmVudE5hbWUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChicmVha3Bv
aW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3Bv
aW50VHlwZXMuWEhSKQorICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkpTKQorICAgICAg
ICAgICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3BvaW50KGJyZWFrcG9pbnQuY29u
ZGl0aW9uLnVybCwgYnJlYWtwb2ludC5jb25kaXRpb24ubGluZU51bWJlciwgYnJlYWtwb2ludC5j
b25kaXRpb24uY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQsIHRydWUpOworICAgICAgICAg
ICAgZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuQnJlYWtwb2ludFR5cGVzLlhIUikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVY
SFJCcmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0aW9uLnVybCwgYnJlYWtwb2ludC5lbmFibGVk
LCB0cnVlKTsKICAgICAgICAgfQogICAgIH0sCkBAIC0yMTUsNyArMjU0LDcgQEAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsK
LSAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgICAg
ICBpZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIu
QnJlYWtwb2ludFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgdmFyIG5vZGVJZCA9IHBhdGhUb05vZGVJZFticmVha3BvaW50LmNvbmRpdGlv
bi5wYXRoXTsKICAgICAgICAgICAgICAgICBpZiAobm9kZUlkKQpAQCAtMjI5LDcgKzI2OCw3IEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZh
ciBwYXRoVG9Ob2RlSWQgPSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9IDA7CiAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgIGlmIChicmVh
a3BvaW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHZh
ciBwYXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBhdGg7CiAgICAgICAgICAgICBpZiAo
cGF0aCBpbiBwYXRoVG9Ob2RlSWQpCkBAIC0yNDUsOCArMjg0LDggQEAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfc2F2ZUJyZWFrcG9pbnRzOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgZm9y
ICh2YXIgYnJlYWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKSB7Ci0gICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJ
ZF07CisgICAgICAgIGZvciAodmFyIGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykg
eworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3Bv
aW50SWRdOwogICAgICAgICAgICAgdmFyIHBlcnNpc3RlbnRCcmVha3BvaW50ID0gYnJlYWtwb2lu
dC5fc2VyaWFsaXplVG9KU09OKCk7CiAgICAgICAgICAgICBwZXJzaXN0ZW50QnJlYWtwb2ludC5l
bmFibGVkID0gYnJlYWtwb2ludC5lbmFibGVkOwogICAgICAgICAgICAgYnJlYWtwb2ludHMucHVz
aChwZXJzaXN0ZW50QnJlYWtwb2ludCk7CkBAIC0yNTQsNyArMjkzLDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLl9kb21C
cmVha3BvaW50c1Jlc3RvcmVkKSB7CiAgICAgICAgICAgICB2YXIgc3RpY2t5QnJlYWtwb2ludHMg
PSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElk
XSB8fCBbXTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RpY2t5QnJlYWtwb2lu
dHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RpY2t5QnJlYWtwb2ludHNb
aV0udHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9p
bnRUeXBlcy5ET00pCisgICAgICAgICAgICAgICAgaWYgKHN0aWNreUJyZWFrcG9pbnRzW2ldLnR5
cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuRE9N
KQogICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHN0aWNreUJyZWFrcG9pbnRz
W2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjc0LDE1ICszMTMsMTkgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIHZhciBpZCA9IGJyZWFrcG9pbnQudHlwZSArICI6IjsK
ICAgICAgICAgICAgIHZhciBjb25kaXRpb24gPSBicmVha3BvaW50LmNvbmRpdGlvbjsKLSAgICAg
ICAgICAgIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRE9NKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtw
b2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5
cGVzLkRPTSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLnBhdGggIT09
ICJzdHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24udHlwZSAhPT0gIm51bWJlciIpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlkICs9IGNvbmRpdGlvbi5w
YXRoICsgIjoiICsgY29uZGl0aW9uLnR5cGU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFr
cG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFr
cG9pbnRUeXBlcy5FdmVudExpc3RlbmVyKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFr
cG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRU
eXBlcy5FdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRp
b24uZXZlbnROYW1lICE9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgaWQgKz0gY29uZGl0aW9uLmV2ZW50TmFtZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUikgeworICAgICAgICAgICAgfSBlbHNlIGlm
IChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVh
a3BvaW50VHlwZXMuSlMpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51
cmwgIT09ICJzdHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24ubGluZU51bWJlciAhPT0gIm51bWJl
ciIgfHwgdHlwZW9mIGNvbmRpdGlvbi5jb25kaXRpb24gIT09ICJzdHJpbmciKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZCArPSBjb25kaXRpb24udXJs
ICsgIjoiICsgY29uZGl0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJy
ZWFrcG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9p
bnRUeXBlcy5YSFIpIHsKICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51cmwg
IT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBpZCArPSBjb25kaXRpb24udXJsOwpAQCAtMzAwLDYgKzM0MywxMSBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gImRvbToi
ICsgbm9kZUlkICsgIjoiICsgdHlwZTsKICAgICB9LAogCisgICAgX2NyZWF0ZUphdmFTY3JpcHRC
cmVha3BvaW50SWQ6IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiAianM6IiArIHVybCArICI6IiArIGxpbmVOdW1iZXI7CisgICAgfSwKKwogICAgIF9jcmVh
dGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElkOiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewog
ICAgICAgICByZXR1cm4gImV2ZW50TGlzdG5lcjoiICsgZXZlbnROYW1lOwpAQCAtMzMzLDExICsz
ODEsMzQgQEAgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAg
X3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTTsK
KyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLkRPTTsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7
IHBhdGg6IHRoaXMuX3BhdGgsIHR5cGU6IHRoaXMuX3R5cGUgfSB9OwogICAgIH0KIH0KIAorV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVy
LCBjb25kaXRpb24pCit7CisgICAgdGhpcy5fdXJsID0gdXJsOworICAgIHRoaXMuX2xpbmVOdW1i
ZXIgPSBsaW5lTnVtYmVyOworICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbjsKK30KKwor
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKKyAgICBfZW5h
YmxlOiBmdW5jdGlvbigpCisgICAgeworICAgIH0sCisKKyAgICBfZGlzYWJsZTogZnVuY3Rpb24o
KQorICAgIHsKKyAgICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzLkpTOworICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBjb25kaXRpb246
IHsgdXJsOiB0aGlzLl91cmwsIGxpbmVOdW1iZXI6IHRoaXMuX2xpbmVOdW1iZXIsIGNvbmRpdGlv
bjogdGhpcy5fY29uZGl0aW9uIH0gfTsKKyAgICB9Cit9CisKIFdlYkluc3BlY3Rvci5FdmVudExp
c3RlbmVyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkKIHsKICAgICB0aGlzLl9ldmVu
dE5hbWUgPSBldmVudE5hbWU7CkBAIC0zNTYsNyArNDI3LDcgQEAgV2ViSW5zcGVjdG9yLkV2ZW50
TGlzdGVuZXJCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogICAgIF9zZXJpYWxpemVUb0pTT046
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5FdmVudExpc3RlbmVyOworICAgICAg
ICB2YXIgdHlwZSA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlw
ZXMuRXZlbnRMaXN0ZW5lcjsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9u
OiB7IGV2ZW50TmFtZTogdGhpcy5fZXZlbnROYW1lIH0gfTsKICAgICB9CiB9CkBAIC0zNzksNyAr
NDUwLDcgQEAgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAg
X3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUjsK
KyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLlhIUjsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7
IHVybDogdGhpcy5fdXJsIH0gfTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCmluZGV4IDMxYzc1ZTUuLjVhYjBlMmQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC0zMiw3ICszMiw5IEBA
IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsID0gZnVuY3Rpb24oKQogewogICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyKCJEZWJ1Z2dlciIsIHRoaXMpOwogCisg
ICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKKyAg
ICB0aGlzLl9zb3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZCA9IHt9OwogICAgIHRoaXMuX3Nj
cmlwdHMgPSB7fTsKIH0KIApAQCAtNDIsMzUgKzQ0LDY4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkV2ZW50cyA9IHsKICAgICBQYXJzZWRTY3JpcHRTb3VyY2U6ICJwYXJzZWQtc2NyaXB0
LXNvdXJjZSIsCiAgICAgRmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZTogImZhaWxlZC10by1wYXJz
ZS1zY3JpcHQtc291cmNlIiwKICAgICBCcmVha3BvaW50QWRkZWQ6ICJicmVha3BvaW50LWFkZGVk
IiwKKyAgICBCcmVha3BvaW50UmVtb3ZlZDogImJyZWFrcG9pbnQtcmVtb3ZlZCIKIH0KIAogV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewotICAgIHNldE9uZVRpbWVCcmVh
a3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKKyAgICBjb250aW51ZVRvTGluZTogZnVu
Y3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgdW5kZWZpbmVk
LCBsaW5lLCB0cnVlLCB1bmRlZmluZWQpOwotICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludCkKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJl
YWtwb2ludCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJy
ZWFrcG9pbnQubGluZSk7Ci0gICAgICAgIHRoaXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtw
b2ludDsKLSAgICAgICAgLy8gRklYTUUoNDA2NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwg
YmUgcGVyc2lzdGVkIGluIGluc3BlY3RvciBzZXR0aW5ncyBpZiBub3QgaGl0LgotICAgICAgICB0
aGlzLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQsIHRydWUpOworICAgICAgICBm
dW5jdGlvbiBkaWRTZXRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYWN0dWFsTGluZU51bWJlcikK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHRoaXMuZmluZEJyZWFrcG9pbnQoc291cmNlSUQs
IGFjdHVhbExpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5y
ZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCJfY29udGludWVUb0xpbmVCcmVha3BvaW50
SWQiIGluIHRoaXMpCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVh
a3BvaW50KHRoaXMuX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkKTsKKyAgICAgICAgICAgIHRo
aXMuX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkID0gYnJlYWtwb2ludElkOworICAgICAgICB9
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51
bWJlciwgIiIsIHRydWUsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgICAgIGlm
ICh0aGlzLl9wYXVzZWQpCisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlc3VtZSgpOwog
ICAgIH0sCiAKLSAgICByZW1vdmVPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24oKQorICAgIHNl
dEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25k
aXRpb24pCiAgICAgewotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpIHsKLSAg
ICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9vbmVUaW1l
QnJlYWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSk7Ci0gICAg
ICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CisgICAgICAgIGZ1bmN0aW9u
IGRpZFNldEJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBhY3R1YWxMaW5lTnVtYmVyKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludElkKQorICAgICAgICAgICAgICAgIHRoaXMu
X2JyZWFrcG9pbnRTZXRPbkJhY2tlbmQoYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgYWN0dWFsTGlu
ZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBsaW5lTnVtYmVyLCBmYWxzZSk7CiAgICAgICAg
IH0KKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5l
TnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7
CisgICAgfSwKKworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkK
KyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3Bv
aW50SWQpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFr
cG9pbnRJZF07CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRd
OworICAgICAgICBkZWxldGUgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWRbdGhp
cy5fZW5jb2RlU291cmNlSURBbmRMaW5lKGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQu
bGluZSldOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIGJyZWFrcG9pbnRJZCk7
CiAgICAgfSwKIAotICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBl
bmFibGVkLCBjb25kaXRpb24pCisgICAgYnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihicmVh
a3BvaW50SWQsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIG9yaWdp
bmFsTGluZU51bWJlcikKICAgICB7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTZXRPbkJhY2tl
bmQoYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVk
LCBvcmlnaW5hbExpbmVOdW1iZXIsIHRydWUpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFNl
dE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgbGluZU51bWJlciwg
Y29uZGl0aW9uLCBlbmFibGVkLCBvcmlnaW5hbExpbmVOdW1iZXIsIHJlc3RvcmVkKQorICAgIHsK
KyAgICAgICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGlu
ZShzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIGlmIChzb3VyY2VJREFuZExpbmUgaW4g
dGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWQpIHsKKyAgICAgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdmFyIHVybCA9IHRoaXMuX3NjcmlwdHNbc291
cmNlSURdLnNvdXJjZVVSTDsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVh
a3BvaW50KHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Ci0gICAgICAg
IGlmIChicmVha3BvaW50KQotICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2Vu
ZChicmVha3BvaW50KTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQodGhpcywgYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgdXJsLCBsaW5lTnVtYmVy
LCBlbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBicmVha3BvaW50LnJlc3RvcmVkID0gcmVz
dG9yZWQ7CisgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luYWxMaW5lTnVtYmVyID0gb3JpZ2luYWxM
aW5lTnVtYmVyOworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJl
YWtwb2ludDsKKyAgICAgICAgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWRbc291
cmNlSURBbmRMaW5lXSA9IGJyZWFrcG9pbnRJZDsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRB
ZGRlZCwgYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIHF1ZXJ5QnJlYWtwb2ludHM6IGZ1bmN0
aW9uKGZpbHRlcikKQEAgLTg2LDU1ICsxMjEsMjUgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9k
ZWwucHJvdG90eXBlID0gewogCiAgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlE
LCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50LmpzQnJlYWtwb2ludElkKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAg
ICAgICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGluZShz
b3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9z
b3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZFtzb3VyY2VJREFuZExpbmVdOwogICAgICAgICBy
ZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKICAgICB9LAogCisgICAgX2Vu
Y29kZVNvdXJjZUlEQW5kTGluZTogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCisgICAg
eworICAgICAgICByZXR1cm4gc291cmNlSUQgKyAiOiIgKyBsaW5lTnVtYmVyOworICAgIH0sCisK
ICAgICByZXNldDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFs
c2U7CiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9vbmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVh
a3BvaW50SWQgPSB7fTsKICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IHt9OwogICAgIH0sCiAKLSAg
ICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKTsKLSAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYg
KHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmlkID09IGJyZWFrcG9pbnQuaWQpKQotICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwotICAgICAgICB0aGlzLl9icmVha3Bv
aW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRk
RXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsK
LSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludCk7Ci0gICAgICAgIHJl
dHVybiBicmVha3BvaW50OwotICAgIH0sCi0KLSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50
LnRhcmdldC5pZF07Ci0gICAgfSwKLQotICAgIF9zZXRCcmVha3BvaW50T25CYWNrZW5kOiBmdW5j
dGlvbihicmVha3BvaW50LCBpc09uZVRpbWUpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBkaWRT
ZXRCcmVha3BvaW50KHN1Y2Nlc3MsIGxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChz
dWNjZXNzICYmIGxpbmUgPT0gYnJlYWtwb2ludC5saW5lKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGlmIChpc09uZVRpbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Vj
Y2VzcykKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSA9
IGxpbmU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkZWxldGUg
dGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mp
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3Vy
Y2VJRCwgYnJlYWtwb2ludC51cmwsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2lu
dC5jb25kaXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50Lmxp
bmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZFNldEJyZWFr
cG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQogICAgIHNjcmlwdEZvclNvdXJjZUlEOiBmdW5j
dGlvbihzb3VyY2VJRCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRzW3NvdXJj
ZUlEXTsKQEAgLTE1OCwxMyArMTYzLDEzIEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnBy
b3RvdHlwZSA9IHsKIAogICAgIC8vIEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBhcmUgSW5zcGVjdG9y
QmFja2VuZCBub3RpZmljYXRpb24gaGFuZGxlcnMuCiAKLSAgICBicmVha3BvaW50UmVzdG9yZWQ6
IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKTsKLSAgICB9LAotCiAgICAgcGF1c2VkU2NyaXB0OiBmdW5jdGlvbihkZXRh
aWxzKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCJf
Y29udGludWVUb0xpbmVCcmVha3BvaW50SWQiIGluIHRoaXMpIHsKKyAgICAgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9jb250aW51ZVRvTGluZUJyZWFrcG9p
bnRJZCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGludWVUb0xpbmVCcmVha3BvaW50
SWQ7CisgICAgICAgIH0KICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCBkZXRhaWxzKTsK
IAogICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ckV2ZW50VHlwZXMuSmF2YVNjcmlwdFBhdXNlIHx8IGRldGFpbHMuZXZlbnRUeXBlID09PSBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLk5hdGl2ZUJyZWFrcG9pbnQpCkBAIC0xNzksNiAr
MTg0LDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewogCiAgICAg
cmVzdW1lZFNjcmlwdDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0g
ZmFsc2U7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQpOwogCiAgICAgICAgIGlmICgh
dGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcwppbmRleCA3Mzg3OTY0Li41NmZhY2YyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTI3MSwxMyArMjcxLDYgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FkZFNjcmlw
dFRvRmlsZXNNZW51KHNjcmlwdCk7CiAgICAgfSwKIAotICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5j
dGlvbihzb3VyY2VJRCwgbGluZSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLnNldE9uZVRpbWVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lKTsKLSAgICAgICAgaWYg
KHRoaXMucGF1c2VkKQotICAgICAgICAgICAgdGhpcy5fdG9nZ2xlUGF1c2UoKTsKLSAgICB9LAot
CiAgICAgX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkOiBmdW5jdGlvbihlKQogICAgIHsKICAgICAg
ICAgdmFyIHJlc291cmNlID0gZS50YXJnZXQ7CkBAIC0zNzIsNyArMzY1LDYgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgY2FsbEZy
YW1lcyA9IGV2ZW50LmRhdGEuY2FsbEZyYW1lczsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNb2RlbC5yZW1vdmVPbmVUaW1lQnJlYWtwb2ludCgpOwogICAgICAgICB0aGlzLl9wYXVz
ZWQgPSB0cnVlOwogICAgICAgICB0aGlzLl93YWl0aW5nVG9QYXVzZSA9IGZhbHNlOwogICAgICAg
ICB0aGlzLl9zdGVwcGluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCmluZGV4IDRiZWFkOGYuLmZhODQ0MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTQ4Miw3ICs0ODIsNyBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRo
aXMuX2ZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnQp
IHsKICAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdl
IHdhbnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQu
Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5fc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMsIGxpbmVO
dW1iZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRCcmVha3BvaW50LmJpbmQodGhp
cywgbGluZU51bWJlciwgIiIsIHRydWUpKTsKIAogICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29u
ZGl0aW9uYWxCcmVha3BvaW50KCkKICAgICAgICAgICAgIHsKQEAgLTQ5MSw3ICs0OTEsNyBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24obGlu
ZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIs
IHRydWUsIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRo
aXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGxpbmVOdW1iZXIsICIiLCBkaWRFZGl0QnJlYWtw
b2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKICAgICAgICAgICAgIH0KQEAgLTUwMywxNiArNTAz
LDIzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24o
Y29tbWl0dGVkLCBjb25kaXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5j
b25kaXRpb24gPSBjb25kaXRpb247CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQubGluZSwgYnJl
YWtwb2ludC5lbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uKGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRFZGl0QnJlYWtwb2ludENv
bmRpdGlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24o
bGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0
aW9uLmJpbmQodGhpcykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgQnJlYWtwb2ludOKApiIpLCBl
ZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9u
IHNldEJyZWFrcG9pbnRFbmFibGVkKGVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVh
a3BvaW50KGJyZWFrcG9pbnQubGluZSwgZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
RGlzYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBm
YWxzZTsgfSk7CisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkRpc2FibGUgQnJlYWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxl
ZC5iaW5kKHRoaXMsIGZhbHNlKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBCcmVh
a3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSB0cnVlOyB9KTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiRW5hYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0aGlzLCB0
cnVlKSk7CiAgICAgICAgIH0KICAgICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7CiAgICAg
fSwKQEAgLTUzNSwxMiArNTQyLDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChs
aW5lTnVtYmVyKTsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIGJyZWFr
cG9pbnQucmVtb3ZlKCk7CiAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpCi0gICAgICAg
ICAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWJyZWFrcG9pbnQuZW5hYmxlZDsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlbW92ZSgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lLCAhYnJlYWtwb2lu
dC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHRoaXMu
X3NldEJyZWFrcG9pbnQobGluZU51bWJlciwgdHJ1ZSwgIiIpOwogICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwogICAgIH0sCiAKQEAgLTc3NSw3ICs3ODEsNyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9z
b3VyY2VJREZvckxpbmUobGluZU51bWJlcik7CiAgICAgICAgIGlmICghc291cmNlSUQpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jb250
aW51ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1vZGVsLmNvbnRpbnVlVG9MaW5lKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKICAgICB9
LAogCiAgICAgX2VkaXRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBuZXdDb250ZW50LCBjYW5j
ZWxFZGl0aW5nQ2FsbGJhY2spCkBAIC04MjMsMTIgKzgyOSwxMiBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2NyaXB0LnJlc291cmNlLnNldENv
bnRlbnQobmV3Q29udGVudCwgcmV2ZXJ0RWRpdExpbmVDYWxsYmFjayk7CiAgICAgfSwKIAotICAg
IF9zZXRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb25kaXRpb24pCisgICAgX3Nl
dEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAg
ICB7CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVt
YmVyKTsKICAgICAgICAgaWYgKCFzb3VyY2VJRCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGlu
ZU51bWJlciwgdHJ1ZSwgY29uZGl0aW9uKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0
aW9uKTsKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2lu
dHNBY3RpdmF0ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9n
Z2xlQnJlYWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwK
</data>
<flag name="review"
          id="68147"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77124</attachid>
            <date>2010-12-21 09:50:23 -0800</date>
            <delta_ts>2010-12-21 09:52:07 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>66036</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMmQ3NThiLi4wODI0OTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTIt
MjEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcGVy
c2lzdCBKYXZhU2NyaXB0IGJyZWFrcG9pbnRzIGluIGZyb250ZW5kIHNldHRpbmdzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg0MzQKKworICAgICAg
ICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5zZXRCcmVha3BvaW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZGVidWdnZXItYnJlYWtwb2ludHMtbm90LWFjdGl2YXRlZC1vbi1yZWxv
YWQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXItcGF1c2Utb24tYnJlYWtwb2lu
dC5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1s
OgorCiAyMDEwLTEyLTIwICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCmluZGV4IGU0NGZjYTkuLjQxMzQ2MTMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QyLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QyLmpzCkBAIC05MCw2ICs5MCwxMyBAQCBJbnNwZWN0b3JUZXN0LmNhcHR1cmVTdGFja1RyYWNl
ID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKICAgICB9CiB9OwogCitJbnNwZWN0b3JUZXN0LnNldEJy
ZWFrcG9pbnQgPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbikK
K3sKKyAgICB2YXIgc2NyaXB0cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdHNG
b3JVUkwodXJsKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kp
CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoc2NyaXB0
c1tpXS5zb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKK30KKwogSW5z
cGVjdG9yVGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIHsKICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IGV4ZWN1dGlvbiBwYXVzZWQuIik7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItYnJlYWtwb2ludHMtbm90LWFjdGl2
YXRlZC1vbi1yZWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1icmVh
a3BvaW50cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCmluZGV4IGZjMmM5MjYuLjJmZGM5
ZWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1icmVha3BvaW50
cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kZWJ1Z2dlci1icmVha3BvaW50cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCkBAIC0y
NCw3ICsyNCw3IEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24oKQogICAgIGZ1bmN0aW9uIHN0ZXAyKCkK
ICAgICB7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNYWluIHJlc291cmNlIHdh
cyBzaG93bi4iKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZpc2libGVW
aWV3LnNvdXJjZUZyYW1lLl9zZXRCcmVha3BvaW50KDgpOworICAgICAgICBJbnNwZWN0b3JUZXN0
LnNldEJyZWFrcG9pbnQoV2ViSW5zcGVjdG9yLm1haW5SZXNvdXJjZS51cmwsIDgsIHRydWUsICIi
KTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRz
QnV0dG9uLmVsZW1lbnQuY2xpY2soKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdl
KHN0ZXAzKTsKICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXItcGF1c2Utb24tYnJlYWtwb2ludC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyLXBhdXNlLW9uLWJyZWFrcG9pbnQuaHRtbAppbmRleCA0ODMxZDQyLi40MzI2MGIyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItcGF1c2Utb24tYnJlYWtwb2lu
dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1wYXVzZS1vbi1icmVh
a3BvaW50Lmh0bWwKQEAgLTIyLDcgKzIyLDcgQEAgdmFyIHRlc3QgPSBmdW5jdGlvbigpCiAgICAg
ZnVuY3Rpb24gc3RlcDIoKQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQo
IlNjcmlwdCBzb3VyY2Ugd2FzIHNob3duLiIpOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxz
LnNjcmlwdHMudmlzaWJsZVZpZXcuc291cmNlRnJhbWUuX3NldEJyZWFrcG9pbnQoOSk7CisgICAg
ICAgIEluc3BlY3RvclRlc3Quc2V0QnJlYWtwb2ludChXZWJJbnNwZWN0b3IubWFpblJlc291cmNl
LnVybCwgOSwgdHJ1ZSwgIiIpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RGdW5jdGlv
bkFuZFdhaXRVbnRpbFBhdXNlZChzdGVwMyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQKaW5k
ZXggMjIyMWM4NC4uYTVkOGRmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jl
cG9ydC1wcm90b2NvbC1lcnJvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVjdGVkLnR4dApAQCAtODQsOCArODQsNyBA
QCBUZXN0cyB0aGF0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIGlzIGNhdGNoaW5nIGluY29y
cmVjdCBtZXNzYWdlcy4KICAgICBzdWNjZXNzIDogZmFsc2UKICAgICBlcnJvcnMgOiB7CiAgICAg
ICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6IERlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iCi0gICAgICAgIDEgOiAiUHJvdG9jb2wgRXJyb3I6IEFyZ3VtZW50ICdzb3VyY2VJRCcgd2l0
aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIgotICAgICAgICAyIDogIlByb3RvY29sIEVy
cm9yOiBBcmd1bWVudCAnbGluZU51bWJlcicgd2l0aCB0eXBlICdOdW1iZXInIHdhcyBub3QgZm91
bmQuIgorICAgICAgICAxIDogIlByb3RvY29sIEVycm9yOiBBcmd1bWVudCAnYnJlYWtwb2ludElk
JyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3VuZC4iCiAgICAgfQogfQogewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwKaW5kZXgg
ZDQ4OTYxZC4uNGMwZmY2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9y
dC1wcm90b2NvbC1lcnJvcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0
LXByb3RvY29sLWVycm9ycy5odG1sCkBAIC0xNyw3ICsxNyw3IEBAIGZ1bmN0aW9uIHRlc3QoKQog
ICAgICAgICAneyJzZXEiOjQsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMi
Ont9fScsCiAgICAgICAgICd7InNlcSI6NSwiY29tbWFuZCI6InJlc291cmNlQ29udGVudCIsImFy
Z3VtZW50cyI6eyJpZGVudGlmaWVyIjoibm90IGEgbnVtYmVyIn19JywKICAgICAgICAgJ3sic2Vx
Ijo2LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6e319JywKLSAgICAg
ICAgJ3sic2VxIjo3LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6eyJz
b3VyY2VJRCI6InNvbWVTb3VyY2VJZCIsImxpbmVOdW1iZXIiOjB9fScsCisgICAgICAgICd7InNl
cSI6NywiY29tbWFuZCI6InJlbW92ZUJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOnsiYnJlYWtwb2lu
dElkIjoic29tZUJyZWFrcG9pbnRJZCJ9fScsCiAKICAgICBdOwogICAgIHZhciBudW1iZXJPZlJl
cG9ydHMgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBmZjExMTEwLi5lZDM4YzJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEwLTEyLTIxICBQ
YXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBlcnNpc3Qg
SmF2YVNjcmlwdCBicmVha3BvaW50cyBpbiBmcm9udGVuZCBzZXR0aW5ncy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NDM0CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9EZWJ1Z2dlclNjcmlwdC5q
czoKKyAgICAgICAgKCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdn
ZXJGcm9tRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0U3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRTdGlja3lCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN0b3JlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckZvclBhZ2VOYXZpZ2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZS5yZW1vdmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlLl9zZXJpYWxpemVUb0pTT04p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50LnByb3RvdHlwZS5fc2VyaWFsaXplVG9KU09OKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5fZGVidWdnZXJQYXVzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanM6CisKIDIwMTAtMTItMTcgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGE0NDBiODEuLjEwZGYy
MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC01MCw2
ICs1MCw3IEBACiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNpbmNs
dWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KQEAgLTEzNywyMyArMTM4LDMzIEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2
ZXI6Omhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4g
bV9wYWdlTGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwogfQogCi1ib29sIFNjcmlwdERlYnVn
U2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFr
cG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExp
bmVOdW1iZXIpCitTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25k
aXRpb24sIGJvb2wgZW5hYmxlZCwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpCiB7CiAgICAg
aW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFz
b3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAiIjsK
ICAgICBCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAg
IGl0ID0gbV9icmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2ludHMo
KSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7Cisg
ICAgaWYgKGl0LT5zZWNvbmQuY29udGFpbnMobGluZU51bWJlcikpCisgICAgICAgIHJldHVybiAi
IjsKKyAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50KGVuYWJs
ZWQsIGNvbmRpdGlvbikpOwogICAgICphY3R1YWxMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhzb3VyY2VJRCwgIjoiLCBTdHJp
bmc6Om51bWJlcihsaW5lTnVtYmVyKSk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBicmVha3BvaW50SWQpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlE
LnRvSW50UHRyKCk7Ci0gICAgaWYgKCFzb3VyY2VJRFZhbHVlKQorICAgIFZlY3RvcjxTdHJpbmc+
IHRva2VuczsKKyAgICBicmVha3BvaW50SWQuc3BsaXQoIjoiLCB0b2tlbnMpOworICAgIGlmICh0
b2tlbnMuc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIHN1Y2Nlc3M7Cisg
ICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHRva2Vuc1swXS50b0ludFB0cigmc3VjY2Vzcyk7
CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgbGluZU51
bWJlciA9IHRva2Vuc1sxXS50b1VJbnQoJnN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuOwogICAgIEJyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fYnJlYWtw
b2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgIT0gbV9icmVha3BvaW50cy5l
bmQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCAzMTcyYzY1
Li44MWNkOWFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC02
Myw4ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiwgUGFnZSopOwogCi0gICAgYm9vbCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICBTdHJpbmcg
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCB1bnNpZ25lZCogYWN0dWFs
TGluZU51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJy
ZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKICAgICB2b2lkIGFjdGl2YXRlQnJl
YWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0LmpzIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9EZWJ1Z2dlclNjcmlwdC5qcwppbmRleCA2MDI2MjE0Li41MGY3OTFkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRGVidWdnZXJTY3JpcHQuanMKQEAgLTMxLDcgKzMxLDYgQEAKIChmdW5jdGlvbiAo
KSB7CiAKIHZhciBEZWJ1Z2dlclNjcmlwdCA9IHt9OwotRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9p
bnRzID0ge307CiAKIERlYnVnZ2VyU2NyaXB0LlBhdXNlT25FeGNlcHRpb25zU3RhdGUgPSB7CiAg
ICAgRG9udFBhdXNlT25FeGNlcHRpb25zIDogMCwKQEAgLTEwMCwyNSArOTksMTMgQEAgRGVidWdn
ZXJTY3JpcHQuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKICAgICB2
YXIgbG9jYXRpb25zID0gRGVidWcuZmluZEJyZWFrUG9pbnRBY3R1YWxMb2NhdGlvbnMoYnJlYWtJ
ZCk7CiAgICAgaWYgKCFsb2NhdGlvbnMubGVuZ3RoKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OwotICAgIHZhciBhY3R1YWxMaW5lTnVtYmVyID0gbG9jYXRpb25zWzBdLmxpbmU7Ci0KLSAgICB2
YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFjdHVhbExpbmVOdW1iZXI7Ci0gICAgaWYg
KGtleSBpbiBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgLy8gUmVtb3Zl
IG9sZCBicmVha3BvaW50LgotICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChEZWJ1Z2dlclNj
cmlwdC5fYnJlYWtwb2ludHNba2V5XSwgdHJ1ZSk7Ci0gICAgfQotICAgIERlYnVnZ2VyU2NyaXB0
Ll9icmVha3BvaW50c1trZXldID0gYnJlYWtJZDsKLSAgICByZXR1cm4gRGVidWdnZXJTY3JpcHQu
X3Y4VG9XZWJraXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOworICAgIGFyZ3MubGluZU51
bWJlciA9IERlYnVnZ2VyU2NyaXB0Ll92OFRvV2Via2l0TGluZU51bWJlcihsb2NhdGlvbnNbMF0u
bGluZSk7CisgICAgcmV0dXJuIGJyZWFrSWQudG9TdHJpbmcoKTsKIH0KIAogRGVidWdnZXJTY3Jp
cHQucmVtb3ZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKIHsKLSAgICBh
cmdzLmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIoYXJn
cy5saW5lTnVtYmVyKTsKLSAgICB2YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFyZ3Mu
bGluZU51bWJlcjsKLSAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50
c1trZXldOwotICAgIGlmIChicmVha0lkKQotICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChi
cmVha0lkLCB0cnVlKTsKLSAgICBkZWxldGUgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tl
eV07CisgICAgRGVidWcuZmluZEJyZWFrUG9pbnQoYXJncy5icmVha3BvaW50SWQsIHRydWUpOwog
fQogCiBEZWJ1Z2dlclNjcmlwdC5wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gZnVuY3Rpb24oKQpA
QCAtMTkwLDExICsxNzcsNyBAQCBEZWJ1Z2dlclNjcmlwdC5lZGl0U2NyaXB0U291cmNlID0gZnVu
Y3Rpb24oc2NyaXB0SWQsIG5ld1NvdXJjZSkKIAogRGVidWdnZXJTY3JpcHQuY2xlYXJCcmVha3Bv
aW50cyA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKIHsKLSAgICBmb3IgKHZhciBrZXkgaW4g
RGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7Ci0gICAgICAgIHZhciBicmVha0lkID0gRGVi
dWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07Ci0gICAgICAgIERlYnVnLmZpbmRCcmVha1Bv
aW50KGJyZWFrSWQsIHRydWUpOwotICAgIH0KLSAgICBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2lu
dHMgPSB7fTsKKyAgICBEZWJ1Zy5jbGVhckFsbEJyZWFrUG9pbnRzKCk7CiB9CiAKIERlYnVnZ2Vy
U2NyaXB0LnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdz
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCA5ZGZjYTU1
Li40YjQ2MTFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApA
QCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVy
KFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlCiAgICAgLy8gRklYTUU6
IFJlbW92ZSBhbGwgYnJlYWtwb2ludHMgc2V0IGJ5IHRoZSBhZ2VudC4KIH0KIAotYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3Jp
cHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBh
Y3R1YWxMaW5lTnVtYmVyKQorU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKQog
ewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CkBAIC0xNTIs
MjcgKzE1MiwyNSBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYgogICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3KCk7CiAgICAgYXJncy0+U2V0KHY4OjpTdHJp
bmc6Ok5ldygic2NyaXB0SWQiKSwgdjhTdHJpbmcoc291cmNlSUQpKTsKICAgICBhcmdzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2VyOjpOZXcobGluZU51bWJl
cikpOwotICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNvbmRpdGlvbiIpLCB2OFN0cmlu
ZyhicmVha3BvaW50LmNvbmRpdGlvbikpOwotICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXco
ImVuYWJsZWQiKSwgdjg6OkJvb2xlYW46Ok5ldyhicmVha3BvaW50LmVuYWJsZWQpKTsKKyAgICBh
cmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhTdHJpbmcoY29uZGl0aW9u
KSk7CisgICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2ODo6Qm9vbGVh
bjo6TmV3KGVuYWJsZWQpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVh
a3BvaW50RnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2Vy
U2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzZXRCcmVha3BvaW50IikpKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFr
cG9pbnRGdW5jdGlvbiwgYXJncyk7Ci0gICAgaWYgKCFyZXN1bHQtPklzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQocmVzdWx0LT5JbnQzMlZhbHVlKCkgPj0gMCk7
Ci0gICAgKmFjdHVhbExpbmVOdW1iZXIgPSByZXN1bHQtPkludDMyVmFsdWUoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYnJlYWtwb2ludElkID0gdjg6OkRl
YnVnOjpDYWxsKHNldEJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisgICAgaWYgKCFicmVha3Bv
aW50SWQtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICAqYWN0dWFsTGluZU51
bWJlciA9IGFyZ3MtPkdldCh2ODo6U3RyaW5nOjpOZXcoImxpbmVOdW1iZXIiKSktPkludDMyVmFs
dWUoKTsKKyAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcoYnJlYWtwb2ludElkLT5U
b1N0cmluZygpKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJ
ZCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkxvY2FsPHY4OjpDb250
ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29udGV4dCgpOwogICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250ZXh0KTsKIAogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3KCk7Ci0gICAgYXJn
cy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygic2NyaXB0SWQiKSwgdjhTdHJpbmcoc291cmNlSUQpKTsK
LSAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2Vy
OjpOZXcobGluZU51bWJlcikpOworICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImJyZWFr
cG9pbnRJZCIpLCB2OFN0cmluZyhicmVha3BvaW50SWQpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uPiByZW1vdmVCcmVha3BvaW50RnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJy
ZW1vdmVCcmVha3BvaW50IikpKTsKICAgICB2ODo6RGVidWc6OkNhbGwocmVtb3ZlQnJlYWtwb2lu
dEZ1bmN0aW9uLCBhcmdzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaApp
bmRleCA1YzVkNmM2Li40MGRkNWZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1Nl
cnZlci5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNj
cmlwdERlYnVnTGlzdGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogCi0gICAgYm9vbCBzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIHZvaWQgcmVtb3Zl
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsK
KyAgICBTdHJpbmcgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCB1bnNp
Z25lZCogYWN0dWFsTGluZU51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgYnJlYWtwb2ludElkKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAg
ICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKICAgICB2b2lk
IGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAxMmU3MjNkLi5hNTkzODU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKQEAgLTIxOCw4ICsyMTgsOCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAg
IFtkb21haW49RGVidWdnZXJdIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgICAgICBb
ZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogCi0gICAgICAg
IFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBTdHJpbmcgc291cmNlSUQs
IGluIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBpbiBib29sZWFuIGVuYWJsZWQsIGluIFN0cmlu
ZyBjb25kaXRpb24sIG91dCBib29sZWFuIHN1Y2Nlc3MsIG91dCB1bnNpZ25lZCBpbnQgYWN0dWFs
TGluZU51bWJlcik7Ci0gICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChpbiBTdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7Cisg
ICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBTdHJpbmcgc291
cmNlSUQsIGluIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBpbiBTdHJpbmcgY29uZGl0aW9uLCBp
biBib29sZWFuIGVuYWJsZWQsIG91dCBTdHJpbmcgYnJlYWtwb2ludElkLCBvdXQgdW5zaWduZWQg
aW50IGFjdHVhbExpbmVOdW1iZXIpOworICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoaW4gU3RyaW5nIGJyZWFrcG9pbnRJZCk7CiAKICAgICAgICAgW2RvbWFp
bj1JbnNwZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoaW4gT2JqZWN0IGJyZWFrcG9p
bnRzKTsgLy8gRklYTUU6IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIu
CiAKQEAgLTI0NSw3ICsyNDUsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVi
dWdnZXJdIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIGluIFN0cmlu
ZyBuZXdDb250ZW50LCBvdXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgU3RyaW5nIHJlc3VsdCwgb3V0
IFZhbHVlIG5ld0NhbGxGcmFtZXMpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGdl
dFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgc2NyaXB0U291cmNl
KTsKIAotICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgYnJlYWtwb2ludFJl
c3RvcmVkKG91dCBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgdXJsLCBvdXQgaW50IGxpbmUs
IG91dCBib29sZWFuIGVuYWJsZWQsIG91dCBTdHJpbmcgY29uZGl0aW9uKTsgLy8gRklYTUU6IHNo
b3VsZCBiZSBicmVha3BvaW50UmVzb2x2ZWQKKyAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVn
Z2VyXSB2b2lkIGJyZWFrcG9pbnRSZXNvbHZlZChvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCwgb3V0
IFN0cmluZyBzb3VyY2VJRCwgb3V0IHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBvdXQgU3RyaW5n
IGNvbmRpdGlvbiwgb3V0IGJvb2xlYW4gZW5hYmxlZCwgb3V0IHVuc2lnbmVkIGludCBvcmlnaW5h
bExpbmVOdW1iZXIpOwogCiAjaWYgZGVmaW5lZChFTkFCTEVfV09SS0VSUykgJiYgRU5BQkxFX1dP
UktFUlMKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRpZENyZWF0ZVdv
cmtlcihvdXQgbG9uZyBpZCwgb3V0IFN0cmluZyB1cmwsIG91dCBib29sZWFuIGlzU2hhcmVkKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggNzkxZTNhNi4uZWI0YzBl
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTQyLDcgKzQyLDYg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCi0jaW5jbHVkZSAi
U2NyaXB0QnJlYWtwb2ludC5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggMjMzMmQ4Ny4uYzg4MmMxNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1MCw3ICsxNTAsNiBAQCBJbnNwZWN0b3JD
b250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9hdHRh
Y2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKICAgICAsIG1faGFzWEhSQnJlYWtwb2ludFdpdGhF
bXB0eVVSTChmYWxzZSkKLSAgICAsIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3JlZChmYWxzZSkK
ICAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhp
cykpCiAjZW5kaWYKIHsKQEAgLTEzNDksNiArMTM0OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpCiAgICAgQVNTRVJU
KG1faW5zcGVjdGVkUGFnZSk7CiAKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgcmVzdG9yZVN0
aWNreUJyZWFrcG9pbnRzKCk7CiAKICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0VuYWJsZWQo
KTsKIH0KQEAgLTEzOTYsMTAgKzEzOTYsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
c3VtZSgpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFN0aWNreUJyZWFrcG9pbnRzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKICAgICBtX3N0YXRlLT5z
ZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OnN0aWNreUJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7
Ci0gICAgaWYgKCFtX3N0aWNreUJyZWFrcG9pbnRzUmVzdG9yZWQpIHsKLSAgICAgICAgcmVzdG9y
ZVN0aWNreUJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3Jl
ZCA9IHRydWU7Ci0gICAgfQogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVT
dGlja3lCcmVha3BvaW50cygpCkBAIC0xNDIwLDggKzE0MTYsOSBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpCiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnQpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGV2ZW50
TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSwgKCJFdmVudExpc3RlbmVyIikpOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSwgKCJYSFIi
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50VHlwZSwgKCJFdmVudExpc3RlbmVyIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBqYXZhU2NyaXB0QnJlYWtwb2ludFR5cGUsICgiSlMiKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIHhockJyZWFrcG9pbnRUeXBlLCAoIlhIUiIpKTsKIAogICAgIGlmICgh
YnJlYWtwb2ludCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyOSwxNyArMTQyNiwzMyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicgogICAgIGlmICghYnJlYWtwb2ludC0+Z2V0U3RyaW5nKCJ0eXBl
IiwgJnR5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBlbmFibGVkOwotICAgIGlmICgh
YnJlYWtwb2ludC0+Z2V0Qm9vbGVhbigiZW5hYmxlZCIsICZlbmFibGVkKSB8fCAhZW5hYmxlZCkK
KyAgICBpZiAoIWJyZWFrcG9pbnQtPmdldEJvb2xlYW4oImVuYWJsZWQiLCAmZW5hYmxlZCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb25kaXRpb24gPSBi
cmVha3BvaW50LT5nZXRPYmplY3QoImNvbmRpdGlvbiIpOwogICAgIGlmICghY29uZGl0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJl
YWtwb2ludFR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyQnJlYWtwb2ludFR5
cGUpIHsKKyAgICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBTdHJpbmcgZXZlbnROYW1lOwogICAgICAgICBpZiAoY29uZGl0aW9uLT5nZXRTdHJpbmcoImV2
ZW50TmFtZSIsICZldmVudE5hbWUpKQogICAgICAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnQoZXZlbnROYW1lKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0geGhyTmF0aXZlQnJlYWtw
b2ludFR5cGUpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gamF2YVNjcmlwdEJyZWFrcG9pbnRU
eXBlKSB7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRT
dHJpbmcoInVybCIsICZ1cmwpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkb3VibGUg
bGluZU51bWJlcjsKKyAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldE51bWJlcigibGluZU51bWJl
ciIsICZsaW5lTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGph
dmFTY3JpcHRDb25kaXRpb247CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJpbmcoImNv
bmRpdGlvbiIsICZqYXZhU2NyaXB0Q29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKKyAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
c2V0U3RpY2t5QnJlYWtwb2ludCh1cmwsIGxpbmVOdW1iZXIsIGphdmFTY3JpcHRDb25kaXRpb24s
IGVuYWJsZWQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50VHlwZSkgewor
ICAgICAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmlu
ZyB1cmw7CiAgICAgICAgIGlmIChjb25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCiAg
ICAgICAgICAgICBzZXRYSFJCcmVha3BvaW50KHVybCk7CkBAIC0xNTEzLDI2ICsxNTI2LDYgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLSNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpi
cmVha3BvaW50c1NldHRpbmdLZXkoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBrZXlQcmVmaXgsICgiYnJlYWtwb2ludHM6IikpOwotICAgIHJldHVybiBrZXlQcmVmaXggKyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjptZDVCYXNlMTYobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJh
bWUoKS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkKLXsKLSAgICBT
dHJpbmcganNvblN0cmluZzsKLSAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpLCAmanNvblN0cmluZyk7Ci0gICAgcmV0dXJuIEluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04oanNvblN0cmluZyk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykK
LXsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBi
cmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBQYXRoIHF1
YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewogICAgIFBhdGggcXVhZFBhdGg7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjU1MDkwYy4uZTU3MGM5
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzM1LDEzICsz
MzUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwogCi0jaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ7Ci0gICAgU3RyaW5nIGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpOwotICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGxvYWRCcmVha3BvaW50cygpOwotICAgIHZvaWQgc2F2ZUJyZWFrcG9p
bnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyk7Ci0jZW5kaWYKLQog
ICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50
OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVu
ZENsaWVudDsKQEAgLTM5NSw3ICszODgsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9YSFJC
cmVha3BvaW50czsKICAgICBib29sIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTDsKLSAg
ICBib29sIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3JlZDsKIAogICAgIE93blB0cjxJbnNwZWN0
b3JQcm9maWxlckFnZW50PiBtX3Byb2ZpbGVyQWdlbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMGIxOGIwYy4uMDA0Njk4OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM3
LDE2ICszNyw5IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgotI2luY2x1ZGUg
PHd0Zi9NRDUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcgZm9ybWF0QnJlYWtwb2ludElkKGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCi17Ci0gICAgcmV0dXJu
IG1ha2VTdHJpbmcoc291cmNlSUQsICc6JywgU3RyaW5nOjpudW1iZXIobGluZU51bWJlcikpOwot
fQotCiBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7CiAgICAgT3duUHRyPEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ+IGFnZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5z
cGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmQpKTsKQEAgLTYxLDcgKzU0LDYgQEAgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb24KICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250
cm9sbGVyKQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0
U3RhdGUoMCkKLSAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2phdmFT
Y3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKIHsKIH0KQEAgLTg3LDQ5ICs3OSwzNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYWN0aXZhdGVCcmVha3BvaW50cygpCiAgICAgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgYm9vbCogc3VjY2VzcywgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVy
KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTdGlja3lCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgYm9vbCBlbmFibGVkKQogewotICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChlbmFi
bGVkLCBjb25kaXRpb24pOwotICAgICpzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIsIGFjdHVh
bExpbmVOdW1iZXIpOwotICAgIGlmICghKnN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICBI
YXNoTWFwPFN0cmluZywgU2NyaXB0QnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGlmIChpdCA9PSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKQorICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KHVybCwgU2NyaXB0
QnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgQnJl
YWtwb2ludChjb25kaXRpb24sIGVuYWJsZWQpKTsKIAotICAgIFN0cmluZyB1cmwgPSBtX3NvdXJj
ZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICBVUkxU
b1NvdXJjZUlEc01hcDo6aXRlcmF0b3IgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9T
b3VyY2VJRHMuZmluZCh1cmwpOworICAgIGlmICh1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID09IG1f
dXJsVG9Tb3VyY2VJRHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBicmVh
a3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsICphY3R1YWxMaW5lTnVtYmVy
KTsKLSAgICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCAqYWN0dWFsTGlu
ZU51bWJlcik7Ci0KLSAgICBTdHJpbmcga2V5ID0gbWQ1QmFzZTE2KHVybCk7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQo
KSkKLSAgICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNldChrZXksIFNvdXJjZUJyZWFr
cG9pbnRzKCkpLmZpcnN0OwotICAgIGl0LT5zZWNvbmQuc2V0KCphY3R1YWxMaW5lTnVtYmVyLCBi
cmVha3BvaW50KTsKLSAgICBzYXZlQnJlYWtwb2ludHMoKTsKKyAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgc291cmNlSURzID0gdXJsVG9Tb3VyY2VJRHNJdGVyYXRvci0+c2Vjb25kOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlSURzLnNpemUoKTsgKytpKQorICAgICAgICByZXN0
b3JlQnJlYWtwb2ludChzb3VyY2VJRHNbaV0sIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxl
ZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQs
IFN0cmluZyogYnJlYWtwb2ludElkLCB1bnNpZ25lZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpCiB7
Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNl
SUQsIGxpbmVOdW1iZXIpOwotCi0gICAgU3RyaW5nIHVybCA9IG1fc291cmNlSURUb1VSTC5nZXQo
c291cmNlSUQpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgYnJlYWtwb2ludElkID0gZm9ybWF0QnJlYWtwb2ludElkKHNvdXJjZUlELCBsaW5l
TnVtYmVyKTsKLSAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+OjppdGVyYXRvciBtYXBwaW5n
SXQgPSBtX2JyZWFrcG9pbnRzTWFwcGluZy5maW5kKGJyZWFrcG9pbnRJZCk7Ci0gICAgaWYgKG1h
cHBpbmdJdCA9PSBtX2JyZWFrcG9pbnRzTWFwcGluZy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHVuc2lnbmVkIHN0aWNreUxpbmUgPSBtYXBwaW5nSXQtPnNlY29uZDsKLSAgICBtX2JyZWFr
cG9pbnRzTWFwcGluZy5yZW1vdmUobWFwcGluZ0l0KTsKKyAgICAqYnJlYWtwb2ludElkID0gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1i
ZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCwgYWN0dWFsTGluZU51bWJlcik7Cit9CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJl
YWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7Ci0gICAgaWYgKGl0ID09IG1fc3RpY2t5QnJl
YWtwb2ludHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3sKKyAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50
SWQpOworfQogCi0gICAgaXQtPnNlY29uZC5yZW1vdmUoc3RpY2t5TGluZSk7Ci0gICAgc2F2ZUJy
ZWFrcG9pbnRzKCk7Cit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3RvcmVCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQpCit7CisgICAgdW5zaWduZWQgYWN0dWFsTGlu
ZU51bWJlciA9IDA7CisgICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24s
IGVuYWJsZWQsICZhY3R1YWxMaW5lTnVtYmVyKTsKKyAgICBpZiAoIWJyZWFrcG9pbnRJZC5pc0Vt
cHR5KCkpCisgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChicmVha3BvaW50
SWQsIHNvdXJjZUlELCBhY3R1YWxMaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGxpbmVO
dW1iZXIpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVkaXRTY3JpcHRTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBib29s
KiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogbmV3Q2Fs
bEZyYW1lcykKQEAgLTIwMCwyOCArMTgwLDkgQEAgbG9uZyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpjbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCkKIHsKLSAgICBtX3NvdXJjZUlEVG9VUkwuY2xlYXIo
KTsKICAgICBtX3NjcmlwdElEVG9Db250ZW50LmNsZWFyKCk7CisgICAgbV91cmxUb1NvdXJjZUlE
cy5jbGVhcigpOwogICAgIG1fc3RpY2t5QnJlYWtwb2ludHMuY2xlYXIoKTsKLSAgICBtX2JyZWFr
cG9pbnRzTWFwcGluZy5jbGVhcigpOwotICAgIG1fYnJlYWtwb2ludHNMb2FkZWQgPSBmYWxzZTsK
LX0KLQotU3RyaW5nIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Om1kNUJhc2UxNihjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2
Nzg5YWJjZGVmIjsKLQotICAgIE1ENSBtZDU7Ci0gICAgbWQ1LmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzKCkpLCBzdHJpbmcubGVuZ3Ro
KCkgKiAyKTsKLSAgICBWZWN0b3I8dWludDhfdCwgMTY+IGRpZ2VzdDsKLSAgICBtZDUuY2hlY2tz
dW0oZGlnZXN0KTsKLQotICAgIFZlY3RvcjxjaGFyLCAzMj4gcmVzdWx0OwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMTY7ICsraSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKGRpZ2l0c1soZGln
ZXN0W2ldID4+IDQpICYgMHhmXSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGlnaXRzW2RpZ2Vz
dFtpXSAmIDB4Zl0pOwotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCkpOwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcygpCkBAIC0yMzYsMzkgKzE5Nyw2IEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmN1cnJlbnRD
YWxsRnJhbWVzKCkKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmxvYWRCcmVha3BvaW50cygpCi17Ci0gICAg
aWYgKG1fYnJlYWtwb2ludHNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2JyZWFrcG9p
bnRzTG9hZGVkID0gdHJ1ZTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkU2V0
dGluZyA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bG9hZEJyZWFrcG9pbnRzKCk7Ci0gICAgaWYg
KCFwYXJzZWRTZXR0aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludHMgPSBwYXJzZWRTZXR0aW5nLT5hc09iamVjdCgpOwotICAgIGlmICgh
YnJlYWtwb2ludHMpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy0+YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHMtPmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRz
Rm9yVVJMID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50
c0ZvclVSTCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBIYXNoTWFwPFN0cmluZywg
U291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBzb3VyY2VCcmVha3BvaW50c0l0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5zZXQoaXQtPmZpcnN0LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsK
LSAgICAgICAgU2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9y
T2JqZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAmc291cmNlQnJlYWtwb2ludHNJdC0+c2Vjb25kKTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2F2ZUJyZWFrcG9pbnRz
KCkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtw
b2ludHM+OjppdGVyYXRvciBpdChtX3N0aWNreUJyZWFrcG9pbnRzLmJlZ2luKCkpOyBpdCAhPSBt
X3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBicmVha3BvaW50c0ZvclVSTCA9IFNjcmlwdEJyZWFrcG9pbnQ6Omluc3BlY3Rv
ck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyhpdC0+c2Vjb25kKTsKLSAgICAgICAgYnJlYWtw
b2ludHMtPnNldE9iamVjdChpdC0+Zmlyc3QsIGJyZWFrcG9pbnRzRm9yVVJMKTsKLSAgICB9Ci0g
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zYXZlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpOwot
fQotCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMKIAogdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBTY3Jp
cHRXb3JsZFR5cGUgd29ybGRUeXBlKQpAQCAtMjgxLDIzICsyMDksMjAgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBj
b25zdCBTdHJpbmcKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbG9hZEJyZWFrcG9pbnRzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9p
bnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVy
bCkpOwotICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKSB7Ci0gICAgICAg
IGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9yIGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNv
bmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5zZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2lu
dEl0KSB7Ci0gICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IGJyZWFrcG9pbnRJdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBpZiAoZmlyc3RMaW5lID4gbGluZU51bWJlcikKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFjdHVhbExpbmVOdW1iZXIgPSAwOwot
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNl
dEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLCBsaW5lTnVtYmVyLCAm
YWN0dWFsTGluZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzdG9y
ZWQoc291cmNlSUQsIHVybCwgYWN0dWFsTGluZU51bWJlciwgYnJlYWtwb2ludEl0LT5zZWNvbmQu
ZW5hYmxlZCwgYnJlYWtwb2ludEl0LT5zZWNvbmQuY29uZGl0aW9uKTsKLSAgICAgICAgICAgIFN0
cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsIGFjdHVhbExp
bmVOdW1iZXIpOwotICAgICAgICAgICAgbV9icmVha3BvaW50c01hcHBpbmcuc2V0KGJyZWFrcG9p
bnRJZCwgbGluZU51bWJlcik7Ci0gICAgICAgIH0KKyAgICBVUkxUb1NvdXJjZUlEc01hcDo6aXRl
cmF0b3IgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9Tb3VyY2VJRHMuZmluZCh1cmwp
OworICAgIGlmICh1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID09IG1fdXJsVG9Tb3VyY2VJRHMuZW5k
KCkpCisgICAgICAgIHVybFRvU291cmNlSURzSXRlcmF0b3IgPSBtX3VybFRvU291cmNlSURzLnNl
dCh1cmwsIFZlY3RvcjxTdHJpbmc+KCkpLmZpcnN0OworICAgIHVybFRvU291cmNlSURzSXRlcmF0
b3ItPnNlY29uZC5hcHBlbmQoc291cmNlSUQpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFNjcmlw
dEJyZWFrcG9pbnRzPjo6aXRlcmF0b3Igc3RpY2t5QnJlYWtwb2ludHNJdGVyYXRvciA9IG1fc3Rp
Y2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGlmIChzdGlja3lCcmVha3BvaW50c0l0ZXJh
dG9yID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRzJiBicmVha3BvaW50cyA9IHN0aWNreUJyZWFrcG9pbnRz
SXRlcmF0b3ItPnNlY29uZDsKKyAgICBmb3IgKFNjcmlwdEJyZWFrcG9pbnRzOjpjb25zdF9pdGVy
YXRvciBpdCA9IGJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGNvbnN0IEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQgPSBpdC0+c2Vjb25k
OworICAgICAgICByZXN0b3JlQnJlYWtwb2ludChzb3VyY2VJRCwgaXQtPmZpcnN0LCBicmVha3Bv
aW50LmZpcnN0LCBicmVha3BvaW50LnNlY29uZCk7CiAgICAgfQotICAgIG1fc291cmNlSURUb1VS
TC5zZXQoc291cmNlSUQsIHVybCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRh
LCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBhZGM5
MjVhLi42ZTQ1ZTU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oCkBAIC0zMSwxMiArMzEsMTIgQEAKICNkZWZpbmUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudF9o
CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikK
LSNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsOCArNjEsOSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3Bv
aW50cygpOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
LCBib29sKiBzdWNjZXNzLCB1bnNpZ25lZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKTsKKyAgICB2b2lkIHNldFN0aWNreUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmws
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJs
ZWQpOworICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBT
dHJpbmcqIGJyZWFrcG9pbnRJZCwgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVyKTsKKyAg
ICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwogCiAg
ICAgdm9pZCBlZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0
cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpOwogICAgIHZvaWQgZ2V0U2NyaXB0U291cmNl
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKQEAgLTgxLDMw
ICs4MiwyNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsK
IAotICAgIHN0YXRpYyBTdHJpbmcgbWQ1QmFzZTE2KGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKLQog
cHJpdmF0ZToKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIq
LCBJbnNwZWN0b3JGcm9udGVuZCopOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y3VycmVudENhbGxGcmFtZXMoKTsKIAotICAgIHZvaWQgbG9hZEJyZWFrcG9pbnRzKCk7Ci0gICAg
dm9pZCBzYXZlQnJlYWtwb2ludHMoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBTY3JpcHRXb3JsZFR5cGUpOwogICAgIHZpcnR1YWwgdm9p
ZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRh
dGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29udGludWUoKTsKIAorICAgIHZvaWQgcmVzdG9yZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIGJvb2wgZW5hYmxlZCk7CisKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2lu
c3BlY3RvckNvbnRyb2xsZXI7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiAg
ICAgU2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zb3VyY2VJRFRvVVJMOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1f
c2NyaXB0SURUb0NvbnRlbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRz
PiBtX3N0aWNreUJyZWFrcG9pbnRzOwotICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gbV9i
cmVha3BvaW50c01hcHBpbmc7Ci0gICAgYm9vbCBtX2JyZWFrcG9pbnRzTG9hZGVkOwotICAgIHN0
YXRpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQ7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBVUkxUb1NvdXJj
ZUlEc01hcDsKKyAgICBVUkxUb1NvdXJjZUlEc01hcCBtX3VybFRvU291cmNlSURzOworICAgIHR5
cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gQnJlYWtwb2ludDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8dW5zaWduZWQsIEJyZWFrcG9pbnQ+IFNjcmlwdEJyZWFrcG9pbnRzOworICAgIEhhc2hN
YXA8U3RyaW5nLCBTY3JpcHRCcmVha3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrUHJvZ3JhbURldGFpbHM7CiAgICAgYm9vbCBt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50LmpzCmluZGV4IDMyYTZhM2QuLmRkMGNlMTIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzCkBAIC0yOSw4ICsyOSw5IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oZGVidWdnZXJN
b2RlbCwgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQgPSBmdW5jdGlvbihkZWJ1Z2dlck1vZGVsLCBicmVha3BvaW50SWQsIHNv
dXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKIHsKKyAgICB0aGlzLmlkID0g
YnJlYWtwb2ludElkOwogICAgIHRoaXMudXJsID0gdXJsOwogICAgIHRoaXMubGluZSA9IGxpbmU7
CiAgICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwpAQCAtNDEsMjcgKzQyLDEyIEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oZGVidWdnZXJNb2RlbCwgc291cmNlSUQsIHVy
bCwgbGluZSwgZW5hYmxlZCwKICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsID0gZGVidWdnZXJNb2Rl
bDsKIH0KIAotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQgPSBmdW5jdGlv
bihzb3VyY2VJRCwgbGluZSkKLXsKLSAgICByZXR1cm4gc291cmNlSUQgKyAiOiIgKyBsaW5lOwot
fQotCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGVuYWJs
ZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CiAgICAgfSwKIAotICAg
IHNldCBlbmFibGVkKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCA9PT0geCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9lbmFibGVkID0geDsKLSAgICAg
ICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fc2V0QnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1jaGFuZ2VkIik7Ci0g
ICAgfSwKLQogICAgIGdldCBzb3VyY2VUZXh0KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9zb3VyY2VUZXh0OwpAQCAtNzMsMjggKzU5LDExIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxh
YmVsLWNoYW5nZWQiKTsKICAgICB9LAogCi0gICAgZ2V0IGlkKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5qc0JyZWFrcG9pbnRJZCh0aGlzLnNvdXJjZUlE
LCB0aGlzLmxpbmUpOwotICAgIH0sCi0KICAgICBnZXQgY29uZGl0aW9uKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLl9jb25kaXRpb247CiAgICAgfSwKIAotICAgIHNldCBjb25kaXRpb24o
YykKLSAgICB7Ci0gICAgICAgIGMgPSBjIHx8ICIiOwotICAgICAgICBpZiAodGhpcy5fY29uZGl0
aW9uID09PSBjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2NvbmRpdGlv
biA9IGM7Ci0gICAgICAgIGlmICh0aGlzLmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9kZWJ1
Z2dlck1vZGVsLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKHRoaXMpOwotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygiY29uZGl0aW9uLWNoYW5nZWQiKTsKLSAgICB9LAotCiAg
ICAgZ2V0IGhpdCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faGl0OwpAQCAtMTM0LDcg
KzEwMyw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogICAgIHJl
bW92ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVC
cmVha3BvaW50KHRoaXMuc291cmNlSUQsIHRoaXMubGluZSk7CisgICAgICAgIHRoaXMuX2RlYnVn
Z2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludCh0aGlzLmlkKTsKICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92ZWQiKTsKICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0
ZW5lcnMoKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2RlYnVnZ2VyTW9kZWw7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKaW5kZXggNjA0ZGE2
MC4uMjFkOTA2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50TWFuYWdlci5qcwpAQCAtMzYsMTYgKzM2LDIwIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlciA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbcHJv
amVjdElkXSA9IHRoaXMuX3ZhbGlkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNbcHJvamVjdElk
XSk7CiAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdGlja3lCcmVha3BvaW50cyh0aGlzLl9zdGlj
a3lCcmVha3BvaW50cyk7CiAKLSAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAg
IHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3Jl
ZCA9IGZhbHNlOworICAgIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRzID0ge307CiAKICAgICBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3MuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZ3Mu
RXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0aGlzLl9wcm9qZWN0Q2hhbmdlZCwgdGhpcyk7CisgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9zY3JpcHRCcmVha3Bv
aW50QWRkZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1v
dmVkLCB0aGlzLl9zY3JpcHRCcmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJN
b2RlbC5FdmVudHMuRGVidWdnZXJQYXVzZWQsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlzKTsK
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQsIHRoaXMuX2RlYnVnZ2Vy
UmVzdW1lZCwgdGhpcyk7CiB9CiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRp
dmVCcmVha3BvaW50VHlwZXMgPSB7CitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzID0gewogICAgIERPTTogIkRPTSIsCisgICAgSlM6ICJKUyIsCiAgICAgRXZl
bnRMaXN0ZW5lcjogIkV2ZW50TGlzdGVuZXIiLAogICAgIFhIUjogIlhIUiIKIH0KQEAgLTcwLDcg
Kzc0LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3Jl
YXRlRE9NQnJlYWtwb2ludElkKG5vZGVJZCwgdHlwZSk7Ci0gICAgICAgIGlmIChicmVha3BvaW50
SWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCisgICAgICAgIGlmIChicmVha3BvaW50SWQg
aW4gdGhpcy5fYnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQobm9kZSwgdHlwZSk7
CkBAIC05MCw3ICs5NCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgX2NyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50OiBmdW5jdGlvbihldmVu
dE5hbWUsIGVuYWJsZWQsIHJlc3RvcmVkKQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnRJ
ZCA9IHRoaXMuX2NyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50SWQoZXZlbnROYW1lKTsKLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKKyAgICAg
ICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoZXZlbnROYW1lKTsKQEAgLTEwMCw2ICsxMDQsMzggQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50
cy5FdmVudExpc3RlbmVyQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50LnZpZXcpOwogICAgIH0s
CiAKKyAgICBfY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCwgbGluZU51
bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCByZXN0b3JlZCkKKyAgICB7CisgICAgICAgIHZhciBi
cmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludElkKHVybCwgbGlu
ZU51bWJlcik7CisgICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50KHVybCwgbGluZU51bWJlciwgY29uZGl0aW9u
KTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGJyZWFr
cG9pbnQsIGVuYWJsZWQsIHJlc3RvcmVkKTsKKyAgICB9LAorCisgICAgX3NjcmlwdEJyZWFrcG9p
bnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0QnJlYWtw
b2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIAorICAgICAgICBpZiAoIXNjcmlwdEJyZWFrcG9p
bnQudXJsKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghc2NyaXB0QnJlYWtw
b2ludC5yZXN0b3JlZCkKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3Bv
aW50KHNjcmlwdEJyZWFrcG9pbnQudXJsLCBzY3JpcHRCcmVha3BvaW50Lm9yaWdpbmFsTGluZU51
bWJlciwgc2NyaXB0QnJlYWtwb2ludC5jb25kaXRpb24sIHNjcmlwdEJyZWFrcG9pbnQuZW5hYmxl
ZCwgZmFsc2UpOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlSmF2YVNj
cmlwdEJyZWFrcG9pbnRJZChzY3JpcHRCcmVha3BvaW50LnVybCwgc2NyaXB0QnJlYWtwb2ludC5v
cmlnaW5hbExpbmVOdW1iZXIpOworICAgICAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50c1tzY3Jp
cHRCcmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnRJZDsKKyAgICB9LAorCisgICAgX3NjcmlwdEJy
ZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBzY3Jp
cHRCcmVha3BvaW50SWQgPSBldmVudC5kYXRhOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0g
dGhpcy5fc2NyaXB0QnJlYWtwb2ludHNbc2NyaXB0QnJlYWtwb2ludElkXTsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRzW3NjcmlwdEJyZWFrcG9pbnRJZF07CisgICAgICAg
IGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpCisgICAgICAgICAgICB0aGlz
Ll9yZW1vdmVOYXRpdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgfSwKKwogICAgIGNy
ZWF0ZVhIUkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCkKICAgICB7CiAgICAgICAgIHRoaXMuX2Ny
ZWF0ZVhIUkJyZWFrcG9pbnQodXJsLCB0cnVlLCBmYWxzZSk7CkBAIC0xMDgsNyArMTQ0LDcgQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfY3JlYXRl
WEhSQnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBlbmFibGVkLCByZXN0b3JlZCkKICAgICB7CiAg
ICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVYSFJCcmVha3BvaW50SWQodXJs
KTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykK
KyAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3Iu
WEhSQnJlYWtwb2ludCh1cmwpOwpAQCAtMTIwLDcgKzE1Niw3IEBAIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0TmF0aXZlQnJlYWtwb2ludDog
ZnVuY3Rpb24oYnJlYWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBicmVh
a3BvaW50OworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJlYWtw
b2ludDsKICAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5hYmxlZDsKICAgICAgICAgaWYg
KHJlc3RvcmVkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDcgKzE2Nyw3IEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0TmF0aXZl
QnJlYWtwb2ludEVuYWJsZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5hYmxlZCkKICAgICB7
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtw
b2ludElkXTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVh
a3BvaW50SWRdOwogICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkID09PSBlbmFibGVkKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZW5hYmxlZCkKQEAgLTE0NCwyMyArMTgw
LDI2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAg
ICBfcmVtb3ZlTmF0aXZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludElkKQogICAgIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3Bv
aW50SWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFr
cG9pbnRJZF07CiAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCiAgICAgICAgICAgICBi
cmVha3BvaW50Ll9kaXNhYmxlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVha3Bv
aW50c1ticmVha3BvaW50SWRdOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludElkXTsKICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CiAgICAgfSwKIAog
ICAgIGJyZWFrcG9pbnRWaWV3Rm9yRXZlbnREYXRhOiBmdW5jdGlvbihldmVudERhdGEpCiAgICAg
ewogICAgICAgICB2YXIgYnJlYWtwb2ludElkOwotICAgICAgICBpZiAoZXZlbnREYXRhLmJyZWFr
cG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtw
b2ludFR5cGVzLkRPTSkKKyAgICAgICAgaWYgKGV2ZW50RGF0YS5icmVha3BvaW50VHlwZSA9PT0g
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5ET00pCiAgICAg
ICAgICAgICBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVET01CcmVha3BvaW50SWQoZXZlbnRE
YXRhLm5vZGVJZCwgZXZlbnREYXRhLnR5cGUpOwotICAgICAgICBlbHNlIGlmIChldmVudERhdGEu
YnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVC
cmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgZWxzZSBpZiAoZXZlbnREYXRh
LmJyZWFrcG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLkV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgICBicmVha3BvaW50SWQgPSB0aGlz
Ll9jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElkKGV2ZW50RGF0YS5ldmVudE5hbWUpOwot
ICAgICAgICBlbHNlIGlmIChldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuWEhSKQorICAgICAgICBl
bHNlIGlmIChldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuWEhSKQogICAgICAgICAgICAgYnJlYWtwb2ludElk
ID0gdGhpcy5fY3JlYXRlWEhSQnJlYWtwb2ludElkKGV2ZW50RGF0YS5icmVha3BvaW50VVJMKTsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3Bv
aW50SWRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOwogICAgICAgICBp
ZiAoYnJlYWtwb2ludCkKICAgICAgICAgICAgIHJldHVybiBicmVha3BvaW50LnZpZXc7CiAgICAg
fSwKQEAgLTE5MSwxNiArMjMwLDE5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUgPSB7CiAKICAgICBfcHJvamVjdENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3JlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50cyA9IHt9OwogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkKTsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0
aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8
fCBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAgICAg
ICAgICAgIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgICAgIGlm
IChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVh
a3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVF
dmVudExpc3RlbmVyQnJlYWtwb2ludChicmVha3BvaW50LmNvbmRpdGlvbi5ldmVudE5hbWUsIGJy
ZWFrcG9pbnQuZW5hYmxlZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50
LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50
VHlwZXMuWEhSKQorICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkpTKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0
aW9uLnVybCwgYnJlYWtwb2ludC5jb25kaXRpb24ubGluZU51bWJlciwgYnJlYWtwb2ludC5jb25k
aXRpb24uY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQsIHRydWUpOworICAgICAgICAgICAg
ZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuQnJlYWtwb2ludFR5cGVzLlhIUikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVYSFJC
cmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0aW9uLnVybCwgYnJlYWtwb2ludC5lbmFibGVkLCB0
cnVlKTsKICAgICAgICAgfQogICAgIH0sCkBAIC0yMTUsNyArMjU3LDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgICAgICBp
ZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgdmFyIG5vZGVJZCA9IHBhdGhUb05vZGVJZFticmVha3BvaW50LmNvbmRpdGlvbi5w
YXRoXTsKICAgICAgICAgICAgICAgICBpZiAobm9kZUlkKQpAQCAtMjI5LDcgKzI3MSw3IEBAIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBw
YXRoVG9Ob2RlSWQgPSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9IDA7CiAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgIGlmIChicmVha3Bv
aW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHZhciBw
YXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBhdGg7CiAgICAgICAgICAgICBpZiAocGF0
aCBpbiBwYXRoVG9Ob2RlSWQpCkBAIC0yNDUsOCArMjg3LDggQEAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfc2F2ZUJyZWFrcG9pbnRzOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgZm9yICh2
YXIgYnJlYWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07
CisgICAgICAgIGZvciAodmFyIGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykgewor
ICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50
SWRdOwogICAgICAgICAgICAgdmFyIHBlcnNpc3RlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludC5f
c2VyaWFsaXplVG9KU09OKCk7CiAgICAgICAgICAgICBwZXJzaXN0ZW50QnJlYWtwb2ludC5lbmFi
bGVkID0gYnJlYWtwb2ludC5lbmFibGVkOwogICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaChw
ZXJzaXN0ZW50QnJlYWtwb2ludCk7CkBAIC0yNTQsNyArMjk2LDcgQEAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLl9kb21CcmVh
a3BvaW50c1Jlc3RvcmVkKSB7CiAgICAgICAgICAgICB2YXIgc3RpY2t5QnJlYWtwb2ludHMgPSB0
aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8
fCBbXTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RpY2t5QnJlYWtwb2ludHMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RpY2t5QnJlYWtwb2ludHNbaV0u
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRU
eXBlcy5ET00pCisgICAgICAgICAgICAgICAgaWYgKHN0aWNreUJyZWFrcG9pbnRzW2ldLnR5cGUg
PT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuRE9NKQog
ICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHN0aWNreUJyZWFrcG9pbnRzW2ld
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjc0LDE1ICszMTYsMTkgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIHZhciBpZCA9IGJyZWFrcG9pbnQudHlwZSArICI6IjsKICAg
ICAgICAgICAgIHZhciBjb25kaXRpb24gPSBicmVha3BvaW50LmNvbmRpdGlvbjsKLSAgICAgICAg
ICAgIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRE9NKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVz
LkRPTSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLnBhdGggIT09ICJz
dHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24udHlwZSAhPT0gIm51bWJlciIpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlkICs9IGNvbmRpdGlvbi5wYXRo
ICsgIjoiICsgY29uZGl0aW9uLnR5cGU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9p
bnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9p
bnRUeXBlcy5FdmVudExpc3RlbmVyKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9p
bnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBl
cy5FdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24u
ZXZlbnROYW1lICE9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgaWQgKz0gY29uZGl0aW9uLmV2ZW50TmFtZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUikgeworICAgICAgICAgICAgfSBlbHNlIGlmIChi
cmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3Bv
aW50VHlwZXMuSlMpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51cmwg
IT09ICJzdHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24ubGluZU51bWJlciAhPT0gIm51bWJlciIg
fHwgdHlwZW9mIGNvbmRpdGlvbi5jb25kaXRpb24gIT09ICJzdHJpbmciKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZCArPSBjb25kaXRpb24udXJsICsg
IjoiICsgY29uZGl0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFr
cG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRU
eXBlcy5YSFIpIHsKICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51cmwgIT09
ICJzdHJpbmciKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBpZCArPSBjb25kaXRpb24udXJsOwpAQCAtMzAwLDYgKzM0NiwxMSBAQCBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gImRvbToiICsg
bm9kZUlkICsgIjoiICsgdHlwZTsKICAgICB9LAogCisgICAgX2NyZWF0ZUphdmFTY3JpcHRCcmVh
a3BvaW50SWQ6IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAianM6IiArIHVybCArICI6IiArIGxpbmVOdW1iZXI7CisgICAgfSwKKwogICAgIF9jcmVhdGVF
dmVudExpc3RlbmVyQnJlYWtwb2ludElkOiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gImV2ZW50TGlzdG5lcjoiICsgZXZlbnROYW1lOwpAQCAtMzMzLDExICszODQs
MzQgQEAgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAgX3Nl
cmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTTsKKyAg
ICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dFR5cGVzLkRPTTsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7IHBh
dGg6IHRoaXMuX3BhdGgsIHR5cGU6IHRoaXMuX3R5cGUgfSB9OwogICAgIH0KIH0KIAorV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBj
b25kaXRpb24pCit7CisgICAgdGhpcy5fdXJsID0gdXJsOworICAgIHRoaXMuX2xpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyOworICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbjsKK30KKworV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKKyAgICBfZW5hYmxl
OiBmdW5jdGlvbigpCisgICAgeworICAgIH0sCisKKyAgICBfZGlzYWJsZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLkpTOworICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBjb25kaXRpb246IHsg
dXJsOiB0aGlzLl91cmwsIGxpbmVOdW1iZXI6IHRoaXMuX2xpbmVOdW1iZXIsIGNvbmRpdGlvbjog
dGhpcy5fY29uZGl0aW9uIH0gfTsKKyAgICB9Cit9CisKIFdlYkluc3BlY3Rvci5FdmVudExpc3Rl
bmVyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkKIHsKICAgICB0aGlzLl9ldmVudE5h
bWUgPSBldmVudE5hbWU7CkBAIC0zNTYsNyArNDMwLDcgQEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXJCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogICAgIF9zZXJpYWxpemVUb0pTT046IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5FdmVudExpc3RlbmVyOworICAgICAgICB2
YXIgdHlwZSA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMu
RXZlbnRMaXN0ZW5lcjsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7
IGV2ZW50TmFtZTogdGhpcy5fZXZlbnROYW1lIH0gfTsKICAgICB9CiB9CkBAIC0zNzksNyArNDUz
LDcgQEAgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAgX3Nl
cmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUjsKKyAg
ICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dFR5cGVzLlhIUjsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7IHVy
bDogdGhpcy5fdXJsIH0gfTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlck1vZGVsLmpzCmluZGV4IDMxYzc1ZTUuLjVhYjBlMmQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC0zMiw3ICszMiw5IEBAIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsID0gZnVuY3Rpb24oKQogewogICAgIEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyKCJEZWJ1Z2dlciIsIHRoaXMpOwogCisgICAg
dGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKKyAgICB0
aGlzLl9zb3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZCA9IHt9OwogICAgIHRoaXMuX3Njcmlw
dHMgPSB7fTsKIH0KIApAQCAtNDIsMzUgKzQ0LDY4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1v
ZGVsLkV2ZW50cyA9IHsKICAgICBQYXJzZWRTY3JpcHRTb3VyY2U6ICJwYXJzZWQtc2NyaXB0LXNv
dXJjZSIsCiAgICAgRmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZTogImZhaWxlZC10by1wYXJzZS1z
Y3JpcHQtc291cmNlIiwKICAgICBCcmVha3BvaW50QWRkZWQ6ICJicmVha3BvaW50LWFkZGVkIiwK
KyAgICBCcmVha3BvaW50UmVtb3ZlZDogImJyZWFrcG9pbnQtcmVtb3ZlZCIKIH0KIAogV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewotICAgIHNldE9uZVRpbWVCcmVha3Bv
aW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKKyAgICBjb250aW51ZVRvTGluZTogZnVuY3Rp
b24oc291cmNlSUQsIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgdW5kZWZpbmVkLCBs
aW5lLCB0cnVlLCB1bmRlZmluZWQpOwotICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9vbmVU
aW1lQnJlYWtwb2ludCkKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtw
b2ludCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJyZWFr
cG9pbnQubGluZSk7Ci0gICAgICAgIHRoaXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtwb2lu
dDsKLSAgICAgICAgLy8gRklYTUUoNDA2NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwgYmUg
cGVyc2lzdGVkIGluIGluc3BlY3RvciBzZXR0aW5ncyBpZiBub3QgaGl0LgotICAgICAgICB0aGlz
Ll9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQsIHRydWUpOworICAgICAgICBmdW5j
dGlvbiBkaWRTZXRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYWN0dWFsTGluZU51bWJlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKHRoaXMuZmluZEJyZWFrcG9pbnQoc291cmNlSUQsIGFj
dHVhbExpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1v
dmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCJfY29udGludWVUb0xpbmVCcmVha3BvaW50SWQi
IGluIHRoaXMpCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3Bv
aW50KHRoaXMuX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkKTsKKyAgICAgICAgICAgIHRoaXMu
X2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkID0gYnJlYWtwb2ludElkOworICAgICAgICB9Cisg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJl
ciwgIiIsIHRydWUsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgICAgIGlmICh0
aGlzLl9wYXVzZWQpCisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlc3VtZSgpOwogICAg
IH0sCiAKLSAgICByZW1vdmVPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24oKQorICAgIHNldEJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRp
b24pCiAgICAgewotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpIHsKLSAgICAg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9vbmVUaW1lQnJl
YWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSk7Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CisgICAgICAgIGZ1bmN0aW9uIGRp
ZFNldEJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBhY3R1YWxMaW5lTnVtYmVyKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludElkKQorICAgICAgICAgICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRTZXRPbkJhY2tlbmQoYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgYWN0dWFsTGluZU51
bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBsaW5lTnVtYmVyLCBmYWxzZSk7CiAgICAgICAgIH0K
KyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVt
YmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Cisg
ICAgfSwKKworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKKyAg
ICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50
SWQpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9p
bnRJZF07CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOwor
ICAgICAgICBkZWxldGUgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWRbdGhpcy5f
ZW5jb2RlU291cmNlSURBbmRMaW5lKGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGlu
ZSldOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIGJyZWFrcG9pbnRJZCk7CiAg
ICAgfSwKIAotICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBlbmFi
bGVkLCBjb25kaXRpb24pCisgICAgYnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihicmVha3Bv
aW50SWQsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIG9yaWdpbmFs
TGluZU51bWJlcikKICAgICB7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTZXRPbkJhY2tlbmQo
YnJlYWtwb2ludElkLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBv
cmlnaW5hbExpbmVOdW1iZXIsIHRydWUpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFNldE9u
QmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29u
ZGl0aW9uLCBlbmFibGVkLCBvcmlnaW5hbExpbmVOdW1iZXIsIHJlc3RvcmVkKQorICAgIHsKKyAg
ICAgICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGluZShz
b3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIGlmIChzb3VyY2VJREFuZExpbmUgaW4gdGhp
cy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWQpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKICAgICAgICAgdmFyIHVybCA9IHRoaXMuX3NjcmlwdHNbc291cmNl
SURdLnNvdXJjZVVSTDsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVha3Bv
aW50KHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Ci0gICAgICAgIGlm
IChicmVha3BvaW50KQotICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2VuZChi
cmVha3BvaW50KTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQodGhpcywgYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgdXJsLCBsaW5lTnVtYmVyLCBl
bmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBicmVha3BvaW50LnJlc3RvcmVkID0gcmVzdG9y
ZWQ7CisgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luYWxMaW5lTnVtYmVyID0gb3JpZ2luYWxMaW5l
TnVtYmVyOworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJlYWtw
b2ludDsKKyAgICAgICAgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWRbc291cmNl
SURBbmRMaW5lXSA9IGJyZWFrcG9pbnRJZDsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRl
ZCwgYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIHF1ZXJ5QnJlYWtwb2ludHM6IGZ1bmN0aW9u
KGZpbHRlcikKQEAgLTg2LDU1ICsxMjEsMjUgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwu
cHJvdG90eXBlID0gewogCiAgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBs
aW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LmpzQnJlYWtwb2ludElkKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICAg
ICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGluZShzb3Vy
Y2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9zb3Vy
Y2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZFtzb3VyY2VJREFuZExpbmVdOwogICAgICAgICByZXR1
cm4gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKICAgICB9LAogCisgICAgX2VuY29k
ZVNvdXJjZUlEQW5kTGluZTogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gc291cmNlSUQgKyAiOiIgKyBsaW5lTnVtYmVyOworICAgIH0sCisKICAg
ICByZXNldDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7
CiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3Bv
aW50SWQgPSB7fTsKICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IHt9OwogICAgIH0sCiAKLSAgICBf
c2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29u
ZGl0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9u
KTsKLSAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYgKHRo
aXMuX29uZVRpbWVCcmVha3BvaW50LmlkID09IGJyZWFrcG9pbnQuaWQpKQotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwotICAgICAgICB0aGlzLl9icmVha3BvaW50
c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZl
bnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludCk7Ci0gICAgICAgIHJldHVy
biBicmVha3BvaW50OwotICAgIH0sCi0KLSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50LnRh
cmdldC5pZF07Ci0gICAgfSwKLQotICAgIF9zZXRCcmVha3BvaW50T25CYWNrZW5kOiBmdW5jdGlv
bihicmVha3BvaW50LCBpc09uZVRpbWUpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBkaWRTZXRC
cmVha3BvaW50KHN1Y2Nlc3MsIGxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdWNj
ZXNzICYmIGxpbmUgPT0gYnJlYWtwb2ludC5saW5lKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGlmIChpc09uZVRpbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vz
cykKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSA9IGxp
bmU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fb25lVGltZUJyZWFrcG9pbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJ
RCwgYnJlYWtwb2ludC51cmwsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5j
b25kaXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZFNldEJyZWFrcG9p
bnQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQogICAgIHNjcmlwdEZvclNvdXJjZUlEOiBmdW5jdGlv
bihzb3VyY2VJRCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRzW3NvdXJjZUlE
XTsKQEAgLTE1OCwxMyArMTYzLDEzIEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3Rv
dHlwZSA9IHsKIAogICAgIC8vIEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBhcmUgSW5zcGVjdG9yQmFj
a2VuZCBub3RpZmljYXRpb24gaGFuZGxlcnMuCiAKLSAgICBicmVha3BvaW50UmVzdG9yZWQ6IGZ1
bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKTsKLSAgICB9LAotCiAgICAgcGF1c2VkU2NyaXB0OiBmdW5jdGlvbihkZXRhaWxz
KQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCJfY29u
dGludWVUb0xpbmVCcmVha3BvaW50SWQiIGluIHRoaXMpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9jb250aW51ZVRvTGluZUJyZWFrcG9pbnRJ
ZCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGludWVUb0xpbmVCcmVha3BvaW50SWQ7
CisgICAgICAgIH0KICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCBkZXRhaWxzKTsKIAog
ICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckV2
ZW50VHlwZXMuSmF2YVNjcmlwdFBhdXNlIHx8IGRldGFpbHMuZXZlbnRUeXBlID09PSBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLk5hdGl2ZUJyZWFrcG9pbnQpCkBAIC0xNzksNiArMTg0
LDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewogCiAgICAgcmVz
dW1lZFNjcmlwdDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFs
c2U7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQpOwogCiAgICAgICAgIGlmICghdGhp
cy5fbGFzdEhpdEJyZWFrcG9pbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcwppbmRleCA3Mzg3OTY0Li41NmZhY2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTI3MSwxMyArMjcxLDYgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FkZFNjcmlwdFRv
RmlsZXNNZW51KHNjcmlwdCk7CiAgICAgfSwKIAotICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlv
bihzb3VyY2VJRCwgbGluZSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLnNldE9uZVRpbWVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lKTsKLSAgICAgICAgaWYgKHRo
aXMucGF1c2VkKQotICAgICAgICAgICAgdGhpcy5fdG9nZ2xlUGF1c2UoKTsKLSAgICB9LAotCiAg
ICAgX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkOiBmdW5jdGlvbihlKQogICAgIHsKICAgICAgICAg
dmFyIHJlc291cmNlID0gZS50YXJnZXQ7CkBAIC0zNzIsNyArMzY1LDYgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgY2FsbEZyYW1l
cyA9IGV2ZW50LmRhdGEuY2FsbEZyYW1lczsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNb2RlbC5yZW1vdmVPbmVUaW1lQnJlYWtwb2ludCgpOwogICAgICAgICB0aGlzLl9wYXVzZWQg
PSB0cnVlOwogICAgICAgICB0aGlzLl93YWl0aW5nVG9QYXVzZSA9IGZhbHNlOwogICAgICAgICB0
aGlzLl9zdGVwcGluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJj
ZUZyYW1lLmpzCmluZGV4IDRiZWFkOGYuLmZhODQ0MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTQ4Miw3ICs0ODIsNyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
X2ZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdh
bnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCi0g
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
QWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5fc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMsIGxpbmVOdW1i
ZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRCcmVha3BvaW50LmJpbmQodGhpcywg
bGluZU51bWJlciwgIiIsIHRydWUpKTsKIAogICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29uZGl0
aW9uYWxCcmVha3BvaW50KCkKICAgICAgICAgICAgIHsKQEAgLTQ5MSw3ICs0OTEsNyBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24obGluZU51
bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIHRy
dWUsIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRoaXMu
X2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGxpbmVOdW1iZXIsICIiLCBkaWRFZGl0QnJlYWtwb2lu
dENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKICAgICAgICAgICAgIH0KQEAgLTUwMywxNiArNTAzLDIz
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24oY29t
bWl0dGVkLCBjb25kaXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5jb25k
aXRpb24gPSBjb25kaXRpb247CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQubGluZSwgYnJlYWtw
b2ludC5lbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9u
KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRFZGl0QnJlYWtwb2ludENvbmRp
dGlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24obGlu
ZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9u
LmJpbmQodGhpcykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgQnJlYWtwb2ludOKApiIpLCBlZGl0
QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNl
dEJyZWFrcG9pbnRFbmFibGVkKGVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3Bv
aW50KGJyZWFrcG9pbnQubGluZSwgZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlz
YWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxz
ZTsgfSk7CisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkRpc2FibGUgQnJlYWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5i
aW5kKHRoaXMsIGZhbHNlKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBCcmVha3Bv
aW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSB0cnVlOyB9KTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
RW5hYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0aGlzLCB0cnVl
KSk7CiAgICAgICAgIH0KICAgICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7CiAgICAgfSwK
QEAgLTUzNSwxMiArNTQyLDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChsaW5l
TnVtYmVyKTsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIGJyZWFrcG9p
bnQucmVtb3ZlKCk7CiAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpCi0gICAgICAgICAg
ICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWJyZWFrcG9pbnQuZW5hYmxlZDsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlbW92ZSgpOworICAgICAgICAg
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lLCAhYnJlYWtwb2ludC5l
bmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdGhpcy5fc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHRoaXMuX3Nl
dEJyZWFrcG9pbnQobGluZU51bWJlciwgdHJ1ZSwgIiIpOwogICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwogICAgIH0sCiAKQEAgLTc3NSw3ICs3ODEsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zb3Vy
Y2VJREZvckxpbmUobGluZU51bWJlcik7CiAgICAgICAgIGlmICghc291cmNlSUQpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jb250aW51
ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmNvbnRpbnVlVG9MaW5lKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKICAgICB9LAog
CiAgICAgX2VkaXRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBuZXdDb250ZW50LCBjYW5jZWxF
ZGl0aW5nQ2FsbGJhY2spCkBAIC04MjMsMTIgKzgyOSwxMiBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2NyaXB0LnJlc291cmNlLnNldENvbnRl
bnQobmV3Q29udGVudCwgcmV2ZXJ0RWRpdExpbmVDYWxsYmFjayk7CiAgICAgfSwKIAotICAgIF9z
ZXRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb25kaXRpb24pCisgICAgX3NldEJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7
CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVy
KTsKICAgICAgICAgaWYgKCFzb3VyY2VJRCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51
bWJlciwgdHJ1ZSwgY29uZGl0aW9uKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9u
KTsKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNB
Y3RpdmF0ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xl
QnJlYWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77125</attachid>
            <date>2010-12-21 09:52:07 -0800</date>
            <delta_ts>2010-12-21 10:04:07 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>66036</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMmQ3NThiLi4wODI0OTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTIt
MjEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcGVy
c2lzdCBKYXZhU2NyaXB0IGJyZWFrcG9pbnRzIGluIGZyb250ZW5kIHNldHRpbmdzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg0MzQKKworICAgICAg
ICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5zZXRCcmVha3BvaW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZGVidWdnZXItYnJlYWtwb2ludHMtbm90LWFjdGl2YXRlZC1vbi1yZWxv
YWQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXItcGF1c2Utb24tYnJlYWtwb2lu
dC5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1s
OgorCiAyMDEwLTEyLTIwICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCmluZGV4IGU0NGZjYTkuLjQxMzQ2MTMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QyLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QyLmpzCkBAIC05MCw2ICs5MCwxMyBAQCBJbnNwZWN0b3JUZXN0LmNhcHR1cmVTdGFja1RyYWNl
ID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKICAgICB9CiB9OwogCitJbnNwZWN0b3JUZXN0LnNldEJy
ZWFrcG9pbnQgPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbikK
K3sKKyAgICB2YXIgc2NyaXB0cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdHNG
b3JVUkwodXJsKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kp
CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoc2NyaXB0
c1tpXS5zb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKK30KKwogSW5z
cGVjdG9yVGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIHsKICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IGV4ZWN1dGlvbiBwYXVzZWQuIik7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItYnJlYWtwb2ludHMtbm90LWFjdGl2
YXRlZC1vbi1yZWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1icmVh
a3BvaW50cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCmluZGV4IGZjMmM5MjYuLjJmZGM5
ZWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1icmVha3BvaW50
cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kZWJ1Z2dlci1icmVha3BvaW50cy1ub3QtYWN0aXZhdGVkLW9uLXJlbG9hZC5odG1sCkBAIC0y
NCw3ICsyNCw3IEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24oKQogICAgIGZ1bmN0aW9uIHN0ZXAyKCkK
ICAgICB7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNYWluIHJlc291cmNlIHdh
cyBzaG93bi4iKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZpc2libGVW
aWV3LnNvdXJjZUZyYW1lLl9zZXRCcmVha3BvaW50KDgpOworICAgICAgICBJbnNwZWN0b3JUZXN0
LnNldEJyZWFrcG9pbnQoV2ViSW5zcGVjdG9yLm1haW5SZXNvdXJjZS51cmwsIDgsIHRydWUsICIi
KTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRz
QnV0dG9uLmVsZW1lbnQuY2xpY2soKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdl
KHN0ZXAzKTsKICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXItcGF1c2Utb24tYnJlYWtwb2ludC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyLXBhdXNlLW9uLWJyZWFrcG9pbnQuaHRtbAppbmRleCA0ODMxZDQyLi40MzI2MGIyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItcGF1c2Utb24tYnJlYWtwb2lu
dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1wYXVzZS1vbi1icmVh
a3BvaW50Lmh0bWwKQEAgLTIyLDcgKzIyLDcgQEAgdmFyIHRlc3QgPSBmdW5jdGlvbigpCiAgICAg
ZnVuY3Rpb24gc3RlcDIoKQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQo
IlNjcmlwdCBzb3VyY2Ugd2FzIHNob3duLiIpOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxz
LnNjcmlwdHMudmlzaWJsZVZpZXcuc291cmNlRnJhbWUuX3NldEJyZWFrcG9pbnQoOSk7CisgICAg
ICAgIEluc3BlY3RvclRlc3Quc2V0QnJlYWtwb2ludChXZWJJbnNwZWN0b3IubWFpblJlc291cmNl
LnVybCwgOSwgdHJ1ZSwgIiIpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RGdW5jdGlv
bkFuZFdhaXRVbnRpbFBhdXNlZChzdGVwMyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQKaW5k
ZXggMjIyMWM4NC4uYTVkOGRmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jl
cG9ydC1wcm90b2NvbC1lcnJvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVjdGVkLnR4dApAQCAtODQsOCArODQsNyBA
QCBUZXN0cyB0aGF0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIGlzIGNhdGNoaW5nIGluY29y
cmVjdCBtZXNzYWdlcy4KICAgICBzdWNjZXNzIDogZmFsc2UKICAgICBlcnJvcnMgOiB7CiAgICAg
ICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6IERlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iCi0gICAgICAgIDEgOiAiUHJvdG9jb2wgRXJyb3I6IEFyZ3VtZW50ICdzb3VyY2VJRCcgd2l0
aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIgotICAgICAgICAyIDogIlByb3RvY29sIEVy
cm9yOiBBcmd1bWVudCAnbGluZU51bWJlcicgd2l0aCB0eXBlICdOdW1iZXInIHdhcyBub3QgZm91
bmQuIgorICAgICAgICAxIDogIlByb3RvY29sIEVycm9yOiBBcmd1bWVudCAnYnJlYWtwb2ludElk
JyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3VuZC4iCiAgICAgfQogfQogewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwKaW5kZXgg
ZDQ4OTYxZC4uNGMwZmY2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9y
dC1wcm90b2NvbC1lcnJvcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0
LXByb3RvY29sLWVycm9ycy5odG1sCkBAIC0xNyw3ICsxNyw3IEBAIGZ1bmN0aW9uIHRlc3QoKQog
ICAgICAgICAneyJzZXEiOjQsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMi
Ont9fScsCiAgICAgICAgICd7InNlcSI6NSwiY29tbWFuZCI6InJlc291cmNlQ29udGVudCIsImFy
Z3VtZW50cyI6eyJpZGVudGlmaWVyIjoibm90IGEgbnVtYmVyIn19JywKICAgICAgICAgJ3sic2Vx
Ijo2LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6e319JywKLSAgICAg
ICAgJ3sic2VxIjo3LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6eyJz
b3VyY2VJRCI6InNvbWVTb3VyY2VJZCIsImxpbmVOdW1iZXIiOjB9fScsCisgICAgICAgICd7InNl
cSI6NywiY29tbWFuZCI6InJlbW92ZUJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOnsiYnJlYWtwb2lu
dElkIjoic29tZUJyZWFrcG9pbnRJZCJ9fScsCiAKICAgICBdOwogICAgIHZhciBudW1iZXJPZlJl
cG9ydHMgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBmZjExMTEwLi5lZDM4YzJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEwLTEyLTIxICBQ
YXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBlcnNpc3Qg
SmF2YVNjcmlwdCBicmVha3BvaW50cyBpbiBmcm9udGVuZCBzZXR0aW5ncy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NDM0CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9EZWJ1Z2dlclNjcmlwdC5q
czoKKyAgICAgICAgKCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdn
ZXJGcm9tRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0U3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRTdGlja3lCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN0b3JlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckZvclBhZ2VOYXZpZ2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZS5yZW1vdmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlLl9zZXJpYWxpemVUb0pTT04p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50LnByb3RvdHlwZS5fc2VyaWFsaXplVG9KU09OKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5fZGVidWdnZXJQYXVzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanM6CisKIDIwMTAtMTItMTcgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGE0NDBiODEuLjEwZGYy
MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC01MCw2
ICs1MCw3IEBACiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNpbmNs
dWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KQEAgLTEzNywyMyArMTM4LDMzIEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2
ZXI6Omhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4g
bV9wYWdlTGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwogfQogCi1ib29sIFNjcmlwdERlYnVn
U2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFr
cG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExp
bmVOdW1iZXIpCitTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25k
aXRpb24sIGJvb2wgZW5hYmxlZCwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpCiB7CiAgICAg
aW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFz
b3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAiIjsK
ICAgICBCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAg
IGl0ID0gbV9icmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2ludHMo
KSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7Cisg
ICAgaWYgKGl0LT5zZWNvbmQuY29udGFpbnMobGluZU51bWJlcikpCisgICAgICAgIHJldHVybiAi
IjsKKyAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50KGVuYWJs
ZWQsIGNvbmRpdGlvbikpOwogICAgICphY3R1YWxMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhzb3VyY2VJRCwgIjoiLCBTdHJp
bmc6Om51bWJlcihsaW5lTnVtYmVyKSk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBicmVha3BvaW50SWQpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlE
LnRvSW50UHRyKCk7Ci0gICAgaWYgKCFzb3VyY2VJRFZhbHVlKQorICAgIFZlY3RvcjxTdHJpbmc+
IHRva2VuczsKKyAgICBicmVha3BvaW50SWQuc3BsaXQoIjoiLCB0b2tlbnMpOworICAgIGlmICh0
b2tlbnMuc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIHN1Y2Nlc3M7Cisg
ICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHRva2Vuc1swXS50b0ludFB0cigmc3VjY2Vzcyk7
CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgbGluZU51
bWJlciA9IHRva2Vuc1sxXS50b1VJbnQoJnN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuOwogICAgIEJyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fYnJlYWtw
b2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgIT0gbV9icmVha3BvaW50cy5l
bmQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCAzMTcyYzY1
Li44MWNkOWFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC02
Myw4ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiwgUGFnZSopOwogCi0gICAgYm9vbCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICBTdHJpbmcg
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCB1bnNpZ25lZCogYWN0dWFs
TGluZU51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJy
ZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKICAgICB2b2lkIGFjdGl2YXRlQnJl
YWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0LmpzIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9EZWJ1Z2dlclNjcmlwdC5qcwppbmRleCA2MDI2MjE0Li41MGY3OTFkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRGVidWdnZXJTY3JpcHQuanMKQEAgLTMxLDcgKzMxLDYgQEAKIChmdW5jdGlvbiAo
KSB7CiAKIHZhciBEZWJ1Z2dlclNjcmlwdCA9IHt9OwotRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9p
bnRzID0ge307CiAKIERlYnVnZ2VyU2NyaXB0LlBhdXNlT25FeGNlcHRpb25zU3RhdGUgPSB7CiAg
ICAgRG9udFBhdXNlT25FeGNlcHRpb25zIDogMCwKQEAgLTEwMCwyNSArOTksMTMgQEAgRGVidWdn
ZXJTY3JpcHQuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKICAgICB2
YXIgbG9jYXRpb25zID0gRGVidWcuZmluZEJyZWFrUG9pbnRBY3R1YWxMb2NhdGlvbnMoYnJlYWtJ
ZCk7CiAgICAgaWYgKCFsb2NhdGlvbnMubGVuZ3RoKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OwotICAgIHZhciBhY3R1YWxMaW5lTnVtYmVyID0gbG9jYXRpb25zWzBdLmxpbmU7Ci0KLSAgICB2
YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFjdHVhbExpbmVOdW1iZXI7Ci0gICAgaWYg
KGtleSBpbiBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgLy8gUmVtb3Zl
IG9sZCBicmVha3BvaW50LgotICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChEZWJ1Z2dlclNj
cmlwdC5fYnJlYWtwb2ludHNba2V5XSwgdHJ1ZSk7Ci0gICAgfQotICAgIERlYnVnZ2VyU2NyaXB0
Ll9icmVha3BvaW50c1trZXldID0gYnJlYWtJZDsKLSAgICByZXR1cm4gRGVidWdnZXJTY3JpcHQu
X3Y4VG9XZWJraXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOworICAgIGFyZ3MubGluZU51
bWJlciA9IERlYnVnZ2VyU2NyaXB0Ll92OFRvV2Via2l0TGluZU51bWJlcihsb2NhdGlvbnNbMF0u
bGluZSk7CisgICAgcmV0dXJuIGJyZWFrSWQudG9TdHJpbmcoKTsKIH0KIAogRGVidWdnZXJTY3Jp
cHQucmVtb3ZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKIHsKLSAgICBh
cmdzLmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIoYXJn
cy5saW5lTnVtYmVyKTsKLSAgICB2YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFyZ3Mu
bGluZU51bWJlcjsKLSAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50
c1trZXldOwotICAgIGlmIChicmVha0lkKQotICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChi
cmVha0lkLCB0cnVlKTsKLSAgICBkZWxldGUgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tl
eV07CisgICAgRGVidWcuZmluZEJyZWFrUG9pbnQoYXJncy5icmVha3BvaW50SWQsIHRydWUpOwog
fQogCiBEZWJ1Z2dlclNjcmlwdC5wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gZnVuY3Rpb24oKQpA
QCAtMTkwLDExICsxNzcsNyBAQCBEZWJ1Z2dlclNjcmlwdC5lZGl0U2NyaXB0U291cmNlID0gZnVu
Y3Rpb24oc2NyaXB0SWQsIG5ld1NvdXJjZSkKIAogRGVidWdnZXJTY3JpcHQuY2xlYXJCcmVha3Bv
aW50cyA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKIHsKLSAgICBmb3IgKHZhciBrZXkgaW4g
RGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7Ci0gICAgICAgIHZhciBicmVha0lkID0gRGVi
dWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07Ci0gICAgICAgIERlYnVnLmZpbmRCcmVha1Bv
aW50KGJyZWFrSWQsIHRydWUpOwotICAgIH0KLSAgICBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2lu
dHMgPSB7fTsKKyAgICBEZWJ1Zy5jbGVhckFsbEJyZWFrUG9pbnRzKCk7CiB9CiAKIERlYnVnZ2Vy
U2NyaXB0LnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdz
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCA5ZGZjYTU1
Li40YjQ2MTFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApA
QCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVy
KFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlCiAgICAgLy8gRklYTUU6
IFJlbW92ZSBhbGwgYnJlYWtwb2ludHMgc2V0IGJ5IHRoZSBhZ2VudC4KIH0KIAotYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3Jp
cHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBh
Y3R1YWxMaW5lTnVtYmVyKQorU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKQog
ewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CkBAIC0xNTIs
MjcgKzE1MiwyNSBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYgogICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3KCk7CiAgICAgYXJncy0+U2V0KHY4OjpTdHJp
bmc6Ok5ldygic2NyaXB0SWQiKSwgdjhTdHJpbmcoc291cmNlSUQpKTsKICAgICBhcmdzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2VyOjpOZXcobGluZU51bWJl
cikpOwotICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNvbmRpdGlvbiIpLCB2OFN0cmlu
ZyhicmVha3BvaW50LmNvbmRpdGlvbikpOwotICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXco
ImVuYWJsZWQiKSwgdjg6OkJvb2xlYW46Ok5ldyhicmVha3BvaW50LmVuYWJsZWQpKTsKKyAgICBh
cmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhTdHJpbmcoY29uZGl0aW9u
KSk7CisgICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2ODo6Qm9vbGVh
bjo6TmV3KGVuYWJsZWQpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVh
a3BvaW50RnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2Vy
U2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzZXRCcmVha3BvaW50IikpKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFr
cG9pbnRGdW5jdGlvbiwgYXJncyk7Ci0gICAgaWYgKCFyZXN1bHQtPklzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQocmVzdWx0LT5JbnQzMlZhbHVlKCkgPj0gMCk7
Ci0gICAgKmFjdHVhbExpbmVOdW1iZXIgPSByZXN1bHQtPkludDMyVmFsdWUoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYnJlYWtwb2ludElkID0gdjg6OkRl
YnVnOjpDYWxsKHNldEJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisgICAgaWYgKCFicmVha3Bv
aW50SWQtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICAqYWN0dWFsTGluZU51
bWJlciA9IGFyZ3MtPkdldCh2ODo6U3RyaW5nOjpOZXcoImxpbmVOdW1iZXIiKSktPkludDMyVmFs
dWUoKTsKKyAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcoYnJlYWtwb2ludElkLT5U
b1N0cmluZygpKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJ
ZCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkxvY2FsPHY4OjpDb250
ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29udGV4dCgpOwogICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250ZXh0KTsKIAogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3KCk7Ci0gICAgYXJn
cy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygic2NyaXB0SWQiKSwgdjhTdHJpbmcoc291cmNlSUQpKTsK
LSAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2Vy
OjpOZXcobGluZU51bWJlcikpOworICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImJyZWFr
cG9pbnRJZCIpLCB2OFN0cmluZyhicmVha3BvaW50SWQpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uPiByZW1vdmVCcmVha3BvaW50RnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJy
ZW1vdmVCcmVha3BvaW50IikpKTsKICAgICB2ODo6RGVidWc6OkNhbGwocmVtb3ZlQnJlYWtwb2lu
dEZ1bmN0aW9uLCBhcmdzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaApp
bmRleCA1YzVkNmM2Li40MGRkNWZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1Nl
cnZlci5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNj
cmlwdERlYnVnTGlzdGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogCi0gICAgYm9vbCBzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIHZvaWQgcmVtb3Zl
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsK
KyAgICBTdHJpbmcgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCB1bnNp
Z25lZCogYWN0dWFsTGluZU51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgYnJlYWtwb2ludElkKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAg
ICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKICAgICB2b2lk
IGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAxMmU3MjNkLi5hNTkzODU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKQEAgLTIxOCw4ICsyMTgsOCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAg
IFtkb21haW49RGVidWdnZXJdIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgICAgICBb
ZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogCi0gICAgICAg
IFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBTdHJpbmcgc291cmNlSUQs
IGluIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBpbiBib29sZWFuIGVuYWJsZWQsIGluIFN0cmlu
ZyBjb25kaXRpb24sIG91dCBib29sZWFuIHN1Y2Nlc3MsIG91dCB1bnNpZ25lZCBpbnQgYWN0dWFs
TGluZU51bWJlcik7Ci0gICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChpbiBTdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7Cisg
ICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBTdHJpbmcgc291
cmNlSUQsIGluIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBpbiBTdHJpbmcgY29uZGl0aW9uLCBp
biBib29sZWFuIGVuYWJsZWQsIG91dCBTdHJpbmcgYnJlYWtwb2ludElkLCBvdXQgdW5zaWduZWQg
aW50IGFjdHVhbExpbmVOdW1iZXIpOworICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoaW4gU3RyaW5nIGJyZWFrcG9pbnRJZCk7CiAKICAgICAgICAgW2RvbWFp
bj1JbnNwZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoaW4gT2JqZWN0IGJyZWFrcG9p
bnRzKTsgLy8gRklYTUU6IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIu
CiAKQEAgLTI0NSw3ICsyNDUsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVi
dWdnZXJdIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIGluIFN0cmlu
ZyBuZXdDb250ZW50LCBvdXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgU3RyaW5nIHJlc3VsdCwgb3V0
IFZhbHVlIG5ld0NhbGxGcmFtZXMpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGdl
dFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgc2NyaXB0U291cmNl
KTsKIAotICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgYnJlYWtwb2ludFJl
c3RvcmVkKG91dCBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgdXJsLCBvdXQgaW50IGxpbmUs
IG91dCBib29sZWFuIGVuYWJsZWQsIG91dCBTdHJpbmcgY29uZGl0aW9uKTsgLy8gRklYTUU6IHNo
b3VsZCBiZSBicmVha3BvaW50UmVzb2x2ZWQKKyAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVn
Z2VyXSB2b2lkIGJyZWFrcG9pbnRSZXNvbHZlZChvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCwgb3V0
IFN0cmluZyBzb3VyY2VJRCwgb3V0IHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBvdXQgU3RyaW5n
IGNvbmRpdGlvbiwgb3V0IGJvb2xlYW4gZW5hYmxlZCwgb3V0IHVuc2lnbmVkIGludCBvcmlnaW5h
bExpbmVOdW1iZXIpOwogCiAjaWYgZGVmaW5lZChFTkFCTEVfV09SS0VSUykgJiYgRU5BQkxFX1dP
UktFUlMKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRpZENyZWF0ZVdv
cmtlcihvdXQgbG9uZyBpZCwgb3V0IFN0cmluZyB1cmwsIG91dCBib29sZWFuIGlzU2hhcmVkKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggNzkxZTNhNi4uZWI0YzBl
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTQyLDcgKzQyLDYg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCi0jaW5jbHVkZSAi
U2NyaXB0QnJlYWtwb2ludC5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggMjMzMmQ4Ny4uYzg4MmMxNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1MCw3ICsxNTAsNiBAQCBJbnNwZWN0b3JD
b250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9hdHRh
Y2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKICAgICAsIG1faGFzWEhSQnJlYWtwb2ludFdpdGhF
bXB0eVVSTChmYWxzZSkKLSAgICAsIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3JlZChmYWxzZSkK
ICAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhp
cykpCiAjZW5kaWYKIHsKQEAgLTEzNDksNiArMTM0OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpCiAgICAgQVNTRVJU
KG1faW5zcGVjdGVkUGFnZSk7CiAKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgcmVzdG9yZVN0
aWNreUJyZWFrcG9pbnRzKCk7CiAKICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0VuYWJsZWQo
KTsKIH0KQEAgLTEzOTYsMTAgKzEzOTYsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
c3VtZSgpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFN0aWNreUJyZWFrcG9pbnRzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKICAgICBtX3N0YXRlLT5z
ZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OnN0aWNreUJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7
Ci0gICAgaWYgKCFtX3N0aWNreUJyZWFrcG9pbnRzUmVzdG9yZWQpIHsKLSAgICAgICAgcmVzdG9y
ZVN0aWNreUJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3Jl
ZCA9IHRydWU7Ci0gICAgfQogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVT
dGlja3lCcmVha3BvaW50cygpCkBAIC0xNDIwLDggKzE0MTYsOSBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpCiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnQpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGV2ZW50
TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSwgKCJFdmVudExpc3RlbmVyIikpOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSwgKCJYSFIi
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50VHlwZSwgKCJFdmVudExpc3RlbmVyIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBqYXZhU2NyaXB0QnJlYWtwb2ludFR5cGUsICgiSlMiKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIHhockJyZWFrcG9pbnRUeXBlLCAoIlhIUiIpKTsKIAogICAgIGlmICgh
YnJlYWtwb2ludCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyOSwxNyArMTQyNiwzMyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicgogICAgIGlmICghYnJlYWtwb2ludC0+Z2V0U3RyaW5nKCJ0eXBl
IiwgJnR5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBlbmFibGVkOwotICAgIGlmICgh
YnJlYWtwb2ludC0+Z2V0Qm9vbGVhbigiZW5hYmxlZCIsICZlbmFibGVkKSB8fCAhZW5hYmxlZCkK
KyAgICBpZiAoIWJyZWFrcG9pbnQtPmdldEJvb2xlYW4oImVuYWJsZWQiLCAmZW5hYmxlZCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb25kaXRpb24gPSBi
cmVha3BvaW50LT5nZXRPYmplY3QoImNvbmRpdGlvbiIpOwogICAgIGlmICghY29uZGl0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJl
YWtwb2ludFR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyQnJlYWtwb2ludFR5
cGUpIHsKKyAgICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBTdHJpbmcgZXZlbnROYW1lOwogICAgICAgICBpZiAoY29uZGl0aW9uLT5nZXRTdHJpbmcoImV2
ZW50TmFtZSIsICZldmVudE5hbWUpKQogICAgICAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnQoZXZlbnROYW1lKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0geGhyTmF0aXZlQnJlYWtw
b2ludFR5cGUpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gamF2YVNjcmlwdEJyZWFrcG9pbnRU
eXBlKSB7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRT
dHJpbmcoInVybCIsICZ1cmwpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkb3VibGUg
bGluZU51bWJlcjsKKyAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldE51bWJlcigibGluZU51bWJl
ciIsICZsaW5lTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGph
dmFTY3JpcHRDb25kaXRpb247CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJpbmcoImNv
bmRpdGlvbiIsICZqYXZhU2NyaXB0Q29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKKyAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
c2V0U3RpY2t5QnJlYWtwb2ludCh1cmwsIGxpbmVOdW1iZXIsIGphdmFTY3JpcHRDb25kaXRpb24s
IGVuYWJsZWQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50VHlwZSkgewor
ICAgICAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmlu
ZyB1cmw7CiAgICAgICAgIGlmIChjb25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCiAg
ICAgICAgICAgICBzZXRYSFJCcmVha3BvaW50KHVybCk7CkBAIC0xNTEzLDI2ICsxNTI2LDYgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLSNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpi
cmVha3BvaW50c1NldHRpbmdLZXkoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBrZXlQcmVmaXgsICgiYnJlYWtwb2ludHM6IikpOwotICAgIHJldHVybiBrZXlQcmVmaXggKyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjptZDVCYXNlMTYobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJh
bWUoKS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkKLXsKLSAgICBT
dHJpbmcganNvblN0cmluZzsKLSAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpLCAmanNvblN0cmluZyk7Ci0gICAgcmV0dXJuIEluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04oanNvblN0cmluZyk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykK
LXsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBi
cmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBQYXRoIHF1
YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewogICAgIFBhdGggcXVhZFBhdGg7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjU1MDkwYy4uZTU3MGM5
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzM1LDEzICsz
MzUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwogCi0jaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ7Ci0gICAgU3RyaW5nIGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpOwotICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGxvYWRCcmVha3BvaW50cygpOwotICAgIHZvaWQgc2F2ZUJyZWFrcG9p
bnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyk7Ci0jZW5kaWYKLQog
ICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50
OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVu
ZENsaWVudDsKQEAgLTM5NSw3ICszODgsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9YSFJC
cmVha3BvaW50czsKICAgICBib29sIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTDsKLSAg
ICBib29sIG1fc3RpY2t5QnJlYWtwb2ludHNSZXN0b3JlZDsKIAogICAgIE93blB0cjxJbnNwZWN0
b3JQcm9maWxlckFnZW50PiBtX3Byb2ZpbGVyQWdlbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMGIxOGIwYy4uMDA0Njk4OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM3
LDE2ICszNyw5IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgotI2luY2x1ZGUg
PHd0Zi9NRDUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcgZm9ybWF0QnJlYWtwb2ludElkKGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCi17Ci0gICAgcmV0dXJu
IG1ha2VTdHJpbmcoc291cmNlSUQsICc6JywgU3RyaW5nOjpudW1iZXIobGluZU51bWJlcikpOwot
fQotCiBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7CiAgICAgT3duUHRyPEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ+IGFnZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5z
cGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmQpKTsKQEAgLTYxLDcgKzU0LDYgQEAgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb24KICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250
cm9sbGVyKQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0
U3RhdGUoMCkKLSAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2phdmFT
Y3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKIHsKIH0KQEAgLTg3LDQ5ICs3OSwzNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYWN0aXZhdGVCcmVha3BvaW50cygpCiAgICAgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgYm9vbCogc3VjY2VzcywgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVy
KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTdGlja3lCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgYm9vbCBlbmFibGVkKQogewotICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChlbmFi
bGVkLCBjb25kaXRpb24pOwotICAgICpzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIsIGFjdHVh
bExpbmVOdW1iZXIpOwotICAgIGlmICghKnN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICBI
YXNoTWFwPFN0cmluZywgU2NyaXB0QnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGlmIChpdCA9PSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKQorICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KHVybCwgU2NyaXB0
QnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgQnJl
YWtwb2ludChjb25kaXRpb24sIGVuYWJsZWQpKTsKIAotICAgIFN0cmluZyB1cmwgPSBtX3NvdXJj
ZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICBVUkxU
b1NvdXJjZUlEc01hcDo6aXRlcmF0b3IgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9T
b3VyY2VJRHMuZmluZCh1cmwpOworICAgIGlmICh1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID09IG1f
dXJsVG9Tb3VyY2VJRHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBicmVh
a3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsICphY3R1YWxMaW5lTnVtYmVy
KTsKLSAgICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCAqYWN0dWFsTGlu
ZU51bWJlcik7Ci0KLSAgICBTdHJpbmcga2V5ID0gbWQ1QmFzZTE2KHVybCk7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQo
KSkKLSAgICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNldChrZXksIFNvdXJjZUJyZWFr
cG9pbnRzKCkpLmZpcnN0OwotICAgIGl0LT5zZWNvbmQuc2V0KCphY3R1YWxMaW5lTnVtYmVyLCBi
cmVha3BvaW50KTsKLSAgICBzYXZlQnJlYWtwb2ludHMoKTsKKyAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgc291cmNlSURzID0gdXJsVG9Tb3VyY2VJRHNJdGVyYXRvci0+c2Vjb25kOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlSURzLnNpemUoKTsgKytpKQorICAgICAgICByZXN0
b3JlQnJlYWtwb2ludChzb3VyY2VJRHNbaV0sIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxl
ZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQs
IFN0cmluZyogYnJlYWtwb2ludElkLCB1bnNpZ25lZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpCiB7
Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNl
SUQsIGxpbmVOdW1iZXIpOwotCi0gICAgU3RyaW5nIHVybCA9IG1fc291cmNlSURUb1VSTC5nZXQo
c291cmNlSUQpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgYnJlYWtwb2ludElkID0gZm9ybWF0QnJlYWtwb2ludElkKHNvdXJjZUlELCBsaW5l
TnVtYmVyKTsKLSAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+OjppdGVyYXRvciBtYXBwaW5n
SXQgPSBtX2JyZWFrcG9pbnRzTWFwcGluZy5maW5kKGJyZWFrcG9pbnRJZCk7Ci0gICAgaWYgKG1h
cHBpbmdJdCA9PSBtX2JyZWFrcG9pbnRzTWFwcGluZy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHVuc2lnbmVkIHN0aWNreUxpbmUgPSBtYXBwaW5nSXQtPnNlY29uZDsKLSAgICBtX2JyZWFr
cG9pbnRzTWFwcGluZy5yZW1vdmUobWFwcGluZ0l0KTsKKyAgICAqYnJlYWtwb2ludElkID0gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1i
ZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCwgYWN0dWFsTGluZU51bWJlcik7Cit9CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJl
YWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7Ci0gICAgaWYgKGl0ID09IG1fc3RpY2t5QnJl
YWtwb2ludHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3sKKyAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50
SWQpOworfQogCi0gICAgaXQtPnNlY29uZC5yZW1vdmUoc3RpY2t5TGluZSk7Ci0gICAgc2F2ZUJy
ZWFrcG9pbnRzKCk7Cit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3RvcmVCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQpCit7CisgICAgdW5zaWduZWQgYWN0dWFsTGlu
ZU51bWJlciA9IDA7CisgICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24s
IGVuYWJsZWQsICZhY3R1YWxMaW5lTnVtYmVyKTsKKyAgICBpZiAoIWJyZWFrcG9pbnRJZC5pc0Vt
cHR5KCkpCisgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChicmVha3BvaW50
SWQsIHNvdXJjZUlELCBhY3R1YWxMaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGxpbmVO
dW1iZXIpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVkaXRTY3JpcHRTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBib29s
KiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogbmV3Q2Fs
bEZyYW1lcykKQEAgLTIwMCwyOCArMTgwLDkgQEAgbG9uZyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpjbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCkKIHsKLSAgICBtX3NvdXJjZUlEVG9VUkwuY2xlYXIo
KTsKICAgICBtX3NjcmlwdElEVG9Db250ZW50LmNsZWFyKCk7CisgICAgbV91cmxUb1NvdXJjZUlE
cy5jbGVhcigpOwogICAgIG1fc3RpY2t5QnJlYWtwb2ludHMuY2xlYXIoKTsKLSAgICBtX2JyZWFr
cG9pbnRzTWFwcGluZy5jbGVhcigpOwotICAgIG1fYnJlYWtwb2ludHNMb2FkZWQgPSBmYWxzZTsK
LX0KLQotU3RyaW5nIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Om1kNUJhc2UxNihjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2
Nzg5YWJjZGVmIjsKLQotICAgIE1ENSBtZDU7Ci0gICAgbWQ1LmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzKCkpLCBzdHJpbmcubGVuZ3Ro
KCkgKiAyKTsKLSAgICBWZWN0b3I8dWludDhfdCwgMTY+IGRpZ2VzdDsKLSAgICBtZDUuY2hlY2tz
dW0oZGlnZXN0KTsKLQotICAgIFZlY3RvcjxjaGFyLCAzMj4gcmVzdWx0OwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMTY7ICsraSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKGRpZ2l0c1soZGln
ZXN0W2ldID4+IDQpICYgMHhmXSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGlnaXRzW2RpZ2Vz
dFtpXSAmIDB4Zl0pOwotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCkpOwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcygpCkBAIC0yMzYsMzkgKzE5Nyw2IEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmN1cnJlbnRD
YWxsRnJhbWVzKCkKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmxvYWRCcmVha3BvaW50cygpCi17Ci0gICAg
aWYgKG1fYnJlYWtwb2ludHNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2JyZWFrcG9p
bnRzTG9hZGVkID0gdHJ1ZTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkU2V0
dGluZyA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bG9hZEJyZWFrcG9pbnRzKCk7Ci0gICAgaWYg
KCFwYXJzZWRTZXR0aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludHMgPSBwYXJzZWRTZXR0aW5nLT5hc09iamVjdCgpOwotICAgIGlmICgh
YnJlYWtwb2ludHMpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy0+YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHMtPmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRz
Rm9yVVJMID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50
c0ZvclVSTCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBIYXNoTWFwPFN0cmluZywg
U291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBzb3VyY2VCcmVha3BvaW50c0l0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5zZXQoaXQtPmZpcnN0LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsK
LSAgICAgICAgU2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9y
T2JqZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAmc291cmNlQnJlYWtwb2ludHNJdC0+c2Vjb25kKTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2F2ZUJyZWFrcG9pbnRz
KCkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtw
b2ludHM+OjppdGVyYXRvciBpdChtX3N0aWNreUJyZWFrcG9pbnRzLmJlZ2luKCkpOyBpdCAhPSBt
X3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBicmVha3BvaW50c0ZvclVSTCA9IFNjcmlwdEJyZWFrcG9pbnQ6Omluc3BlY3Rv
ck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyhpdC0+c2Vjb25kKTsKLSAgICAgICAgYnJlYWtw
b2ludHMtPnNldE9iamVjdChpdC0+Zmlyc3QsIGJyZWFrcG9pbnRzRm9yVVJMKTsKLSAgICB9Ci0g
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zYXZlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpOwot
fQotCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMKIAogdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBTY3Jp
cHRXb3JsZFR5cGUgd29ybGRUeXBlKQpAQCAtMjgxLDIzICsyMDksMjAgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBj
b25zdCBTdHJpbmcKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbG9hZEJyZWFrcG9pbnRzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9p
bnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVy
bCkpOwotICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKSB7Ci0gICAgICAg
IGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9yIGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNv
bmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5zZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2lu
dEl0KSB7Ci0gICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IGJyZWFrcG9pbnRJdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBpZiAoZmlyc3RMaW5lID4gbGluZU51bWJlcikKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFjdHVhbExpbmVOdW1iZXIgPSAwOwot
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNl
dEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLCBsaW5lTnVtYmVyLCAm
YWN0dWFsTGluZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzdG9y
ZWQoc291cmNlSUQsIHVybCwgYWN0dWFsTGluZU51bWJlciwgYnJlYWtwb2ludEl0LT5zZWNvbmQu
ZW5hYmxlZCwgYnJlYWtwb2ludEl0LT5zZWNvbmQuY29uZGl0aW9uKTsKLSAgICAgICAgICAgIFN0
cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsIGFjdHVhbExp
bmVOdW1iZXIpOwotICAgICAgICAgICAgbV9icmVha3BvaW50c01hcHBpbmcuc2V0KGJyZWFrcG9p
bnRJZCwgbGluZU51bWJlcik7Ci0gICAgICAgIH0KKyAgICBVUkxUb1NvdXJjZUlEc01hcDo6aXRl
cmF0b3IgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9Tb3VyY2VJRHMuZmluZCh1cmwp
OworICAgIGlmICh1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID09IG1fdXJsVG9Tb3VyY2VJRHMuZW5k
KCkpCisgICAgICAgIHVybFRvU291cmNlSURzSXRlcmF0b3IgPSBtX3VybFRvU291cmNlSURzLnNl
dCh1cmwsIFZlY3RvcjxTdHJpbmc+KCkpLmZpcnN0OworICAgIHVybFRvU291cmNlSURzSXRlcmF0
b3ItPnNlY29uZC5hcHBlbmQoc291cmNlSUQpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFNjcmlw
dEJyZWFrcG9pbnRzPjo6aXRlcmF0b3Igc3RpY2t5QnJlYWtwb2ludHNJdGVyYXRvciA9IG1fc3Rp
Y2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGlmIChzdGlja3lCcmVha3BvaW50c0l0ZXJh
dG9yID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRzJiBicmVha3BvaW50cyA9IHN0aWNreUJyZWFrcG9pbnRz
SXRlcmF0b3ItPnNlY29uZDsKKyAgICBmb3IgKFNjcmlwdEJyZWFrcG9pbnRzOjpjb25zdF9pdGVy
YXRvciBpdCA9IGJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGNvbnN0IEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQgPSBpdC0+c2Vjb25k
OworICAgICAgICByZXN0b3JlQnJlYWtwb2ludChzb3VyY2VJRCwgaXQtPmZpcnN0LCBicmVha3Bv
aW50LmZpcnN0LCBicmVha3BvaW50LnNlY29uZCk7CiAgICAgfQotICAgIG1fc291cmNlSURUb1VS
TC5zZXQoc291cmNlSUQsIHVybCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRh
LCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBhZGM5
MjVhLi42ZTQ1ZTU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oCkBAIC0zMSwxMiArMzEsMTIgQEAKICNkZWZpbmUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudF9o
CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikK
LSNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsOCArNjEsOSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3Bv
aW50cygpOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
LCBib29sKiBzdWNjZXNzLCB1bnNpZ25lZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKTsKKyAgICB2b2lkIHNldFN0aWNreUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmws
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJs
ZWQpOworICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBT
dHJpbmcqIGJyZWFrcG9pbnRJZCwgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVyKTsKKyAg
ICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwogCiAg
ICAgdm9pZCBlZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0
cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpOwogICAgIHZvaWQgZ2V0U2NyaXB0U291cmNl
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKQEAgLTgxLDMw
ICs4MiwyNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsK
IAotICAgIHN0YXRpYyBTdHJpbmcgbWQ1QmFzZTE2KGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKLQog
cHJpdmF0ZToKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIq
LCBJbnNwZWN0b3JGcm9udGVuZCopOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y3VycmVudENhbGxGcmFtZXMoKTsKIAotICAgIHZvaWQgbG9hZEJyZWFrcG9pbnRzKCk7Ci0gICAg
dm9pZCBzYXZlQnJlYWtwb2ludHMoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBTY3JpcHRXb3JsZFR5cGUpOwogICAgIHZpcnR1YWwgdm9p
ZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRh
dGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29udGludWUoKTsKIAorICAgIHZvaWQgcmVzdG9yZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIGJvb2wgZW5hYmxlZCk7CisKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2lu
c3BlY3RvckNvbnRyb2xsZXI7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiAg
ICAgU2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zb3VyY2VJRFRvVVJMOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1f
c2NyaXB0SURUb0NvbnRlbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRz
PiBtX3N0aWNreUJyZWFrcG9pbnRzOwotICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gbV9i
cmVha3BvaW50c01hcHBpbmc7Ci0gICAgYm9vbCBtX2JyZWFrcG9pbnRzTG9hZGVkOwotICAgIHN0
YXRpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQ7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBVUkxUb1NvdXJj
ZUlEc01hcDsKKyAgICBVUkxUb1NvdXJjZUlEc01hcCBtX3VybFRvU291cmNlSURzOworICAgIHR5
cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gQnJlYWtwb2ludDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8dW5zaWduZWQsIEJyZWFrcG9pbnQ+IFNjcmlwdEJyZWFrcG9pbnRzOworICAgIEhhc2hN
YXA8U3RyaW5nLCBTY3JpcHRCcmVha3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrUHJvZ3JhbURldGFpbHM7CiAgICAgYm9vbCBt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50LmpzCmluZGV4IDMyYTZhM2QuLmRkMGNlMTIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzCkBAIC0yOSw4ICsyOSw5IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oZGVidWdnZXJN
b2RlbCwgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQgPSBmdW5jdGlvbihkZWJ1Z2dlck1vZGVsLCBicmVha3BvaW50SWQsIHNv
dXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKIHsKKyAgICB0aGlzLmlkID0g
YnJlYWtwb2ludElkOwogICAgIHRoaXMudXJsID0gdXJsOwogICAgIHRoaXMubGluZSA9IGxpbmU7
CiAgICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwpAQCAtNDEsMjcgKzQyLDEyIEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oZGVidWdnZXJNb2RlbCwgc291cmNlSUQsIHVy
bCwgbGluZSwgZW5hYmxlZCwKICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsID0gZGVidWdnZXJNb2Rl
bDsKIH0KIAotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQgPSBmdW5jdGlv
bihzb3VyY2VJRCwgbGluZSkKLXsKLSAgICByZXR1cm4gc291cmNlSUQgKyAiOiIgKyBsaW5lOwot
fQotCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGVuYWJs
ZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CiAgICAgfSwKIAotICAg
IHNldCBlbmFibGVkKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCA9PT0geCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9lbmFibGVkID0geDsKLSAgICAg
ICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fc2V0QnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1jaGFuZ2VkIik7Ci0g
ICAgfSwKLQogICAgIGdldCBzb3VyY2VUZXh0KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9zb3VyY2VUZXh0OwpAQCAtNzMsMjggKzU5LDExIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxh
YmVsLWNoYW5nZWQiKTsKICAgICB9LAogCi0gICAgZ2V0IGlkKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5qc0JyZWFrcG9pbnRJZCh0aGlzLnNvdXJjZUlE
LCB0aGlzLmxpbmUpOwotICAgIH0sCi0KICAgICBnZXQgY29uZGl0aW9uKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLl9jb25kaXRpb247CiAgICAgfSwKIAotICAgIHNldCBjb25kaXRpb24o
YykKLSAgICB7Ci0gICAgICAgIGMgPSBjIHx8ICIiOwotICAgICAgICBpZiAodGhpcy5fY29uZGl0
aW9uID09PSBjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2NvbmRpdGlv
biA9IGM7Ci0gICAgICAgIGlmICh0aGlzLmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9kZWJ1
Z2dlck1vZGVsLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKHRoaXMpOwotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygiY29uZGl0aW9uLWNoYW5nZWQiKTsKLSAgICB9LAotCiAg
ICAgZ2V0IGhpdCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faGl0OwpAQCAtMTM0LDcg
KzEwMyw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogICAgIHJl
bW92ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVC
cmVha3BvaW50KHRoaXMuc291cmNlSUQsIHRoaXMubGluZSk7CisgICAgICAgIHRoaXMuX2RlYnVn
Z2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludCh0aGlzLmlkKTsKICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92ZWQiKTsKICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0
ZW5lcnMoKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2RlYnVnZ2VyTW9kZWw7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKaW5kZXggNjA0ZGE2
MC4uMjFkOTA2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50TWFuYWdlci5qcwpAQCAtMzYsMTYgKzM2LDIwIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlciA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbcHJv
amVjdElkXSA9IHRoaXMuX3ZhbGlkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNbcHJvamVjdElk
XSk7CiAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdGlja3lCcmVha3BvaW50cyh0aGlzLl9zdGlj
a3lCcmVha3BvaW50cyk7CiAKLSAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAg
IHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3Jl
ZCA9IGZhbHNlOworICAgIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRzID0ge307CiAKICAgICBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3MuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZ3Mu
RXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0aGlzLl9wcm9qZWN0Q2hhbmdlZCwgdGhpcyk7CisgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9zY3JpcHRCcmVha3Bv
aW50QWRkZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1v
dmVkLCB0aGlzLl9zY3JpcHRCcmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJN
b2RlbC5FdmVudHMuRGVidWdnZXJQYXVzZWQsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlzKTsK
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQsIHRoaXMuX2RlYnVnZ2Vy
UmVzdW1lZCwgdGhpcyk7CiB9CiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRp
dmVCcmVha3BvaW50VHlwZXMgPSB7CitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzID0gewogICAgIERPTTogIkRPTSIsCisgICAgSlM6ICJKUyIsCiAgICAgRXZl
bnRMaXN0ZW5lcjogIkV2ZW50TGlzdGVuZXIiLAogICAgIFhIUjogIlhIUiIKIH0KQEAgLTcwLDcg
Kzc0LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3Jl
YXRlRE9NQnJlYWtwb2ludElkKG5vZGVJZCwgdHlwZSk7Ci0gICAgICAgIGlmIChicmVha3BvaW50
SWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCisgICAgICAgIGlmIChicmVha3BvaW50SWQg
aW4gdGhpcy5fYnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQobm9kZSwgdHlwZSk7
CkBAIC05MCw3ICs5NCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgX2NyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50OiBmdW5jdGlvbihldmVu
dE5hbWUsIGVuYWJsZWQsIHJlc3RvcmVkKQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnRJ
ZCA9IHRoaXMuX2NyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50SWQoZXZlbnROYW1lKTsKLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKKyAgICAg
ICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoZXZlbnROYW1lKTsKQEAgLTEwMCw2ICsxMDQsMzggQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50
cy5FdmVudExpc3RlbmVyQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50LnZpZXcpOwogICAgIH0s
CiAKKyAgICBfY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCwgbGluZU51
bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCByZXN0b3JlZCkKKyAgICB7CisgICAgICAgIHZhciBi
cmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludElkKHVybCwgbGlu
ZU51bWJlcik7CisgICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50KHVybCwgbGluZU51bWJlciwgY29uZGl0aW9u
KTsKKyAgICAgICAgdGhpcy5fc2V0TmF0aXZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGJyZWFr
cG9pbnQsIGVuYWJsZWQsIHJlc3RvcmVkKTsKKyAgICB9LAorCisgICAgX3NjcmlwdEJyZWFrcG9p
bnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0QnJlYWtw
b2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIAorICAgICAgICBpZiAoIXNjcmlwdEJyZWFrcG9p
bnQudXJsKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghc2NyaXB0QnJlYWtw
b2ludC5yZXN0b3JlZCkKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3Bv
aW50KHNjcmlwdEJyZWFrcG9pbnQudXJsLCBzY3JpcHRCcmVha3BvaW50Lm9yaWdpbmFsTGluZU51
bWJlciwgc2NyaXB0QnJlYWtwb2ludC5jb25kaXRpb24sIHNjcmlwdEJyZWFrcG9pbnQuZW5hYmxl
ZCwgZmFsc2UpOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlSmF2YVNj
cmlwdEJyZWFrcG9pbnRJZChzY3JpcHRCcmVha3BvaW50LnVybCwgc2NyaXB0QnJlYWtwb2ludC5v
cmlnaW5hbExpbmVOdW1iZXIpOworICAgICAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50c1tzY3Jp
cHRCcmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnRJZDsKKyAgICB9LAorCisgICAgX3NjcmlwdEJy
ZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBzY3Jp
cHRCcmVha3BvaW50SWQgPSBldmVudC5kYXRhOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0g
dGhpcy5fc2NyaXB0QnJlYWtwb2ludHNbc2NyaXB0QnJlYWtwb2ludElkXTsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRzW3NjcmlwdEJyZWFrcG9pbnRJZF07CisgICAgICAg
IGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpCisgICAgICAgICAgICB0aGlz
Ll9yZW1vdmVOYXRpdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgfSwKKwogICAgIGNy
ZWF0ZVhIUkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCkKICAgICB7CiAgICAgICAgIHRoaXMuX2Ny
ZWF0ZVhIUkJyZWFrcG9pbnQodXJsLCB0cnVlLCBmYWxzZSk7CkBAIC0xMDgsNyArMTQ0LDcgQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfY3JlYXRl
WEhSQnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBlbmFibGVkLCByZXN0b3JlZCkKICAgICB7CiAg
ICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVYSFJCcmVha3BvaW50SWQodXJs
KTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykK
KyAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3Iu
WEhSQnJlYWtwb2ludCh1cmwpOwpAQCAtMTIwLDcgKzE1Niw3IEBAIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0TmF0aXZlQnJlYWtwb2ludDog
ZnVuY3Rpb24oYnJlYWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBicmVh
a3BvaW50OworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJlYWtw
b2ludDsKICAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5hYmxlZDsKICAgICAgICAgaWYg
KHJlc3RvcmVkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDcgKzE2Nyw3IEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0TmF0aXZl
QnJlYWtwb2ludEVuYWJsZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5hYmxlZCkKICAgICB7
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtw
b2ludElkXTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVh
a3BvaW50SWRdOwogICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkID09PSBlbmFibGVkKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZW5hYmxlZCkKQEAgLTE0NCwyMyArMTgw
LDI2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAg
ICBfcmVtb3ZlTmF0aXZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludElkKQogICAgIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3Bv
aW50SWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFr
cG9pbnRJZF07CiAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCiAgICAgICAgICAgICBi
cmVha3BvaW50Ll9kaXNhYmxlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVha3Bv
aW50c1ticmVha3BvaW50SWRdOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludElkXTsKICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CiAgICAgfSwKIAog
ICAgIGJyZWFrcG9pbnRWaWV3Rm9yRXZlbnREYXRhOiBmdW5jdGlvbihldmVudERhdGEpCiAgICAg
ewogICAgICAgICB2YXIgYnJlYWtwb2ludElkOwotICAgICAgICBpZiAoZXZlbnREYXRhLmJyZWFr
cG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtw
b2ludFR5cGVzLkRPTSkKKyAgICAgICAgaWYgKGV2ZW50RGF0YS5icmVha3BvaW50VHlwZSA9PT0g
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5ET00pCiAgICAg
ICAgICAgICBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVET01CcmVha3BvaW50SWQoZXZlbnRE
YXRhLm5vZGVJZCwgZXZlbnREYXRhLnR5cGUpOwotICAgICAgICBlbHNlIGlmIChldmVudERhdGEu
YnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVC
cmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgZWxzZSBpZiAoZXZlbnREYXRh
LmJyZWFrcG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLkV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgICBicmVha3BvaW50SWQgPSB0aGlz
Ll9jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElkKGV2ZW50RGF0YS5ldmVudE5hbWUpOwot
ICAgICAgICBlbHNlIGlmIChldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuWEhSKQorICAgICAgICBl
bHNlIGlmIChldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuWEhSKQogICAgICAgICAgICAgYnJlYWtwb2ludElk
ID0gdGhpcy5fY3JlYXRlWEhSQnJlYWtwb2ludElkKGV2ZW50RGF0YS5icmVha3BvaW50VVJMKTsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3Bv
aW50SWRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOwogICAgICAgICBp
ZiAoYnJlYWtwb2ludCkKICAgICAgICAgICAgIHJldHVybiBicmVha3BvaW50LnZpZXc7CiAgICAg
fSwKQEAgLTE5MSwxNiArMjMwLDE5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUgPSB7CiAKICAgICBfcHJvamVjdENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3JlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl9zY3JpcHRCcmVha3BvaW50cyA9IHt9OwogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkKTsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0
aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8
fCBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAgICAg
ICAgICAgIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgICAgIGlm
IChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVh
a3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVF
dmVudExpc3RlbmVyQnJlYWtwb2ludChicmVha3BvaW50LmNvbmRpdGlvbi5ldmVudE5hbWUsIGJy
ZWFrcG9pbnQuZW5hYmxlZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50
LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50
VHlwZXMuWEhSKQorICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkpTKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0
aW9uLnVybCwgYnJlYWtwb2ludC5jb25kaXRpb24ubGluZU51bWJlciwgYnJlYWtwb2ludC5jb25k
aXRpb24uY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQsIHRydWUpOworICAgICAgICAgICAg
ZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuQnJlYWtwb2ludFR5cGVzLlhIUikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVYSFJC
cmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0aW9uLnVybCwgYnJlYWtwb2ludC5lbmFibGVkLCB0
cnVlKTsKICAgICAgICAgfQogICAgIH0sCkBAIC0yMTUsNyArMjU3LDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgICAgICBp
ZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgdmFyIG5vZGVJZCA9IHBhdGhUb05vZGVJZFticmVha3BvaW50LmNvbmRpdGlvbi5w
YXRoXTsKICAgICAgICAgICAgICAgICBpZiAobm9kZUlkKQpAQCAtMjI5LDcgKzI3MSw3IEBAIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBw
YXRoVG9Ob2RlSWQgPSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9IDA7CiAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgIGlmIChicmVha3Bv
aW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHZhciBw
YXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBhdGg7CiAgICAgICAgICAgICBpZiAocGF0
aCBpbiBwYXRoVG9Ob2RlSWQpCkBAIC0yNDUsOCArMjg3LDggQEAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfc2F2ZUJyZWFrcG9pbnRzOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgZm9yICh2
YXIgYnJlYWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07
CisgICAgICAgIGZvciAodmFyIGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykgewor
ICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50
SWRdOwogICAgICAgICAgICAgdmFyIHBlcnNpc3RlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludC5f
c2VyaWFsaXplVG9KU09OKCk7CiAgICAgICAgICAgICBwZXJzaXN0ZW50QnJlYWtwb2ludC5lbmFi
bGVkID0gYnJlYWtwb2ludC5lbmFibGVkOwogICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaChw
ZXJzaXN0ZW50QnJlYWtwb2ludCk7CkBAIC0yNTQsNyArMjk2LDcgQEAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLl9kb21CcmVh
a3BvaW50c1Jlc3RvcmVkKSB7CiAgICAgICAgICAgICB2YXIgc3RpY2t5QnJlYWtwb2ludHMgPSB0
aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8
fCBbXTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RpY2t5QnJlYWtwb2ludHMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RpY2t5QnJlYWtwb2ludHNbaV0u
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRU
eXBlcy5ET00pCisgICAgICAgICAgICAgICAgaWYgKHN0aWNreUJyZWFrcG9pbnRzW2ldLnR5cGUg
PT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuRE9NKQog
ICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHN0aWNreUJyZWFrcG9pbnRzW2ld
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjc0LDE1ICszMTYsMTkgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIHZhciBpZCA9IGJyZWFrcG9pbnQudHlwZSArICI6IjsKICAg
ICAgICAgICAgIHZhciBjb25kaXRpb24gPSBicmVha3BvaW50LmNvbmRpdGlvbjsKLSAgICAgICAg
ICAgIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRE9NKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVz
LkRPTSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLnBhdGggIT09ICJz
dHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24udHlwZSAhPT0gIm51bWJlciIpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlkICs9IGNvbmRpdGlvbi5wYXRo
ICsgIjoiICsgY29uZGl0aW9uLnR5cGU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9p
bnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9p
bnRUeXBlcy5FdmVudExpc3RlbmVyKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9p
bnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBl
cy5FdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24u
ZXZlbnROYW1lICE9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgaWQgKz0gY29uZGl0aW9uLmV2ZW50TmFtZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUikgeworICAgICAgICAgICAgfSBlbHNlIGlmIChi
cmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3Bv
aW50VHlwZXMuSlMpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51cmwg
IT09ICJzdHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24ubGluZU51bWJlciAhPT0gIm51bWJlciIg
fHwgdHlwZW9mIGNvbmRpdGlvbi5jb25kaXRpb24gIT09ICJzdHJpbmciKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZCArPSBjb25kaXRpb24udXJsICsg
IjoiICsgY29uZGl0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFr
cG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRU
eXBlcy5YSFIpIHsKICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51cmwgIT09
ICJzdHJpbmciKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBpZCArPSBjb25kaXRpb24udXJsOwpAQCAtMzAwLDYgKzM0NiwxMSBAQCBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gImRvbToiICsg
bm9kZUlkICsgIjoiICsgdHlwZTsKICAgICB9LAogCisgICAgX2NyZWF0ZUphdmFTY3JpcHRCcmVh
a3BvaW50SWQ6IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAianM6IiArIHVybCArICI6IiArIGxpbmVOdW1iZXI7CisgICAgfSwKKwogICAgIF9jcmVhdGVF
dmVudExpc3RlbmVyQnJlYWtwb2ludElkOiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gImV2ZW50TGlzdG5lcjoiICsgZXZlbnROYW1lOwpAQCAtMzMzLDExICszODQs
MzQgQEAgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAgX3Nl
cmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTTsKKyAg
ICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dFR5cGVzLkRPTTsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7IHBh
dGg6IHRoaXMuX3BhdGgsIHR5cGU6IHRoaXMuX3R5cGUgfSB9OwogICAgIH0KIH0KIAorV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBj
b25kaXRpb24pCit7CisgICAgdGhpcy5fdXJsID0gdXJsOworICAgIHRoaXMuX2xpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyOworICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbjsKK30KKworV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKKyAgICBfZW5hYmxl
OiBmdW5jdGlvbigpCisgICAgeworICAgIH0sCisKKyAgICBfZGlzYWJsZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludFR5cGVzLkpTOworICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBjb25kaXRpb246IHsg
dXJsOiB0aGlzLl91cmwsIGxpbmVOdW1iZXI6IHRoaXMuX2xpbmVOdW1iZXIsIGNvbmRpdGlvbjog
dGhpcy5fY29uZGl0aW9uIH0gfTsKKyAgICB9Cit9CisKIFdlYkluc3BlY3Rvci5FdmVudExpc3Rl
bmVyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkKIHsKICAgICB0aGlzLl9ldmVudE5h
bWUgPSBldmVudE5hbWU7CkBAIC0zNTYsNyArNDMwLDcgQEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXJCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogICAgIF9zZXJpYWxpemVUb0pTT046IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5FdmVudExpc3RlbmVyOworICAgICAgICB2
YXIgdHlwZSA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMu
RXZlbnRMaXN0ZW5lcjsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7
IGV2ZW50TmFtZTogdGhpcy5fZXZlbnROYW1lIH0gfTsKICAgICB9CiB9CkBAIC0zNzksNyArNDUz
LDcgQEAgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAgX3Nl
cmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUjsKKyAg
ICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dFR5cGVzLlhIUjsKICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7IHVy
bDogdGhpcy5fdXJsIH0gfTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlck1vZGVsLmpzCmluZGV4IDMxYzc1ZTUuLjVhYjBlMmQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC0zMiw3ICszMiw5IEBAIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsID0gZnVuY3Rpb24oKQogewogICAgIEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyKCJEZWJ1Z2dlciIsIHRoaXMpOwogCisgICAg
dGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKKyAgICB0
aGlzLl9zb3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZCA9IHt9OwogICAgIHRoaXMuX3Njcmlw
dHMgPSB7fTsKIH0KIApAQCAtNDIsMzUgKzQ0LDY4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1v
ZGVsLkV2ZW50cyA9IHsKICAgICBQYXJzZWRTY3JpcHRTb3VyY2U6ICJwYXJzZWQtc2NyaXB0LXNv
dXJjZSIsCiAgICAgRmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZTogImZhaWxlZC10by1wYXJzZS1z
Y3JpcHQtc291cmNlIiwKICAgICBCcmVha3BvaW50QWRkZWQ6ICJicmVha3BvaW50LWFkZGVkIiwK
KyAgICBCcmVha3BvaW50UmVtb3ZlZDogImJyZWFrcG9pbnQtcmVtb3ZlZCIKIH0KIAogV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewotICAgIHNldE9uZVRpbWVCcmVha3Bv
aW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKKyAgICBjb250aW51ZVRvTGluZTogZnVuY3Rp
b24oc291cmNlSUQsIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgdW5kZWZpbmVkLCBs
aW5lLCB0cnVlLCB1bmRlZmluZWQpOwotICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9vbmVU
aW1lQnJlYWtwb2ludCkKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtw
b2ludCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJyZWFr
cG9pbnQubGluZSk7Ci0gICAgICAgIHRoaXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtwb2lu
dDsKLSAgICAgICAgLy8gRklYTUUoNDA2NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwgYmUg
cGVyc2lzdGVkIGluIGluc3BlY3RvciBzZXR0aW5ncyBpZiBub3QgaGl0LgotICAgICAgICB0aGlz
Ll9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQsIHRydWUpOworICAgICAgICBmdW5j
dGlvbiBkaWRTZXRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYWN0dWFsTGluZU51bWJlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKHRoaXMuZmluZEJyZWFrcG9pbnQoc291cmNlSUQsIGFj
dHVhbExpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1v
dmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCJfY29udGludWVUb0xpbmVCcmVha3BvaW50SWQi
IGluIHRoaXMpCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3Bv
aW50KHRoaXMuX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkKTsKKyAgICAgICAgICAgIHRoaXMu
X2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkID0gYnJlYWtwb2ludElkOworICAgICAgICB9Cisg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJl
ciwgIiIsIHRydWUsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgICAgIGlmICh0
aGlzLl9wYXVzZWQpCisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlc3VtZSgpOwogICAg
IH0sCiAKLSAgICByZW1vdmVPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24oKQorICAgIHNldEJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRp
b24pCiAgICAgewotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpIHsKLSAgICAg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9vbmVUaW1lQnJl
YWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSk7Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CisgICAgICAgIGZ1bmN0aW9uIGRp
ZFNldEJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBhY3R1YWxMaW5lTnVtYmVyKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludElkKQorICAgICAgICAgICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRTZXRPbkJhY2tlbmQoYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgYWN0dWFsTGluZU51
bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBsaW5lTnVtYmVyLCBmYWxzZSk7CiAgICAgICAgIH0K
KyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVt
YmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Cisg
ICAgfSwKKworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKKyAg
ICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50
SWQpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9p
bnRJZF07CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOwor
ICAgICAgICBkZWxldGUgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWRbdGhpcy5f
ZW5jb2RlU291cmNlSURBbmRMaW5lKGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGlu
ZSldOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIGJyZWFrcG9pbnRJZCk7CiAg
ICAgfSwKIAotICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBlbmFi
bGVkLCBjb25kaXRpb24pCisgICAgYnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihicmVha3Bv
aW50SWQsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIG9yaWdpbmFs
TGluZU51bWJlcikKICAgICB7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTZXRPbkJhY2tlbmQo
YnJlYWtwb2ludElkLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBv
cmlnaW5hbExpbmVOdW1iZXIsIHRydWUpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFNldE9u
QmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29u
ZGl0aW9uLCBlbmFibGVkLCBvcmlnaW5hbExpbmVOdW1iZXIsIHJlc3RvcmVkKQorICAgIHsKKyAg
ICAgICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGluZShz
b3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIGlmIChzb3VyY2VJREFuZExpbmUgaW4gdGhp
cy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWQpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKICAgICAgICAgdmFyIHVybCA9IHRoaXMuX3NjcmlwdHNbc291cmNl
SURdLnNvdXJjZVVSTDsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVha3Bv
aW50KHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Ci0gICAgICAgIGlm
IChicmVha3BvaW50KQotICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2VuZChi
cmVha3BvaW50KTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQodGhpcywgYnJlYWtwb2ludElkLCBzb3VyY2VJRCwgdXJsLCBsaW5lTnVtYmVyLCBl
bmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBicmVha3BvaW50LnJlc3RvcmVkID0gcmVzdG9y
ZWQ7CisgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luYWxMaW5lTnVtYmVyID0gb3JpZ2luYWxMaW5l
TnVtYmVyOworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJlYWtw
b2ludDsKKyAgICAgICAgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWRbc291cmNl
SURBbmRMaW5lXSA9IGJyZWFrcG9pbnRJZDsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRl
ZCwgYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIHF1ZXJ5QnJlYWtwb2ludHM6IGZ1bmN0aW9u
KGZpbHRlcikKQEAgLTg2LDU1ICsxMjEsMjUgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwu
cHJvdG90eXBlID0gewogCiAgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBs
aW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LmpzQnJlYWtwb2ludElkKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICAg
ICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGluZShzb3Vy
Y2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9zb3Vy
Y2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZFtzb3VyY2VJREFuZExpbmVdOwogICAgICAgICByZXR1
cm4gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKICAgICB9LAogCisgICAgX2VuY29k
ZVNvdXJjZUlEQW5kTGluZTogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gc291cmNlSUQgKyAiOiIgKyBsaW5lTnVtYmVyOworICAgIH0sCisKICAg
ICByZXNldDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7
CiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fc291cmNlSURBbmRMaW5lVG9CcmVha3Bv
aW50SWQgPSB7fTsKICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IHt9OwogICAgIH0sCiAKLSAgICBf
c2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29u
ZGl0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9u
KTsKLSAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYgKHRo
aXMuX29uZVRpbWVCcmVha3BvaW50LmlkID09IGJyZWFrcG9pbnQuaWQpKQotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwotICAgICAgICB0aGlzLl9icmVha3BvaW50
c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZl
bnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludCk7Ci0gICAgICAgIHJldHVy
biBicmVha3BvaW50OwotICAgIH0sCi0KLSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50LnRh
cmdldC5pZF07Ci0gICAgfSwKLQotICAgIF9zZXRCcmVha3BvaW50T25CYWNrZW5kOiBmdW5jdGlv
bihicmVha3BvaW50LCBpc09uZVRpbWUpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBkaWRTZXRC
cmVha3BvaW50KHN1Y2Nlc3MsIGxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdWNj
ZXNzICYmIGxpbmUgPT0gYnJlYWtwb2ludC5saW5lKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGlmIChpc09uZVRpbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vz
cykKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSA9IGxp
bmU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fb25lVGltZUJyZWFrcG9pbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJ
RCwgYnJlYWtwb2ludC51cmwsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5j
b25kaXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZFNldEJyZWFrcG9p
bnQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQogICAgIHNjcmlwdEZvclNvdXJjZUlEOiBmdW5jdGlv
bihzb3VyY2VJRCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRzW3NvdXJjZUlE
XTsKQEAgLTE1OCwxMyArMTYzLDEzIEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3Rv
dHlwZSA9IHsKIAogICAgIC8vIEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBhcmUgSW5zcGVjdG9yQmFj
a2VuZCBub3RpZmljYXRpb24gaGFuZGxlcnMuCiAKLSAgICBicmVha3BvaW50UmVzdG9yZWQ6IGZ1
bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKTsKLSAgICB9LAotCiAgICAgcGF1c2VkU2NyaXB0OiBmdW5jdGlvbihkZXRhaWxz
KQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCJfY29u
dGludWVUb0xpbmVCcmVha3BvaW50SWQiIGluIHRoaXMpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9jb250aW51ZVRvTGluZUJyZWFrcG9pbnRJ
ZCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGludWVUb0xpbmVCcmVha3BvaW50SWQ7
CisgICAgICAgIH0KICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCBkZXRhaWxzKTsKIAog
ICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckV2
ZW50VHlwZXMuSmF2YVNjcmlwdFBhdXNlIHx8IGRldGFpbHMuZXZlbnRUeXBlID09PSBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLk5hdGl2ZUJyZWFrcG9pbnQpCkBAIC0xNzksNiArMTg0
LDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewogCiAgICAgcmVz
dW1lZFNjcmlwdDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFs
c2U7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQpOwogCiAgICAgICAgIGlmICghdGhp
cy5fbGFzdEhpdEJyZWFrcG9pbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcwppbmRleCA3Mzg3OTY0Li41NmZhY2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTI3MSwxMyArMjcxLDYgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FkZFNjcmlwdFRv
RmlsZXNNZW51KHNjcmlwdCk7CiAgICAgfSwKIAotICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlv
bihzb3VyY2VJRCwgbGluZSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLnNldE9uZVRpbWVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lKTsKLSAgICAgICAgaWYgKHRo
aXMucGF1c2VkKQotICAgICAgICAgICAgdGhpcy5fdG9nZ2xlUGF1c2UoKTsKLSAgICB9LAotCiAg
ICAgX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkOiBmdW5jdGlvbihlKQogICAgIHsKICAgICAgICAg
dmFyIHJlc291cmNlID0gZS50YXJnZXQ7CkBAIC0zNzIsNyArMzY1LDYgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgY2FsbEZyYW1l
cyA9IGV2ZW50LmRhdGEuY2FsbEZyYW1lczsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNb2RlbC5yZW1vdmVPbmVUaW1lQnJlYWtwb2ludCgpOwogICAgICAgICB0aGlzLl9wYXVzZWQg
PSB0cnVlOwogICAgICAgICB0aGlzLl93YWl0aW5nVG9QYXVzZSA9IGZhbHNlOwogICAgICAgICB0
aGlzLl9zdGVwcGluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJj
ZUZyYW1lLmpzCmluZGV4IDRiZWFkOGYuLmZhODQ0MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTQ4Miw3ICs0ODIsNyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
X2ZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdh
bnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCi0g
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
QWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5fc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMsIGxpbmVOdW1i
ZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRCcmVha3BvaW50LmJpbmQodGhpcywg
bGluZU51bWJlciwgIiIsIHRydWUpKTsKIAogICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29uZGl0
aW9uYWxCcmVha3BvaW50KCkKICAgICAgICAgICAgIHsKQEAgLTQ5MSw3ICs0OTEsNyBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24obGluZU51
bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIHRy
dWUsIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRoaXMu
X2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGxpbmVOdW1iZXIsICIiLCBkaWRFZGl0QnJlYWtwb2lu
dENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKICAgICAgICAgICAgIH0KQEAgLTUwMywxNiArNTAzLDIz
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24oY29t
bWl0dGVkLCBjb25kaXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5jb25k
aXRpb24gPSBjb25kaXRpb247CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQubGluZSwgYnJlYWtw
b2ludC5lbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9u
KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRFZGl0QnJlYWtwb2ludENvbmRp
dGlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24obGlu
ZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9u
LmJpbmQodGhpcykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgQnJlYWtwb2ludOKApiIpLCBlZGl0
QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNl
dEJyZWFrcG9pbnRFbmFibGVkKGVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3Bv
aW50KGJyZWFrcG9pbnQubGluZSwgZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlz
YWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxz
ZTsgfSk7CisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkRpc2FibGUgQnJlYWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5i
aW5kKHRoaXMsIGZhbHNlKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBCcmVha3Bv
aW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSB0cnVlOyB9KTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
RW5hYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0aGlzLCB0cnVl
KSk7CiAgICAgICAgIH0KICAgICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7CiAgICAgfSwK
QEAgLTUzNSwxMiArNTQyLDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChsaW5l
TnVtYmVyKTsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIGJyZWFrcG9p
bnQucmVtb3ZlKCk7CiAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpCi0gICAgICAgICAg
ICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWJyZWFrcG9pbnQuZW5hYmxlZDsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlbW92ZSgpOworICAgICAgICAg
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lLCAhYnJlYWtwb2ludC5l
bmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdGhpcy5fc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHRoaXMuX3Nl
dEJyZWFrcG9pbnQobGluZU51bWJlciwgdHJ1ZSwgIiIpOwogICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwogICAgIH0sCiAKQEAgLTc3NSw3ICs3ODEsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zb3Vy
Y2VJREZvckxpbmUobGluZU51bWJlcik7CiAgICAgICAgIGlmICghc291cmNlSUQpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jb250aW51
ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmNvbnRpbnVlVG9MaW5lKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKICAgICB9LAog
CiAgICAgX2VkaXRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBuZXdDb250ZW50LCBjYW5jZWxF
ZGl0aW5nQ2FsbGJhY2spCkBAIC04MjMsMTIgKzgyOSwxMiBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2NyaXB0LnJlc291cmNlLnNldENvbnRl
bnQobmV3Q29udGVudCwgcmV2ZXJ0RWRpdExpbmVDYWxsYmFjayk7CiAgICAgfSwKIAotICAgIF9z
ZXRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb25kaXRpb24pCisgICAgX3NldEJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7
CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVy
KTsKICAgICAgICAgaWYgKCFzb3VyY2VJRCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51
bWJlciwgdHJ1ZSwgY29uZGl0aW9uKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9u
KTsKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNB
Y3RpdmF0ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xl
QnJlYWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwK
</data>
<flag name="review"
          id="68169"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>