<?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>53789</bug_id>
          
          <creation_ts>2011-02-04 10:45:56 -0800</creation_ts>
          <short_desc>Web Inspector: [refacotring] merge InspectorAgent::willSendRequest() into InspectorResourceAgnet</short_desc>
          <delta_ts>2011-02-08 07:07:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>345610</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-04 10:45:56 -0800</bug_when>
    <thetext>- Merge InspectorAgent::willSendRequest() into InspectorResourceAgent::willSendRequest()
- Move extra request handling to InspectorResourceAgent
- Perform UserAgent override via InspectorInstrumentation method
- Remove redudant stuff from InspectorState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345623</commentid>
    <comment_count>1</comment_count>
      <attachid>81247</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-04 11:09:36 -0800</bug_when>
    <thetext>Created attachment 81247
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345640</commentid>
    <comment_count>2</comment_count>
      <attachid>81247</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-04 11:31:54 -0800</bug_when>
    <thetext>Comment on attachment 81247
patch

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

I think you can nuke even more code here (all these cycles, etc.) Plus we need good way of defining default values.

&gt; Source/WebCore/inspector/InspectorAgent.h:270
&gt;      void setUserAgentOverride(const String&amp; userAgent);

I am in doubts on whether this one should got to the network domain or not.

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:386
&gt; +    ia-&gt;applyUserAgentOverride(userAgent);

ia -&gt; inspectorAgent. ic confuses you, but we do not abbreviate in other places.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:606
&gt; +    if (InspectorAgent* ic = inspectorAgentWithFrontendForFrame(frame))

inspectorAgent. I know, there has been a massive rename InspectorController-&gt;InspectorAgent and these ics are now all over the place. We should clean them up.

&gt; Source/WebCore/inspector/InspectorState.cpp:-42
&gt; -    registerBoolean(userInitiatedProfiling, false);

How do I make property value &apos;true&apos; (or &apos;5&apos;) by default?

&gt; Source/WebCore/inspector/InspectorState.cpp:55
&gt;          ASSERT(id &gt; 0 &amp;&amp; id &lt; lastPropertyId);

There is no persistence for these - they are only managed at runtime. This assert does not make much sense (as InspectorPropertyId itself).

&gt; Source/WebCore/inspector/InspectorState.h:-8
&gt; - * 1.  Redistributions of source code must retain the above copyright

You should not do things like this post-factum.

&gt; Source/WebCore/inspector/InspectorState.h:60
&gt;          lastPropertyId

We don&apos;t seem to iterate over values anymore, so lastPropertyId is of no use, right? Why not to use const char[] names for these instead of InspectorPropertyId class? Then entire store would be a simple InspectorObject and cookie serialization would be trivial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346621</commentid>
    <comment_count>3</comment_count>
      <attachid>81481</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-07 09:28:29 -0800</bug_when>
    <thetext>Created attachment 81481
patch

- Changed inspector state to use string property names instead of enum
- Moved state property names definitions to agents that need them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346624</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-07 09:30:34 -0800</bug_when>
    <thetext>Attachment 81481 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorDebuggerAgent.cpp:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:54:  The parameter name &quot;inspectorAgent&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorAgent.cpp:133:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp:65:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/inspector/InspectorConsoleAgent.cpp:53:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/inspector/InspectorResourceAgent.cpp:71:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 6 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346629</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-07 09:38:15 -0800</bug_when>
    <thetext>Attachment 81481 did not build on chromium:
Build output: http://queues.webkit.org/results/7702898</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346631</commentid>
    <comment_count>6</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-07 09:40:00 -0800</bug_when>
    <thetext>Attachment 81481 did not build on gtk:
Build output: http://queues.webkit.org/results/7700918</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346642</commentid>
    <comment_count>7</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-07 10:16:20 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 81247 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81247&amp;action=review
&gt; 
&gt; I think you can nuke even more code here (all these cycles, etc.) Plus we need good way of defining default values.

I&apos;d rather take care of default values when/if we ever need them -- otherwise that would be a dead code. The registerXXX methods I dropped were literally were almost like setXXX methods (except that latter used to check for the property being present) -- so we could always had default values set in the constructor. Alternatively, we could have an optional default value in getXXX methods, e.g. getLong(const String&amp; propertyName, long defaultValue = 0);
 
&gt; &gt; Source/WebCore/inspector/InspectorAgent.h:270
&gt; &gt;      void setUserAgentOverride(const String&amp; userAgent);
&gt; 
&gt; I am in doubts on whether this one should got to the network domain or not.

Technically, we apply it within FrameLoader, but I thing logically it&apos;s more general than network, since it also affects the value returned by navigator.userAgent -- so I&apos;d propose to leave it on InspectorAgent.

&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:386
&gt; &gt; +    ia-&gt;applyUserAgentOverride(userAgent);
&gt; 
&gt; ia -&gt; inspectorAgent. ic confuses you, but we do not abbreviate in other places.

done.

&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.h:606
&gt; &gt; +    if (InspectorAgent* ic = inspectorAgentWithFrontendForFrame(frame))
&gt; 
&gt; inspectorAgent. I know, there has been a massive rename InspectorController-&gt;InspectorAgent and these ics are now all over the place. We should clean them up.
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorState.cpp:-42
&gt; &gt; -    registerBoolean(userInitiatedProfiling, false);
&gt; 
&gt; How do I make property value &apos;true&apos; (or &apos;5&apos;) by default?

Do we need this now? I&apos;d rather implement it on demand.

&gt; &gt; Source/WebCore/inspector/InspectorState.cpp:55
&gt; &gt;          ASSERT(id &gt; 0 &amp;&amp; id &lt; lastPropertyId);
&gt; 
&gt; There is no persistence for these - they are only managed at runtime. This assert does not make much sense (as InspectorPropertyId itself).

Gone with the numeric ids.

&gt; &gt; Source/WebCore/inspector/InspectorState.h:-8
&gt; &gt; - * 1.  Redistributions of source code must retain the above copyright
&gt; 
&gt; You should not do things like this post-factum.

I&apos;m just fixing obviously inconsistent copyright -- this had only Google on top (copyright section) but Apple in endorsement/no warranty sections.

&gt; &gt; Source/WebCore/inspector/InspectorState.h:60
&gt; &gt;          lastPropertyId
&gt; 
&gt; We don&apos;t seem to iterate over values anymore, so lastPropertyId is of no use, right? Why not to use const char[] names for these instead of InspectorPropertyId class? Then entire store would be a simple InspectorObject and cookie serialization would be trivial.

Done -- and I also moved property name definitions to the agents that use them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346644</commentid>
    <comment_count>8</comment_count>
      <attachid>81486</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-07 10:17:06 -0800</bug_when>
    <thetext>Created attachment 81486
patch

- Fixed style &amp; gcc errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346646</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-07 10:19:52 -0800</bug_when>
    <thetext>Attachment 81486 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:54:  The parameter name &quot;inspectorAgent&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346652</commentid>
    <comment_count>10</comment_count>
      <attachid>81486</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-07 10:24:02 -0800</bug_when>
    <thetext>Comment on attachment 81486
patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=53789

Web Inspector: bug title
http://bugs...

Description

*

Agnet -&gt; Agent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346658</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-07 10:32:02 -0800</bug_when>
    <thetext>Attachment 81481 did not build on mac:
Build output: http://queues.webkit.org/results/7709051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347295</commentid>
    <comment_count>12</comment_count>
      <attachid>81625</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-08 05:48:12 -0800</bug_when>
    <thetext>Created attachment 81625
landed patch

A variation of the previous patch landed (moved clearing of breakpoints from inspector state from factories to agent constructors)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347296</commentid>
    <comment_count>13</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-08 05:49:27 -0800</bug_when>
    <thetext>Manually committed r77925: http://trac.webkit.org/changeset/77925</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347341</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 07:07:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77925 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81247</attachid>
            <date>2011-02-04 11:09:36 -0800</date>
            <delta_ts>2011-02-07 09:28:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>extra-headers-refactoring.diff</filename>
            <type>text/plain</type>
            <size>22495</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyN2NhYmNjLi4wZjcwNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTEtMDItMDQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBbcmVmYWNvdHJpbmddIG1lcmdlIEluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3Qo
KSBpbnRvIEluc3BlY3RvclJlc291cmNlQWduZXQKKyAgICAgICAgIC0gcGVyZm9ybSBVc2VyQWdl
bnQgb3ZlcnJpZGUgdmlhIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgorICAgICAgICAgLSBtb3Zl
IGFkZGluZyBleHRyYSByZXF1ZXN0IGhlYWRlcnMgdG8gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudAor
ICAgICAgICAgLSBzaW1wbGlmaWVkIHRoaW5ncyBpbiBJbnNwZWN0b3JTdGF0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODkKKworICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZy
b250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjphcHBseVVzZXJBZ2Vu
dE92ZXJyaWRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFJlcXVlc3RJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5
VXNlckFnZW50T3ZlcnJpZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNl
dEV4dHJhSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnVwZGF0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3RhdGU6OmdldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9u
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0YXRlOjpzZXRPYmplY3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXNlckFnZW50KToKKwogMjAxMS0wMi0w
NCAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsCmluZGV4IGMyNDI3NTMuLjk2MWEzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCkBAIC02Miw3ICs2Miw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2RvbWFp
bj1JbnNwZWN0b3JdIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KCk7CiAgICAgICAgIFtub3RpZnks
IGRvbWFpbj1JbnNwZWN0b3JdIHZvaWQgdXBkYXRlRm9jdXNlZE5vZGUob3V0IGxvbmcgbm9kZUlk
KTsKIAotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRFeHRyYUhlYWRlcnMoaW4g
T2JqZWN0IGhlYWRlcnMpOwogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRVc2Vy
QWdlbnRPdmVycmlkZShpbiBTdHJpbmcgdXNlckFnZW50KTsKIAogICAgICAgICBbZG9tYWluPUlu
c3BlY3Rvcl0gdm9pZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQgU3RyaW5nIGNv
b2tpZXNTdHJpbmcpOwpAQCAtMTAyLDYgKzEwMSw3IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgICAg
ICBbZG9tYWluPU5ldHdvcmtdIHZvaWQgY2FjaGVkUmVzb3VyY2VzKG91dCBPYmplY3QgcmVzb3Vy
Y2VzKTsKICAgICAgICAgW2RvbWFpbj1OZXR3b3JrXSB2b2lkIHJlc291cmNlQ29udGVudChpbiB1
bnNpZ25lZCBsb25nIGZyYW1lSWQsIGluIFN0cmluZyB1cmwsIGluIGJvb2xlYW4gYmFzZTY0RW5j
b2RlLCBvdXQgU3RyaW5nIGNvbnRlbnQpOworICAgICAgICBbZG9tYWluPU5ldHdvcmtdIHZvaWQg
c2V0RXh0cmFIZWFkZXJzKGluIE9iamVjdCBoZWFkZXJzKTsKIAogICAgICAgICBbbm90aWZ5LCBk
b21haW49TmV0d29ya10gdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudChvdXQgdW5zaWduZWQg
bG9uZyBmcmFtZUlkKTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPU5ldHdvcmtdIHZvaWQgaWRl
bnRpZmllckZvckluaXRpYWxSZXF1ZXN0KG91dCBsb25nIGlkZW50aWZpZXIsIG91dCBTdHJpbmcg
dXJsLCBvdXQgT2JqZWN0IGxvYWRlciwgb3V0IFZhbHVlIGNhbGxTdGFjayk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCBkYWYwNTVkLi4xOTQ0MmFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTQ2
NCw3ICs0NjQsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaXNjb25uZWN0RnJvbnRlbmQoKQog
CiAgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICBtX3RpbWVsaW5lQWdl
bnQuY2xlYXIoKTsKLSAgICBtX2V4dHJhSGVhZGVycy5jbGVhcigpOwogICAgIG1fdXNlckFnZW50
T3ZlcnJpZGUgPSAiIjsKIH0KIApAQCAtNjg3LDI3ICs2ODYsMTAgQEAgdm9pZCBJbnNwZWN0b3JB
Z2VudDo6c2V0VXNlckFnZW50T3ZlcnJpZGUoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiAgICAg
bV91c2VyQWdlbnRPdmVycmlkZSA9IHVzZXJBZ2VudDsKIH0KIAotU3RyaW5nIEluc3BlY3RvckFn
ZW50Ojp1c2VyQWdlbnRPdmVycmlkZSgpIGNvbnN0Cit2b2lkIEluc3BlY3RvckFnZW50OjphcHBs
eVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyogdXNlckFnZW50KSBjb25zdAogewotICAgIHJldHVy
biBtX3VzZXJBZ2VudE92ZXJyaWRlOwotfQotCi12b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsU2Vu
ZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIGlmICghZW5hYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkgewotICAgICAgICAvLyBP
bmx5IGVuYWJsZSBsb2FkIHRpbWluZyBhbmQgcmF3IGhlYWRlcnMgaWYgZnJvbnQtZW5kIGlzIGF0
dGFjaGVkLCBhcyBvdGhlcndpc2Ugd2UgbWF5IHByb2R1Y2Ugb3ZlcmhlYWQuCi0gICAgICAgIHJl
cXVlc3Quc2V0UmVwb3J0TG9hZFRpbWluZyh0cnVlKTsKLSAgICAgICAgcmVxdWVzdC5zZXRSZXBv
cnRSYXdIZWFkZXJzKHRydWUpOwotCi0gICAgICAgIGlmIChtX2V4dHJhSGVhZGVycykgewotICAg
ICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9leHRyYUhlYWRl
cnMtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZXh0cmFIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW1fdXNlckFnZW50T3ZlcnJpZGUuaXNFbXB0
eSgpKQorICAgICAgICAqdXNlckFnZW50ID0gbV91c2VyQWdlbnRPdmVycmlkZTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKQEAgLTEzODAsMTggKzEz
NjIsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQYWdlKCkKICAgICBtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVz
aCgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpzZXRFeHRyYUhlYWRlcnMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcnMpCi17Ci0gICAgbV9leHRyYUhlYWRlcnMgPSBhZG9w
dFB0cihuZXcgSFRUUEhlYWRlck1hcCgpKTsKLSAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwotICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+YXNTdHJpbmco
JnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX2V4dHJhSGVhZGVycy0+
YWRkKGl0LT5maXJzdCwgdmFsdWUpOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFnZW50LmgKaW5kZXggNDdkMDcwMC4uODFkNWYxZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTI2NywxMSArMjY3LDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0
YXRlKTsKICAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYganNvblJlc3VsdCk7CiAKLSAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24gQVBJCi0gICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0K
ICAgICB2b2lkIHNldFVzZXJBZ2VudE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsK
LSAgICBTdHJpbmcgdXNlckFnZW50T3ZlcnJpZGUoKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5VXNl
ckFnZW50T3ZlcnJpZGUoU3RyaW5nKiB1c2VyQWdlbnQpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IHZvaWQgcHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCk7CkBAIC0zNTEsNyArMzQ4LDYgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IG1fYnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1fcHJv
ZmlsZXJBZ2VudDsKICNlbmRpZgotICAgIE93blB0cjxIVFRQSGVhZGVyTWFwPiBtX2V4dHJhSGVh
ZGVyczsKICAgICBTdHJpbmcgbV91c2VyQWdlbnRPdmVycmlkZTsKICNpZiBFTkFCTEUoV09SS0VS
UykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIFJlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gPiBXb3JrZXJzTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBkYmI0NzJhLi42MjliM2Y1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcApAQCAtMzgxLDkgKzM4MSwxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaQog
ICAgICAgICByZXNvdXJjZUFnZW50LT5pZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoaWRlbnRp
ZmllciwgcmVxdWVzdC51cmwoKSwgbG9hZGVyKTsKIH0KIAordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3BlY3RvckFnZW50KiBpYSwg
U3RyaW5nKiB1c2VyQWdlbnQpCit7CisgICAgaWEtPmFwcGx5VXNlckFnZW50T3ZlcnJpZGUodXNl
ckFnZW50KTsKK30KKwogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVx
dWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqIGljLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkKIHsKLSAgICBpYy0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QpOwogICAgIGlmIChJ
bnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFn
ZW50KGljKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFNlbmRSZXNvdXJjZVJlcXVlc3Qo
aWRlbnRpZmllciwgcmVxdWVzdCk7CiAgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJl
c291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaWMpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IDAyZjVk
M2YuLjM0MTUzZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjYWxjdWxhdGVTdHlsZShE
b2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2FsY3VsYXRlU3R5bGUoY29uc3QgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKKyAgICBzdGF0aWMgdm9pZCBhcHBseVVz
ZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiwgU3RyaW5nKik7CiAgICAgc3RhdGljIHZvaWQgaWRlbnRp
ZmllckZvckluaXRpYWxSZXF1ZXN0KEZyYW1lKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgIHN0YXRpYyB2b2lk
IHdpbGxTZW5kUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAg
ICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWQoUGFnZSosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcik7CkBAIC0yMjAsNiArMjIxLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkaWRQYWludEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAg
ICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjYWxjdWxhdGVT
dHlsZUltcGwoSW5zcGVjdG9yQWdlbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWNhbGN1bGF0
ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKKworICAg
IHN0YXRpYyB2b2lkIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3BlY3RvckFnZW50Kiwg
U3RyaW5nKik7CiAgICAgc3RhdGljIHZvaWQgaWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0SW1w
bChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJl
cXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsK
ICAgICBzdGF0aWMgdm9pZCBtYXJrUmVzb3VyY2VBc0NhY2hlZEltcGwoSW5zcGVjdG9yQWdlbnQq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpAQCAtNTk3LDYgKzYwMCwxNCBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dChGcmFtZSogZnJhbWUsCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwgU3RyaW5nKiB1
c2VyQWdlbnQpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zcGVjdG9yQWdl
bnQqIGljID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCisgICAg
ICAgIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKGljLCB1c2VyQWdlbnQpOworI2VuZGlmCit9
CisKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0
KEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRleCBkNmU0Y2NmLi42MTY5OWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMDIsOCArMzAyLDI4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6aWRlbnRpZmll
ckZvckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllCiAgICAgbV9mcm9udGVu
ZC0+aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHVybC5zdHJpbmcoKSwg
bG9hZGVyT2JqZWN0LCBjYWxsU3RhY2tWYWx1ZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFk
ZXJzKQoreworICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6ZXh0cmFSZXF1
ZXN0SGVhZGVycywgaGVhZGVycyk7Cit9CisKKwogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycyA9IG1fc3RhdGUtPmdldE9iamVj
dChJbnNwZWN0b3JTdGF0ZTo6ZXh0cmFSZXF1ZXN0SGVhZGVycyk7CisKKyAgICBpZiAoaGVhZGVy
cykgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRl
cnMtPmVuZCgpOworICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBoZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUp
KQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwg
dmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVxdWVzdC5zZXRSZXBvcnRMb2FkVGlt
aW5nKHRydWUpOworICAgIHJlcXVlc3Quc2V0UmVwb3J0UmF3SGVhZGVycyh0cnVlKTsKKwogICAg
IG1fZnJvbnRlbmQtPndpbGxTZW5kUmVxdWVzdChpZGVudGlmaWVyLCBjdXJyZW50VGltZSgpLCBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgYnVpbGRPYmplY3RGb3JSZXNv
dXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKaW5kZXggNmMyZGYyNC4uMjNk
YmVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5oCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCBmcm9t
IGZyb250ZW5kIAogICAgIHZvaWQgY2FjaGVkUmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+Kik7CiAgICAgdm9pZCByZXNvdXJjZUNvbnRlbnQodW5zaWduZWQgbG9uZyBmcmFtZUlELCBj
b25zdCBTdHJpbmcmIHVybCwgYm9vbCBiYXNlNjRFbmNvZGUsIFN0cmluZyogY29udGVudCk7Cisg
ICAgdm9pZCBzZXRFeHRyYUhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKIAog
cHJpdmF0ZToKICAgICBJbnNwZWN0b3JSZXNvdXJjZUFnZW50KFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
clN0YXRlKiwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmluZGV4IDc3OWQ0NjRkLi5mNjQ2YTBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTcgKzM4LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogSW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogewotICAgIC8vIFB1
cmUgcmVsb2FkIHN0YXRlCi0gICAgcmVnaXN0ZXJCb29sZWFuKHVzZXJJbml0aWF0ZWRQcm9maWxp
bmcsIGZhbHNlKTsKLSAgICByZWdpc3RlckJvb2xlYW4odGltZWxpbmVQcm9maWxlckVuYWJsZWQs
IGZhbHNlKTsKLSAgICByZWdpc3RlckJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZSwgZmFsc2UpOwot
ICAgIHJlZ2lzdGVyQm9vbGVhbihkZWJ1Z2dlckVuYWJsZWQsIGZhbHNlKTsKLSAgICByZWdpc3Rl
ckJvb2xlYW4ocHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7Ci0gICAgcmVnaXN0ZXJPYmplY3QoamF2
YVNjcmlwdEJyZWFrcG9pbnRzKTsKLSAgICByZWdpc3Rlck9iamVjdChicm93c2VyQnJlYWtwb2lu
dHMpOwotICAgIHJlZ2lzdGVyQm9vbGVhbihjb25zb2xlTWVzc2FnZXNFbmFibGVkLCBmYWxzZSk7
Ci0gICAgcmVnaXN0ZXJCb29sZWFuKG1vbml0b3JpbmdYSFIsIGZhbHNlKTsKLSAgICByZWdpc3Rl
ckJvb2xlYW4ocmVzb3VyY2VBZ2VudEVuYWJsZWQsIGZhbHNlKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUoY29uc3QgU3RyaW5nJiBqc29uKQpA
QCAtNjQsMTAgKzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0
b3JDb29raWUoY29uc3QgU3RyaW5nJiBqc29uKQogICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpp
dGVyYXRvciBpID0ganNvbk9iamVjdC0+YmVnaW4oKTsgaSAhPSBqc29uT2JqZWN0LT5lbmQoKTsg
KytpKSB7CiAgICAgICAgIEluc3BlY3RvclByb3BlcnR5SWQgaWQgPSAoSW5zcGVjdG9yUHJvcGVy
dHlJZClpLT5maXJzdC50b0ludCgpOwogICAgICAgICBBU1NFUlQoaWQgPiAwICYmIGlkIDwgbGFz
dFByb3BlcnR5SWQpOwotICAgICAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaiA9IG1fcHJvcGVy
dGllcy5maW5kKGlkKTsKLSAgICAgICAgQVNTRVJUKGogIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsK
LSAgICAgICAgQVNTRVJUKGotPnNlY29uZC5tX3ZhbHVlLT50eXBlKCkgPT0gaS0+c2Vjb25kLT50
eXBlKCkpOwotICAgICAgICBqLT5zZWNvbmQubV92YWx1ZSA9IGktPnNlY29uZDsKKyAgICAgICAg
bV9wcm9wZXJ0aWVzLnNldChpZCwgaS0+c2Vjb25kKTsKICAgICB9CiB9CiAKQEAgLTc1LDg2ICs2
MSw0OSBAQCB2b2lkIEluc3BlY3RvclN0YXRlOjp1cGRhdGVDb29raWUoKQogewogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGNvb2tpZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgZm9yIChQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5iZWdp
bigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBjb29raWVPYmplY3Qt
PnNldFZhbHVlKFN0cmluZzo6bnVtYmVyKGktPmZpcnN0KSwgaS0+c2Vjb25kLm1fdmFsdWUpOwor
ICAgICAgICBjb29raWVPYmplY3QtPnNldFZhbHVlKFN0cmluZzo6bnVtYmVyKGktPmZpcnN0KSwg
aS0+c2Vjb25kKTsKICAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29v
a2llT2JqZWN0LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3RhdGU6OnNl
dFZhbHVlKEluc3BlY3RvclByb3BlcnR5SWQgaWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQogewotICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZp
bmQoaWQpOwotICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7Ci0gICAgaS0+c2Vj
b25kLm1fdmFsdWUgPSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMuc2V0KGlkLCB2YWx1ZSk7CiAg
ICAgdXBkYXRlQ29va2llKCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yU3RhdGU6OmdldEJvb2xlYW4o
SW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKIHsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9
IG1fcHJvcGVydGllcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5k
KCkpOworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy5maW5kKGlk
KTsKICAgICBib29sIHZhbHVlID0gZmFsc2U7Ci0gICAgaS0+c2Vjb25kLm1fdmFsdWUtPmFzQm9v
bGVhbigmdmFsdWUpOworICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpCisgICAgICAg
IGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAog
U3RyaW5nIEluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCkK
IHsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5maW5kKGlkKTsK
LSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOworICAgIFByb3BlcnR5TWFwOjpp
dGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy5maW5kKGlkKTsKICAgICBTdHJpbmcgdmFsdWU7Ci0g
ICAgaS0+c2Vjb25kLm1fdmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CisgICAgaWYgKGl0ICE9IG1f
cHJvcGVydGllcy5lbmQoKSkKKyAgICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmcoSW5z
cGVjdG9yUHJvcGVydHlJZCBpZCkKIHsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1f
cHJvcGVydGllcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkp
OworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy5maW5kKGlkKTsK
ICAgICBsb25nIHZhbHVlID0gMDsKLSAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNOdW1iZXIoJnZh
bHVlKTsKKyAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKQorICAgICAgICBpdC0+c2Vj
b25kLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoSW5zcGVjdG9yUHJv
cGVydHlJZCBpZCkKIHsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGll
cy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOwotICAgIHJl
dHVybiBpLT5zZWNvbmQubV92YWx1ZS0+YXNPYmplY3QoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JT
dGF0ZTo6c2V0T2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgaWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKLXsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJv
cGVydGllcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOwot
ICAgIFByb3BlcnR5JiBwcm9wZXJ0eSA9IGktPnNlY29uZDsKLSAgICBwcm9wZXJ0eS5tX3ZhbHVl
ID0gdmFsdWU7Ci0gICAgdXBkYXRlQ29va2llKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6
OnJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFs
dWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRl
KEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpKTsKLX0KLQotdm9pZCBJbnNwZWN0
b3JTdGF0ZTo6cmVnaXN0ZXJTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5zZXQocHJvcGVydHlJZCwg
UHJvcGVydHk6OmNyZWF0ZShJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJv
cGVydHlJZCwgbG9uZyB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQs
IFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFs
dWUpKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyT2JqZWN0KEluc3BlY3Rv
clByb3BlcnR5SWQgcHJvcGVydHlJZCkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5
SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSkpOwotfQotCi1J
bnNwZWN0b3JTdGF0ZTo6UHJvcGVydHkgSW5zcGVjdG9yU3RhdGU6OlByb3BlcnR5OjpjcmVhdGUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi17Ci0gICAgUHJvcGVydHkgcHJvcGVy
dHk7Ci0gICAgcHJvcGVydHkubV92YWx1ZSA9IHZhbHVlOwotICAgIHJldHVybiBwcm9wZXJ0eTsK
KyAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Cisg
ICAgaWYgKGl0ID09IG1fcHJvcGVydGllcy5lbmQoKSkKKyAgICAgICAgaXQgPSBtX3Byb3BlcnRp
ZXMuc2V0KGlkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKS5maXJzdDsKKyAgICByZXR1cm4g
aXQtPnNlY29uZC0+YXNPYmplY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaAppbmRleCA5MGEyYzE3Li5iMjY5
YzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaApAQCAtMSwy
OSArMSwzMSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEluc3BlY3RvclN0YXRlX2gK
QEAgLTU0LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBqYXZhU2NyaXB0QnJlYWtwb2ludHMs
CiAgICAgICAgIGJyb3dzZXJCcmVha3BvaW50cywKICAgICAgICAgcmVzb3VyY2VBZ2VudEVuYWJs
ZWQsCisgICAgICAgIGV4dHJhUmVxdWVzdEhlYWRlcnMsCiAgICAgICAgIGxhc3RQcm9wZXJ0eUlk
CiAgICAgfTsKIApAQCAtNjksMTcgKzcyLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJvb2xl
YW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlKSB7IHNldFZhbHVl
KHByb3BlcnR5SWQsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOyB9CiAgICAg
dm9pZCBzZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvclN0cmluZzo6Y3JlYXRl
KHZhbHVlKSk7IH0KICAgICB2b2lkIHNldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0
eUlkLCBsb25nIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvckJhc2ljVmFs
dWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSk7IH0KLSAgICB2b2lkIHNldE9iamVjdChJbnNwZWN0
b3JQcm9wZXJ0eUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpOworICAgIHZv
aWQgc2V0T2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIHZhbHVlKTsgfQog
CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQ29va2llKCk7CiAgICAgdm9pZCBzZXRWYWx1ZShJ
bnNwZWN0b3JQcm9wZXJ0eUlkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CiAKLSAgICBz
dHJ1Y3QgUHJvcGVydHkgewotICAgICAgICBzdGF0aWMgUHJvcGVydHkgY3JlYXRlKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBtX3ZhbHVlOwotICAgIH07Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFByb3BlcnR5PiBQ
cm9wZXJ0eU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiA+IFByb3BlcnR5TWFwOwogICAgIFByb3BlcnR5TWFwIG1fcHJvcGVydGllczsKIAogICAg
IHZvaWQgcmVnaXN0ZXJCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQsIGJvb2wgdmFsdWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNzFmNjI1Yy4uZjU3NWM3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yNTU1LDE0ICsyNTU1LDkg
QEAgaW50IEZyYW1lTG9hZGVyOjpudW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1
cnNlKSBjb25zdAogCiBTdHJpbmcgRnJhbWVMb2FkZXI6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1
cmwpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9
IG1fZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBTdHJpbmcgdXNlckFnZW50T3ZlcnJpZGUgPSBw
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnVzZXJBZ2VudE92ZXJyaWRlKCk7Ci0gICAgICAg
IGlmICghdXNlckFnZW50T3ZlcnJpZGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHVz
ZXJBZ2VudE92ZXJyaWRlOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBtX2NsaWVudC0+dXNl
ckFnZW50KHVybCk7CisgICAgU3RyaW5nIHVzZXJBZ2VudCA9IG1fY2xpZW50LT51c2VyQWdlbnQo
dXJsKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJp
ZGUobV9mcmFtZSwgJnVzZXJBZ2VudCk7CisgICAgcmV0dXJuIHVzZXJBZ2VudDsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlcjo6aGFuZGxlZE9ubG9hZEV2ZW50cygpCg==
</data>
<flag name="review"
          id="72812"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81481</attachid>
            <date>2011-02-07 09:28:29 -0800</date>
            <delta_ts>2011-02-07 10:17:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>inspector-state--refactoring.diff</filename>
            <type>text/plain</type>
            <size>43551</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NzFjOTc3Li5lMDU3YTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTEtMDItMDQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBbcmVmYWNvdHJpbmddIG1lcmdlIEluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3Qo
KSBpbnRvIEluc3BlY3RvclJlc291cmNlQWduZXQKKyAgICAgICAgIC0gcGVyZm9ybSBVc2VyQWdl
bnQgb3ZlcnJpZGUgdmlhIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgorICAgICAgICAgLSBtb3Zl
IGFkZGluZyBleHRyYSByZXF1ZXN0IGhlYWRlcnMgdG8gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudAor
ICAgICAgICAgLSBzaW1wbGlmaWVkIHRoaW5ncyBpbiBJbnNwZWN0b3JTdGF0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODkKKworICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZy
b250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjphcHBseVVzZXJBZ2Vu
dE92ZXJyaWRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFJlcXVlc3RJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5
VXNlckFnZW50T3ZlcnJpZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNl
dEV4dHJhSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnVwZGF0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3RhdGU6OmdldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9u
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0YXRlOjpzZXRPYmplY3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXNlckFnZW50KToKKwogMjAxMS0wMi0w
NyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlk
bAppbmRleCBjMjQyNzUzLi45NjFhMzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmlkbApAQCAtNjIsNyArNjIsNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49
SW5zcGVjdG9yXSB2b2lkIGhpZGVGcmFtZUhpZ2hsaWdodCgpOwogICAgICAgICBbbm90aWZ5LCBk
b21haW49SW5zcGVjdG9yXSB2b2lkIHVwZGF0ZUZvY3VzZWROb2RlKG91dCBsb25nIG5vZGVJZCk7
CiAKLSAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXh0cmFIZWFkZXJzKGluIE9i
amVjdCBoZWFkZXJzKTsKICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0VXNlckFn
ZW50T3ZlcnJpZGUoaW4gU3RyaW5nIHVzZXJBZ2VudCk7CiAKICAgICAgICAgW2RvbWFpbj1JbnNw
ZWN0b3JdIHZvaWQgZ2V0Q29va2llcyhvdXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBjb29r
aWVzU3RyaW5nKTsKQEAgLTEwMiw2ICsxMDEsNyBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAg
W2RvbWFpbj1OZXR3b3JrXSB2b2lkIGNhY2hlZFJlc291cmNlcyhvdXQgT2JqZWN0IHJlc291cmNl
cyk7CiAgICAgICAgIFtkb21haW49TmV0d29ya10gdm9pZCByZXNvdXJjZUNvbnRlbnQoaW4gdW5z
aWduZWQgbG9uZyBmcmFtZUlkLCBpbiBTdHJpbmcgdXJsLCBpbiBib29sZWFuIGJhc2U2NEVuY29k
ZSwgb3V0IFN0cmluZyBjb250ZW50KTsKKyAgICAgICAgW2RvbWFpbj1OZXR3b3JrXSB2b2lkIHNl
dEV4dHJhSGVhZGVycyhpbiBPYmplY3QgaGVhZGVycyk7CiAKICAgICAgICAgW25vdGlmeSwgZG9t
YWluPU5ldHdvcmtdIHZvaWQgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQob3V0IHVuc2lnbmVkIGxv
bmcgZnJhbWVJZCk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1OZXR3b3JrXSB2b2lkIGlkZW50
aWZpZXJGb3JJbml0aWFsUmVxdWVzdChvdXQgbG9uZyBpZGVudGlmaWVyLCBvdXQgU3RyaW5nIHVy
bCwgb3V0IE9iamVjdCBsb2FkZXIsIG91dCBWYWx1ZSBjYWxsU3RhY2spOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggZGFmMDU1ZC4uZmVkNTcyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC0xMjks
NiArMTI5LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorbmFtZXNwYWNlIEluc3BlY3RvckFnZW50U3RhdGUgeworICAgIHN0YXRpYyBjb25zdCBjaGFy
IHNlYXJjaGluZ0Zvck5vZGVbXSA9ICJzZWFyY2hpbmdGb3JOb2RlIjsKKyAgICBzdGF0aWMgY29u
c3QgY2hhciB0aW1lbGluZVByb2ZpbGVyRW5hYmxlZFtdID0gInRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciB1c2VySW5pdGlhdGVkUHJvZmlsaW5nW10gPSAi
dXNlckluaXRpYXRlZFByb2ZpbGluZyI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZGVidWdnZXJF
bmFibGVkW10gPSAiZGVidWdnZXJFbmFibGVkIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBwcm9m
aWxlckVuYWJsZWRbXSA9ICJwcm9maWxlckVuYWJsZWQiOworfQorCiBjb25zdCBjaGFyKiBjb25z
dCBJbnNwZWN0b3JBZ2VudDo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBjaGFy
KiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOwogY29uc3Qg
Y2hhciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OlNjcmlwdHNQYW5lbCA9ICJzY3JpcHRzIjsKQEAg
LTE5Myw3ICsyMDEsNyBAQCBib29sIEluc3BlY3RvckFnZW50OjplbmFibGVkKCkgY29uc3QKIAog
Ym9vbCBJbnNwZWN0b3JBZ2VudDo6c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zv
ck5vZGUpOworICAgIHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3Rh
dGU6OnNlYXJjaGluZ0Zvck5vZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3Jl
SW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29r
aWUpCkBAIC0yMTAsMTMgKzIxOCwxMyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5z
cGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdAogCiAgICAg
bV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzdG9yZShtX2luc3Bl
Y3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0KCkpOwogCi0gICAgaWYgKG1f
c3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVk
KSkKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjp0aW1l
bGluZVByb2ZpbGVyRW5hYmxlZCkpCiAgICAgICAgIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwog
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgcmVzdG9yZURlYnVnZ2VyKGZh
bHNlKTsKICAgICByZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCk7Ci0g
ICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQ
cm9maWxpbmcpKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3Rh
dGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcpKQogICAgICAgICBzdGFydFVzZXJJbml0aWF0ZWRQ
cm9maWxpbmcoKTsKICNlbmRpZgogfQpAQCAtMzQ2LDcgKzM1NCw3IEBAIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChzZWFy
Y2hpbmdGb3JOb2RlSW5QYWdlKCkgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
c3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUsIGVuYWJs
ZWQpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6c2VhcmNo
aW5nRm9yTm9kZSwgZW5hYmxlZCk7CiAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICBoaWRlSGln
aGxpZ2h0KCk7CiB9CkBAIC00NjQsNyArNDcyLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlz
Y29ubmVjdEZyb250ZW5kKCkKIAogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7
CiAgICAgbV90aW1lbGluZUFnZW50LmNsZWFyKCk7Ci0gICAgbV9leHRyYUhlYWRlcnMuY2xlYXIo
KTsKICAgICBtX3VzZXJBZ2VudE92ZXJyaWRlID0gIiI7CiB9CiAKQEAgLTU2Nyw3ICs1NzQsNyBA
QCB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlRGVidWdnZXIoYm9vbCBlcmFzZVN0aWNreUJy
ZWFrcG9pbnRzKQogewogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0
ZTo6ZGVidWdnZXJFbmFibGVkKSkKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0
b3JBZ2VudFN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQpKQogICAgICAgICBlbmFibGVEZWJ1Z2dlcihl
cmFzZVN0aWNreUJyZWFrcG9pbnRzKTsKICNlbmRpZgogfQpAQCAtNTc3LDcgKzU4NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24g
YWN0aW9uKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0
KCkpOwotICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9maWxl
ckVuYWJsZWQpKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3Rh
dGU6OnByb2ZpbGVyRW5hYmxlZCkpCiAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAgICAgaWYg
KGFjdGlvbiA9PSBQcm9maWxlclJlc3RvcmVSZXNldEFnZW50KQogICAgICAgICBtX3Byb2ZpbGVy
QWdlbnQtPnJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwpAQCAtNjg3LDI3ICs2OTQsMTAgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c2V0VXNlckFnZW50T3ZlcnJpZGUoY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQpCiAgICAgbV91c2VyQWdlbnRPdmVycmlkZSA9IHVzZXJBZ2VudDsKIH0KIAotU3RyaW5n
IEluc3BlY3RvckFnZW50Ojp1c2VyQWdlbnRPdmVycmlkZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdXNlckFnZW50T3ZlcnJpZGU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OndpbGxTZW5k
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEluc3BlY3RvckFnZW50Ojph
cHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyogdXNlckFnZW50KSBjb25zdAogewotICAgIGlm
ICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkgewot
ICAgICAgICAvLyBPbmx5IGVuYWJsZSBsb2FkIHRpbWluZyBhbmQgcmF3IGhlYWRlcnMgaWYgZnJv
bnQtZW5kIGlzIGF0dGFjaGVkLCBhcyBvdGhlcndpc2Ugd2UgbWF5IHByb2R1Y2Ugb3ZlcmhlYWQu
Ci0gICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0TG9hZFRpbWluZyh0cnVlKTsKLSAgICAgICAgcmVx
dWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOwotCi0gICAgICAgIGlmIChtX2V4dHJhSGVh
ZGVycykgewotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9leHRyYUhlYWRlcnMtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZXh0cmFIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW1fdXNlckFnZW50T3Zl
cnJpZGUuaXNFbXB0eSgpKQorICAgICAgICAqdXNlckFnZW50ID0gbV91c2VyQWdlbnRPdmVycmlk
ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKQEAg
LTcyMiw3ICs3MTIsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmls
ZXIoKQogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVBy
b2ZpbGVyV2FzU3RhcnRlZCgpOwogCi0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIHRydWUpOworICAgIG1fc3RhdGUtPnNldEJv
b2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIHRydWUp
OwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCkBAIC03
MzcsNyArNzI3LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c3RvcFRpbWVsaW5lUHJvZmlsZXIo
KQogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2Zp
bGVyV2FzU3RvcHBlZCgpOwogCi0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0
ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29s
ZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7
CiB9CiAKICNpZiBFTkFCTEUoV09SS0VSUykKQEAgLTk3Myw3ICs5NjMsNyBAQCB2b2lkIEluc3Bl
Y3RvckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIGlmICghZW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9maWxlckFnZW50LT5zdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
Ojp1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvckFnZW50U3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIHRydWUpOwogfQog
CiB2b2lkIEluc3BlY3RvckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCkBAIC05
ODEsNyArOTcxLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9m
aWxlckFnZW50LT5zdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIG1fc3RhdGUtPnNl
dEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIGZhbHNlKTsK
KyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnVzZXJJbml0aWF0
ZWRQcm9maWxpbmcsIGZhbHNlKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBZ2VudDo6cHJvZmlsZXJF
bmFibGVkKCkgY29uc3QKQEAgLTk5MywxMyArOTgzLDEzIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6
OmVuYWJsZVByb2ZpbGVyKCkKIHsKICAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9maWxl
ckVuYWJsZWQsIHRydWUpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRT
dGF0ZTo6cHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJs
ZShmYWxzZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVQcm9maWxlcigpCiB7
Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJFbmFibGVk
LCBmYWxzZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpw
cm9maWxlckVuYWJsZWQsIGZhbHNlKTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmRpc2FibGUoKTsK
IH0KICNlbmRpZgpAQCAtMTAxNCw3ICsxMDA0LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2hv
d0FuZEVuYWJsZURlYnVnZ2VyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Zyb250
ZW5kKSB7Ci0gICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVn
Z2VyRW5hYmxlZCwgdHJ1ZSk7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9y
QWdlbnRTdGF0ZTo6ZGVidWdnZXJFbmFibGVkLCB0cnVlKTsKICAgICAgICAgc2hvd1BhbmVsKFNj
cmlwdHNQYW5lbCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyKHRydWUpOwpA
QCAtMTAyNCwxNiArMTAxNCwxMSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dl
cihib29sIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpCiB7CiAgICAgaWYgKGRlYnVnZ2VyRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6ZGVidWdnZXJFbmFibGVkLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKElu
c3BlY3RvckFnZW50U3RhdGU6OmRlYnVnZ2VyRW5hYmxlZCwgdHJ1ZSk7CiAgICAgQVNTRVJUKG1f
aW5zcGVjdGVkUGFnZSk7CiAKLSAgICBpZiAoZXJhc2VTdGlja3lCcmVha3BvaW50cykgewotICAg
ICAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3Bv
aW50cywgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgICAgIG1fc3RhdGUtPnNldE9i
amVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3NlckJyZWFrcG9pbnRzLCBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICBtX2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgbV9icm93c2Vy
RGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhp
cyk7CisgICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCksIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpOworICAgIG1f
YnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3Jl
YXRlKHRoaXMsIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpOwogCiAgICAgbV9mcm9udGVuZC0+ZGVi
dWdnZXJXYXNFbmFibGVkKCk7CiB9CkBAIC0xMDQ4LDcgKzEwMzMsNyBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjpkaXNhYmxlRGVidWdnZXIoKQogCiAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAg
ICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwotICAgICAgICBtX3N0YXRlLT5z
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIGZhbHNlKTsKKyAgICAg
ICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpkZWJ1Z2dlckVuYWJs
ZWQsIGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTEwNTcsMTEgKzEwNDIsNiBAQCB2b2lkIEluc3Bl
Y3RvckFnZW50OjpyZXN1bWUoKQogICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgIG1f
ZGVidWdnZXJBZ2VudC0+cmVzdW1lKCk7CiB9Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEFs
bEJyb3dzZXJCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dHMpCi17Ci0gICAgbV9zdGF0ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJl
YWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKLX0KICNlbmRpZgogCiB2b2lkIEluc3BlY3RvckFnZW50
OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNj
cmlwdCkKQEAgLTEzODAsMTggKzEzNjAsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQ
YWdlKCkKICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1
bGVyKCktPnNjaGVkdWxlUmVmcmVzaCgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpzZXRF
eHRyYUhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcnMpCi17Ci0gICAg
bV9leHRyYUhlYWRlcnMgPSBhZG9wdFB0cihuZXcgSFRUUEhlYWRlck1hcCgpKTsKLSAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwotICAgIGZv
ciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICgh
aXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBtX2V4dHJhSGVhZGVycy0+YWRkKGl0LT5maXJzdCwgdmFsdWUpOwotICAgIH0KLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggNDdkMDcwMC4uYjVk
NTA5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTI0
Niw4ICsyNDYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoKTsKICAgICBi
b29sIGRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudDsgfQog
ICAgIHZvaWQgcmVzdW1lKCk7Ci0KLSAgICB2b2lkIHNldEFsbEJyb3dzZXJCcmVha3BvaW50cyhQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwogI2VuZGlmCiAKICAgICAvLyBHZW5lcmljIGNv
ZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVudGF0aW9ucy4KQEAgLTI2NywxMSArMjY1LDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJv
b2wqIG5ld1N0YXRlKTsKICAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3VsdCk7CiAKLSAgICAvLyBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24gQVBJCi0gICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0Jik7Ci0KICAgICB2b2lkIHNldFVzZXJBZ2VudE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50KTsKLSAgICBTdHJpbmcgdXNlckFnZW50T3ZlcnJpZGUoKSBjb25zdDsKKyAgICB2b2lk
IGFwcGx5VXNlckFnZW50T3ZlcnJpZGUoU3RyaW5nKiB1c2VyQWdlbnQpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIHZvaWQgcHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCk7CkBAIC0zNTEsNyArMzQ2
LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+
IG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdl
bnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgotICAgIE93blB0cjxIVFRQSGVhZGVyTWFwPiBt
X2V4dHJhSGVhZGVyczsKICAgICBTdHJpbmcgbV91c2VyQWdlbnRPdmVycmlkZTsKICNpZiBFTkFC
TEUoV09SS0VSUykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIFJlZlB0cjxJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZT4gPiBXb3JrZXJzTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXgg
NjZkM2NjZS4uMmRkZjc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02MSw2ICs2MSwxOCBA
QCBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgQnJvd3NlckRlYnVnZ2VyQWdlbnRTdGF0ZSB7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIgYnJvd3NlckJyZWFrcG9pbnRzW10gPSAiYnJvd3NlckJyZWFr
cG9pbnRzIjsKK30KKworUGFzc093blB0cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4g
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQsIGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50cykKK3sKKyAgICBpZiAoZXJh
c2VTdGlja3lCcmVha3BvaW50cykKKyAgICAgICAgaW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNl
dE9iamVjdChCcm93c2VyRGVidWdnZXJBZ2VudFN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChpbnNwZWN0b3JBZ2VudCkpOworfQorCiBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQogICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNw
ZWN0b3JBZ2VudCkKICAgICAsIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTChmYWxzZSkK
QEAgLTczLDcgKzg1LDcgQEAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpCiAKIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQ6OnNldEFsbEJyb3dzZXJCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnJlYWtwb2ludHMpCiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0T2Jq
ZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRPYmplY3QoQnJvd3NlckRlYnVnZ2VyQWdl
bnRTdGF0ZTo6YnJvd3NlckJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7CiAgICAgaW5zcGVjdGVk
VVJMQ2hhbmdlZChtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0ZWRVUkxXaXRob3V0RnJhZ21lbnQo
KSk7CiB9CiAKQEAgLTgzLDcgKzk1LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKICAgICBtX1hIUkJy
ZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0g
ZmFsc2U7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1f
aW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3Nl
ckJyZWFrcG9pbnRzKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50
cyA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChCcm93c2VyRGVidWdnZXJB
Z2VudFN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYnJlYWtwb2ludHMgPSBhbGxCcmVha3BvaW50cy0+Z2V0QXJyYXkodXJsKTsKICAgICBpZiAo
IWJyZWFrcG9pbnRzKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCmluZGV4IDA2NzZj
MzAuLjY0ZDVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCkBAIC01MSwxMCArNTEsNyBAQCBjbGFzcyBO
b2RlOwogY2xhc3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gY3JlYXRl
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoaW5zcGVjdG9yQWdlbnQp
KTsKLSAgICB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGJvb2wgZXJhc2VT
dGlja3lCcmVha3BvaW50cyk7CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwCmluZGV4IDg3MmNiYjcuLjZmNjJhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC00OSw2ICs0
OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11
bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29u
c29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIAorbmFtZXNwYWNlIENvbnNvbGVBZ2VudFN0YXRlIHsK
KyAgICBzdGF0aWMgY29uc3QgY2hhciBtb25pdG9yaW5nWEhSW10gPSAibW9uaXRvcmluZ1hIUiI7
CisgICAgc3RhdGljIGNvbnN0IGNoYXIgY29uc29sZU1lc3NhZ2VzRW5hYmxlZFtdID0gImNvbnNv
bGVNZXNzYWdlc0VuYWJsZWQiOworfQorCiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6Okluc3BlY3Rv
ckNvbnNvbGVBZ2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCiAgICAgOiBtX2lu
c3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwgbV9mcm9udGVuZCgwKQpAQCAtMTY0
LDcgKzE2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNvdXJjZVJldHJpZXZl
ZEJ5WE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwsCiB7CiAgICAgaWYgKCFtX2luc3Bl
Y3RvckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9pbnNwZWN0
b3JBZ2VudC0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hI
UikpCisgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJvb2xlYW4oQ29uc29s
ZUFnZW50U3RhdGU6Om1vbml0b3JpbmdYSFIpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xl
KEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBm
aW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRV
UkwpOwogfQogCkBAIC0xOTIsMTIgKzE5NywxMiBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdQog
CiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewotICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOworICAgIG1faW5zcGVjdG9y
QWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4oQ29uc29sZUFnZW50U3RhdGU6Om1vbml0b3JpbmdY
SFIsIGVuYWJsZWQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0Q29uc29s
ZU1lc3NhZ2VzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+
c3RhdGUoKS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxl
ZCwgZW5hYmxlZCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0Qm9vbGVhbihD
b25zb2xlQWdlbnRTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCwgZW5hYmxlZCk7CiAgICAg
aWYgKCFlbmFibGVkIHx8ICFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTIxNSwx
MiArMjIwLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25zb2xlTWVzc2Fn
ZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPiBjb25zb2xlCiAKICAgICBpZiAobV9wcmV2aW91
c01lc3NhZ2UgJiYgbV9wcmV2aW91c01lc3NhZ2UtPmlzRXF1YWwoY29uc29sZU1lc3NhZ2UuZ2V0
KCkpKSB7CiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5pbmNyZW1lbnRDb3VudCgpOwotICAg
ICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCkgJiYgbV9mcm9udGVuZCkKKyAgICAgICAgaWYg
KG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJvb2xlYW4oQ29uc29sZUFnZW50U3RhdGU6
OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRlbmQpCiAgICAgICAgICAgICBtX3By
ZXZpb3VzTWVzc2FnZS0+dXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUobV9mcm9udGVuZCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZS5n
ZXQoKTsKICAgICAgICAgbV9jb25zb2xlTWVzc2FnZXMuYXBwZW5kKGNvbnNvbGVNZXNzYWdlKTsK
LSAgICAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRlbmQpCisgICAgICAg
IGlmIChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRCb29sZWFuKENvbnNvbGVBZ2VudFN0
YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAmJiBtX2Zyb250ZW5kKQogICAgICAgICAgICAg
bV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvRnJvbnRlbmQobV9mcm9udGVuZCwgbV9pbnNwZWN0b3JB
Z2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGU5NmMyMmIu
LjY4YmUyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTQyLDggKzQyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCituYW1lc3BhY2UgRGVidWdnZXJBZ2VudFN0YXRlIHsKKyAgICBz
dGF0aWMgY29uc3QgY2hhciBqYXZhU2NyaXB0QnJlYWtwb2ludHNbXSA9ICJqYXZhU2NyaXB0QnJl
YWtvcGludHMiOworfTsKKworUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50
cykKIHsKKyAgICBpZiAoZXJhc2VTdGlja3lCcmVha3BvaW50cykKKyAgICAgICAgaW5zcGVjdG9y
QWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRC
cmVha3BvaW50cywgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisKICAgICBPd25QdHI8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudD4gYWdlbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChpbnNwZWN0b3JBZ2VudCwgZnJvbnRlbmQpKTsKICAgICBTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkuY2xlYXJCcmVha3BvaW50cygpOwogICAgIC8vIEZJWE1FKFdLNDQ1MTMpOiBi
cmVha3BvaW50cyBhY3RpdmF0ZWQgZmxhZyBzaG91bGQgYmUgc3luY2hyb25pemVkIGJldHdlZW4g
YWxsIGZyb250LWVuZHMKQEAgLTg1LDcgKzkyLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpCiB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBp
bnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24s
IGJvb2wgZW5hYmxlZCwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIGxvY2F0aW9ucykKIHsKICAgICBTdHJpbmcgYnJlYWtwb2ludElkID0gbWFrZVN0cmlu
Zyh1cmwsICI6IiwgU3RyaW5nOjpudW1iZXIobGluZU51bWJlciksICI6IiwgU3RyaW5nOjpudW1i
ZXIoY29sdW1uTnVtYmVyKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9y
U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmpl
Y3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGlmIChi
cmVha3BvaW50c0Nvb2tpZS0+ZmluZChicmVha3BvaW50SWQpICE9IGJyZWFrcG9pbnRzQ29va2ll
LT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtOTUsNyArMTAy
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRKYXZhU2NyaXB0QnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmUKICAgICBicmVha3BvaW50T2JqZWN0LT5zZXRT
dHJpbmcoImNvbmRpdGlvbiIsIGNvbmRpdGlvbik7CiAgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0
Qm9vbGVhbigiZW5hYmxlZCIsIGVuYWJsZWQpOwogICAgIGJyZWFrcG9pbnRzQ29va2llLT5zZXRP
YmplY3QoYnJlYWtwb2ludElkLCBicmVha3BvaW50T2JqZWN0KTsKLSAgICBtX2luc3BlY3RvckFn
ZW50LT5zdGF0ZSgpLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3Bv
aW50cywgYnJlYWtwb2ludHNDb29raWUpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCkt
PnNldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgYnJl
YWtwb2ludHNDb29raWUpOwogCiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKTsKICAgICBmb3IgKFNjcmlw
dHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1fc2NyaXB0cy5l
bmQoKTsgKytpdCkgewpAQCAtMTI2LDkgKzEzMyw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnRCeVNvdXJjZUlkKGNvbnN0IFN0cmluZyYgc291
CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRP
YmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5z
dGF0ZSgpLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2lu
dHMpOwogICAgIGJyZWFrcG9pbnRzQ29va2llLT5yZW1vdmUoYnJlYWtwb2ludElkKTsKLSAgICBt
X2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFT
Y3JpcHRCcmVha3BvaW50cywgYnJlYWtwb2ludHNDb29raWUpOworICAgIG1faW5zcGVjdG9yQWdl
bnQtPnN0YXRlKCktPnNldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVh
a3BvaW50cywgYnJlYWtwb2ludHNDb29raWUpOwogCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0
ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJy
ZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09
IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCkBAIC0yNzgs
NyArMjg1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcKICAgICBpZiAodXJsLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtw
b2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVj
dG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRP
YmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGZv
ciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzQ29va2llLT5iZWdp
bigpOyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5zZWNvbmQtPmFzT2Jq
ZWN0KCk7CiAgICAgICAgIFN0cmluZyBicmVha3BvaW50VVJMOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggZjRlN2U0MS4uODk2
MmI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCkBAIC01Nyw3ICs1Nyw3IEBAIGVudW0gRGVidWdnZXJFdmVudFR5cGUgewogY2xh
c3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBTY3JpcHREZWJ1Z0xpc3RlbmVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVj
dG9yRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yRnJvbnRl
bmQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBjcmVh
dGUoSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JGcm9udGVuZCosIGJvb2wgZXJhc2VTdGlja3lC
cmVha3BvaW50cyk7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpOwogCiAg
ICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAK
aW5kZXggZGJiNDcyYS4uY2E3NThhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTM4MSw5ICszODEsMTMgQEAg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dEltcGwoSW5zcGVjdG9yQWdlbnQqIGkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+aWRlbnRpZmll
ckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QudXJsKCksIGxvYWRlcik7CiB9
CiAKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRl
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFN0cmluZyogdXNlckFnZW50KQor
eworICAgIGluc3BlY3RvckFnZW50LT5hcHBseVVzZXJBZ2VudE92ZXJyaWRlKHVzZXJBZ2VudCk7
Cit9CisKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3RJbXBs
KEluc3BlY3RvckFnZW50KiBpYywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
CiB7Ci0gICAgaWMtPndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0KTsKICAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpYykp
CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxTZW5kUmVzb3VyY2VSZXF1ZXN0KGlkZW50aWZp
ZXIsIHJlcXVlc3QpOwogICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFn
ZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGljKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCAwMmY1ZDNmLi5hNDM3
YmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2FsY3VsYXRlU3R5bGUoRG9jdW1lbnQq
KTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWNhbGN1bGF0ZVN0eWxlKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCisgICAgc3RhdGljIHZvaWQgYXBwbHlVc2VyQWdlbnRP
dmVycmlkZShGcmFtZSosIFN0cmluZyopOwogICAgIHN0YXRpYyB2b2lkIGlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBzdGF0aWMgdm9pZCB3aWxsU2Vu
ZFJlcXVlc3QoRnJhbWUqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHN0YXRp
YyB2b2lkIG1hcmtSZXNvdXJjZUFzQ2FjaGVkKFBhZ2UqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpOwpAQCAtMjIwLDYgKzIyMSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlkUGFp
bnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogICAgIHN0YXRp
YyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2FsY3VsYXRlU3R5bGVJbXBs
KEluc3BlY3RvckFnZW50Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjYWxjdWxhdGVTdHlsZUlt
cGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnNwZWN0b3JBZ2VudCosIFN0cmluZyop
OwogICAgIHN0YXRpYyB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdEltcGwoSW5zcGVj
dG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0SW1w
bChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgc3Rh
dGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTU5Nyw2ICs2MDAsMTQgQEAgaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoRnJhbWUq
IGZyYW1lLAogI2VuZGlmCiB9CiAKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSogZnJhbWUsIFN0cmluZyogdXNlckFnZW50
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQor
ICAgICAgICBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChpbnNwZWN0b3JBZ2VudCwgdXNlckFn
ZW50KTsKKyNlbmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxTZW5kUmVxdWVzdChGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggZDZlNGNjZi4u
ZTc4ZDdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQpAQCAtNjcsOSArNjcsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CituYW1lc3BhY2UgUmVzb3VyY2VBZ2VudFN0YXRlIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBy
ZXNvdXJjZUFnZW50RW5hYmxlZFtdID0gInJlc291cmNlQWdlbnRFbmFibGVkIjsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciBleHRyYVJlcXVlc3RIZWFkZXJzW10gPSAiZXh0cmFSZXF1ZXN0SGVhZGVy
cyI7Cit9CisKIFBhc3NSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4gSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6cmVzdG9yZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKIHsKLSAgICBpZiAoc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnJlc291cmNlQWdlbnRFbmFibGVkKSkKKyAgICBpZiAoc3RhdGUtPmdl
dEJvb2xlYW4oUmVzb3VyY2VBZ2VudFN0YXRlOjpyZXNvdXJjZUFnZW50RW5hYmxlZCkpCiAgICAg
ICAgIHJldHVybiBjcmVhdGUocGFnZSwgc3RhdGUsIGZyb250ZW5kKTsKICAgICByZXR1cm4gMDsK
IH0KQEAgLTI4Nyw3ICsyOTIsNyBAQCBzdGF0aWMgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhGcmFt
ZVJlc291cmNlcyhGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yTwogCiBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50Ojp+SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpCiB7Ci0gICAgbV9zdGF0
ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VBZ2VudEVuYWJsZWQsIGZhbHNl
KTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKFJlc291cmNlQWdlbnRTdGF0ZTo6cmVzb3VyY2VB
Z2VudEVuYWJsZWQsIGZhbHNlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpp
ZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBLVVJMJiB1cmwsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0zMDIsOCArMzA3LDI4IEBA
IHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllCiAgICAgbV9mcm9udGVuZC0+aWRlbnRpZmllckZvcklu
aXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHVybC5zdHJpbmcoKSwgbG9hZGVyT2JqZWN0LCBjYWxs
U3RhY2tWYWx1ZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFI
ZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQoreworICAgIG1fc3Rh
dGUtPnNldE9iamVjdChSZXNvdXJjZUFnZW50U3RhdGU6OmV4dHJhUmVxdWVzdEhlYWRlcnMsIGhl
YWRlcnMpOworfQorCisKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogeworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGhlYWRlcnMgPSBtX3N0YXRlLT5nZXRPYmplY3QoUmVzb3VyY2VBZ2Vu
dFN0YXRlOjpleHRyYVJlcXVlc3RIZWFkZXJzKTsKKworICAgIGlmIChoZWFkZXJzKSB7CisgICAg
ICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7
CisgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRl
cnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgU3RyaW5nIHZhbHVl
OworICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXF1ZXN0LnNldFJlcG9ydExvYWRUaW1pbmcodHJ1ZSk7
CisgICAgcmVxdWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOworCiAgICAgbV9mcm9udGVu
ZC0+d2lsbFNlbmRSZXF1ZXN0KGlkZW50aWZpZXIsIGN1cnJlbnRUaW1lKCksIGJ1aWxkT2JqZWN0
Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9u
c2UocmVkaXJlY3RSZXNwb25zZSkpOwogfQogCkBAIC00OTIsNyArNTE3LDcgQEAgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudChQYWdlKiBwYWdlLCBJbnNwZWN0
b3JTdGF0ZSogc3RhdGUKICAgICAsIG1fc3RhdGUoc3RhdGUpCiAgICAgLCBtX2Zyb250ZW5kKGZy
b250ZW5kKQogewotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291
cmNlQWdlbnRFbmFibGVkLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKFJlc291cmNl
QWdlbnRTdGF0ZTo6cmVzb3VyY2VBZ2VudEVuYWJsZWQsIHRydWUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuaAppbmRleCA2YzJkZjI0Li4yM2RiZWVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKQEAgLTEwNCw2ICsxMDQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRlbmQgCiAgICAgdm9pZCBjYWNo
ZWRSZXNvdXJjZXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKICAgICB2b2lkIHJlc291cmNl
Q29udGVudCh1bnNpZ25lZCBsb25nIGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGJh
c2U2NEVuY29kZSwgU3RyaW5nKiBjb250ZW50KTsKKyAgICB2b2lkIHNldEV4dHJhSGVhZGVycyhQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvclJl
c291cmNlQWdlbnQoUGFnZSogcGFnZSwgSW5zcGVjdG9yU3RhdGUqLCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAKaW5kZXggNzc5ZDQ2NGQuLjVjYTg4OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNywxMjQgKzM3LDY1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KQog
ICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wcm9wZXJ0aWVzKEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpCiB7Ci0gICAgLy8gUHVyZSByZWxvYWQgc3RhdGUKLSAgICByZWdpc3RlckJv
b2xlYW4odXNlckluaXRpYXRlZFByb2ZpbGluZywgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVh
bih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVhbihz
ZWFyY2hpbmdGb3JOb2RlLCBmYWxzZSk7Ci0gICAgcmVnaXN0ZXJCb29sZWFuKGRlYnVnZ2VyRW5h
YmxlZCwgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVhbihwcm9maWxlckVuYWJsZWQsIGZhbHNl
KTsKLSAgICByZWdpc3Rlck9iamVjdChqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwotICAgIHJlZ2lz
dGVyT2JqZWN0KGJyb3dzZXJCcmVha3BvaW50cyk7Ci0gICAgcmVnaXN0ZXJCb29sZWFuKGNvbnNv
bGVNZXNzYWdlc0VuYWJsZWQsIGZhbHNlKTsKLSAgICByZWdpc3RlckJvb2xlYW4obW9uaXRvcmlu
Z1hIUiwgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVhbihyZXNvdXJjZUFnZW50RW5hYmxlZCwg
ZmFsc2UpOwogfQogCiB2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNv
b2tpZShjb25zdCBTdHJpbmcmIGpzb24pCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBq
c29uVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24pOwotICAgIGlmICghanNv
blZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBq
c29uT2JqZWN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOwotICAgIGlmICghanNvbk9iamVjdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGkg
PSBqc29uT2JqZWN0LT5iZWdpbigpOyBpICE9IGpzb25PYmplY3QtPmVuZCgpOyArK2kpIHsKLSAg
ICAgICAgSW5zcGVjdG9yUHJvcGVydHlJZCBpZCA9IChJbnNwZWN0b3JQcm9wZXJ0eUlkKWktPmZp
cnN0LnRvSW50KCk7Ci0gICAgICAgIEFTU0VSVChpZCA+IDAgJiYgaWQgPCBsYXN0UHJvcGVydHlJ
ZCk7Ci0gICAgICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBqID0gbV9wcm9wZXJ0aWVzLmZpbmQo
aWQpOwotICAgICAgICBBU1NFUlQoaiAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOwotICAgICAgICBB
U1NFUlQoai0+c2Vjb25kLm1fdmFsdWUtPnR5cGUoKSA9PSBpLT5zZWNvbmQtPnR5cGUoKSk7Ci0g
ICAgICAgIGotPnNlY29uZC5tX3ZhbHVlID0gaS0+c2Vjb25kOwotICAgIH0KKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBqc29uT2JqZWN0OworICAgIGlmIChqc29uVmFsdWUpCisgICAgICAg
IGpzb25PYmplY3QgPSBqc29uVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgbV9wcm9wZXJ0aWVzID0g
anNvbk9iamVjdCA/IGpzb25PYmplY3QgOiBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogfQog
CiB2b2lkIEluc3BlY3RvclN0YXRlOjp1cGRhdGVDb29raWUoKQogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGNvb2tpZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgZm9yIChQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5iZWdpbigpOyBp
ICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBjb29raWVPYmplY3QtPnNldFZh
bHVlKFN0cmluZzo6bnVtYmVyKGktPmZpcnN0KSwgaS0+c2Vjb25kLm1fdmFsdWUpOwotICAgIG1f
Y2xpZW50LT51cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb29raWVPYmplY3QtPnRvSlNPTlN0
cmluZygpKTsKKyAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUobV9wcm9w
ZXJ0aWVzLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnNldFZh
bHVlKEluc3BlY3RvclByb3BlcnR5SWQgaWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKQordm9pZCBJbnNwZWN0b3JTdGF0ZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogewotICAgIFByb3BlcnR5
TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpICE9
IG1fcHJvcGVydGllcy5lbmQoKSk7Ci0gICAgaS0+c2Vjb25kLm1fdmFsdWUgPSB2YWx1ZTsKKyAg
ICBtX3Byb3BlcnRpZXMtPnNldFZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIHVwZGF0
ZUNvb2tpZSgpOwogfQogCi1ib29sIEluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKEluc3BlY3Rv
clByb3BlcnR5SWQgaWQpCitib29sIEluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9w
cm9wZXJ0aWVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7
CisgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChw
cm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKLSAgICBpLT5zZWNvbmQubV92
YWx1ZS0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5k
KCkpCisgICAgICAgIGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2
YWx1ZTsKIH0KIAotU3RyaW5nIEluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcoSW5zcGVjdG9yUHJv
cGVydHlJZCBpZCkKK1N0cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKQogewotICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9w
ZXJ0aWVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9w
ZXJ0eU5hbWUpOwogICAgIFN0cmluZyB2YWx1ZTsKLSAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNT
dHJpbmcoJnZhbHVlKTsKKyAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKKyAgICAg
ICAgaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAK
LWxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKK2xv
bmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Ci0g
ICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9u
ZyB2YWx1ZSA9IDA7Ci0gICAgaS0+c2Vjb25kLm1fdmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7Cisg
ICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCisgICAgICAgIGl0LT5zZWNvbmQtPmFz
TnVtYmVyKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlk
IGlkKQotewotICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQo
aWQpOwotICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7Ci0gICAgcmV0dXJuIGkt
PnNlY29uZC5tX3ZhbHVlLT5hc09iamVjdCgpOwotfQotCi12b2lkIEluc3BlY3RvclN0YXRlOjpz
ZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpn
ZXRPYmplY3QoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgUHJvcGVydHlNYXA6
Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGkgIT0gbV9w
cm9wZXJ0aWVzLmVuZCgpKTsKLSAgICBQcm9wZXJ0eSYgcHJvcGVydHkgPSBpLT5zZWNvbmQ7Ci0g
ICAgcHJvcGVydHkubV92YWx1ZSA9IHZhbHVlOwotICAgIHVwZGF0ZUNvb2tpZSgpOwotfQotCi12
b2lkIEluc3BlY3RvclN0YXRlOjpyZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBw
cm9wZXJ0eUlkLCBib29sIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5zZXQocHJvcGVydHlJ
ZCwgUHJvcGVydHk6OmNyZWF0ZShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKSk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3Bl
cnR5SWQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yU3RyaW5nOjpjcmVh
dGUodmFsdWUpKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyTG9uZyhJbnNw
ZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0
aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3RvckJhc2ljVmFsdWU6
OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSkpOwotfQotCi12b2lkIEluc3BlY3RvclN0YXRlOjpyZWdp
c3Rlck9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQpCi17Ci0gICAgbV9wcm9w
ZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpKTsKLX0KLQotSW5zcGVjdG9yU3RhdGU6OlByb3BlcnR5IEluc3BlY3RvclN0YXRl
OjpQcm9wZXJ0eTo6Y3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotewot
ICAgIFByb3BlcnR5IHByb3BlcnR5OwotICAgIHByb3BlcnR5Lm1fdmFsdWUgPSB2YWx1ZTsKLSAg
ICByZXR1cm4gcHJvcGVydHk7CisgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1f
cHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOworICAgIGlmIChpdCA9PSBtX3Byb3BlcnRp
ZXMtPmVuZCgpKSB7CisgICAgICAgIG1fcHJvcGVydGllcy0+c2V0T2JqZWN0KHByb3BlcnR5TmFt
ZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIGl0ID0gbV9wcm9wZXJ0aWVz
LT5maW5kKHByb3BlcnR5TmFtZSk7CisgICAgfQorICAgIHJldHVybiBpdC0+c2Vjb25kLT5hc09i
amVjdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5oCmluZGV4IDkwYTJjMTcuLmRiMjAyN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCkBAIC0xLDI5ICsxLDMxIEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKICNpZm5kZWYgSW5zcGVjdG9yU3RhdGVfaApAQCAtNDMsNDkgKzQ1LDI1
IEBAIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIAogY2xhc3MgSW5zcGVjdG9yU3RhdGUgewogcHVi
bGljOgotICAgIGVudW0gSW5zcGVjdG9yUHJvcGVydHlJZCB7Ci0gICAgICAgIG1vbml0b3JpbmdY
SFIgPSAxLAotICAgICAgICB0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwKLSAgICAgICAgc2VhcmNo
aW5nRm9yTm9kZSwKLSAgICAgICAgY29uc29sZU1lc3NhZ2VzRW5hYmxlZCwKLSAgICAgICAgcHJv
ZmlsZXJFbmFibGVkLAotICAgICAgICB1c2VySW5pdGlhdGVkUHJvZmlsaW5nLAotICAgICAgICBk
ZWJ1Z2dlckVuYWJsZWQsCi0gICAgICAgIGphdmFTY3JpcHRCcmVha3BvaW50cywKLSAgICAgICAg
YnJvd3NlckJyZWFrcG9pbnRzLAotICAgICAgICByZXNvdXJjZUFnZW50RW5hYmxlZCwKLSAgICAg
ICAgbGFzdFByb3BlcnR5SWQKLSAgICB9OwotCiAgICAgSW5zcGVjdG9yU3RhdGUoSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpOwogCiAgICAgdm9pZCByZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShj
b25zdCBTdHJpbmcmIGpzb25TdHJpbmcpOwogCi0gICAgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rv
clByb3BlcnR5SWQpOwotICAgIFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCk7
Ci0gICAgbG9uZyBnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQpOwotICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCk7CisgICAgYm9v
bCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICBTdHJpbmcgZ2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICBsb25nIGdldExvbmcoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBzZXRC
b29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgYm9vbCB2YWx1ZSkgeyBzZXRW
YWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsgfQot
ICAgIHZvaWQgc2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JTdHJpbmc6OmNy
ZWF0ZSh2YWx1ZSkpOyB9Ci0gICAgdm9pZCBzZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJv
cGVydHlJZCwgbG9uZyB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNp
Y1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2YWx1ZSkpOyB9Ci0gICAgdm9pZCBzZXRPYmplY3QoSW5z
cGVjdG9yUHJvcGVydHlJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKTsKKyAg
ICB2b2lkIHNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgdmFsdWUp
IHsgc2V0VmFsdWUocHJvcGVydHlOYW1lLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFs
dWUpKTsgfQorICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yU3Ry
aW5nOjpjcmVhdGUodmFsdWUpKTsgfQorICAgIHZvaWQgc2V0TG9uZyhjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgbG9uZyB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eU5hbWUsIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSk7IH0KKyAgICB2b2lkIHNldE9iamVj
dChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWUpOyB9CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCB1cGRhdGVDb29raWUoKTsKLSAgICB2b2lkIHNldFZhbHVlKEluc3BlY3RvclByb3Bl
cnR5SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKLQotICAgIHN0cnVjdCBQcm9wZXJ0
eSB7Ci0gICAgICAgIHN0YXRpYyBQcm9wZXJ0eSBjcmVhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fdmFsdWU7Ci0g
ICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgUHJvcGVydHk+IFByb3BlcnR5TWFwOwot
ICAgIFByb3BlcnR5TWFwIG1fcHJvcGVydGllczsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CiAKLSAgICB2
b2lkIHJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkLCBib29sIHZhbHVlKTsKLSAg
ICB2b2lkIHJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotICAgIHZvaWQgcmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQsIGxvbmcg
dmFsdWUpOwotICAgIHZvaWQgcmVnaXN0ZXJPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9wcm9wZXJ0aWVzOwogCiAgICAgSW5zcGVjdG9y
Q2xpZW50KiBtX2NsaWVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApp
bmRleCA3MWY2MjVjLi5mNTc1YzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTI1NTUsMTQgKzI1NTUsOSBAQCBpbnQgRnJhbWVMb2FkZXI6Om51bVBlbmRpbmdPckxv
YWRpbmdSZXF1ZXN0cyhib29sIHJlY3Vyc2UpIGNvbnN0CiAKIFN0cmluZyBGcmFtZUxvYWRlcjo6
dXNlckFnZW50KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIFN0cmlu
ZyB1c2VyQWdlbnRPdmVycmlkZSA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dXNlckFn
ZW50T3ZlcnJpZGUoKTsKLSAgICAgICAgaWYgKCF1c2VyQWdlbnRPdmVycmlkZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdXNlckFnZW50T3ZlcnJpZGU7Ci0gICAgfQotI2VuZGlmCi0g
ICAgcmV0dXJuIG1fY2xpZW50LT51c2VyQWdlbnQodXJsKTsKKyAgICBTdHJpbmcgdXNlckFnZW50
ID0gbV9jbGllbnQtPnVzZXJBZ2VudCh1cmwpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShtX2ZyYW1lLCAmdXNlckFnZW50KTsKKyAgICByZXR1
cm4gdXNlckFnZW50OwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpoYW5kbGVkT25sb2FkRXZlbnRz
KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81486</attachid>
            <date>2011-02-07 10:17:06 -0800</date>
            <delta_ts>2011-02-08 05:48:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>inspector-state-refactoring.diff</filename>
            <type>text/plain</type>
            <size>43496</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NzFjOTc3Li5lMDU3YTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTEtMDItMDQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBbcmVmYWNvdHJpbmddIG1lcmdlIEluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3Qo
KSBpbnRvIEluc3BlY3RvclJlc291cmNlQWduZXQKKyAgICAgICAgIC0gcGVyZm9ybSBVc2VyQWdl
bnQgb3ZlcnJpZGUgdmlhIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgorICAgICAgICAgLSBtb3Zl
IGFkZGluZyBleHRyYSByZXF1ZXN0IGhlYWRlcnMgdG8gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudAor
ICAgICAgICAgLSBzaW1wbGlmaWVkIHRoaW5ncyBpbiBJbnNwZWN0b3JTdGF0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODkKKworICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZy
b250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjphcHBseVVzZXJBZ2Vu
dE92ZXJyaWRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFJlcXVlc3RJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5
VXNlckFnZW50T3ZlcnJpZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNl
dEV4dHJhSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnVwZGF0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3RhdGU6OmdldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9u
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0YXRlOjpzZXRPYmplY3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXNlckFnZW50KToKKwogMjAxMS0wMi0w
NyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlk
bAppbmRleCBjMjQyNzUzLi45NjFhMzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmlkbApAQCAtNjIsNyArNjIsNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49
SW5zcGVjdG9yXSB2b2lkIGhpZGVGcmFtZUhpZ2hsaWdodCgpOwogICAgICAgICBbbm90aWZ5LCBk
b21haW49SW5zcGVjdG9yXSB2b2lkIHVwZGF0ZUZvY3VzZWROb2RlKG91dCBsb25nIG5vZGVJZCk7
CiAKLSAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXh0cmFIZWFkZXJzKGluIE9i
amVjdCBoZWFkZXJzKTsKICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0VXNlckFn
ZW50T3ZlcnJpZGUoaW4gU3RyaW5nIHVzZXJBZ2VudCk7CiAKICAgICAgICAgW2RvbWFpbj1JbnNw
ZWN0b3JdIHZvaWQgZ2V0Q29va2llcyhvdXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBjb29r
aWVzU3RyaW5nKTsKQEAgLTEwMiw2ICsxMDEsNyBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAg
W2RvbWFpbj1OZXR3b3JrXSB2b2lkIGNhY2hlZFJlc291cmNlcyhvdXQgT2JqZWN0IHJlc291cmNl
cyk7CiAgICAgICAgIFtkb21haW49TmV0d29ya10gdm9pZCByZXNvdXJjZUNvbnRlbnQoaW4gdW5z
aWduZWQgbG9uZyBmcmFtZUlkLCBpbiBTdHJpbmcgdXJsLCBpbiBib29sZWFuIGJhc2U2NEVuY29k
ZSwgb3V0IFN0cmluZyBjb250ZW50KTsKKyAgICAgICAgW2RvbWFpbj1OZXR3b3JrXSB2b2lkIHNl
dEV4dHJhSGVhZGVycyhpbiBPYmplY3QgaGVhZGVycyk7CiAKICAgICAgICAgW25vdGlmeSwgZG9t
YWluPU5ldHdvcmtdIHZvaWQgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQob3V0IHVuc2lnbmVkIGxv
bmcgZnJhbWVJZCk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1OZXR3b3JrXSB2b2lkIGlkZW50
aWZpZXJGb3JJbml0aWFsUmVxdWVzdChvdXQgbG9uZyBpZGVudGlmaWVyLCBvdXQgU3RyaW5nIHVy
bCwgb3V0IE9iamVjdCBsb2FkZXIsIG91dCBWYWx1ZSBjYWxsU3RhY2spOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggZGFmMDU1ZC4uZDcxYjY2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC0xMjks
NiArMTI5LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorbmFtZXNwYWNlIEluc3BlY3RvckFnZW50U3RhdGUgeworc3RhdGljIGNvbnN0IGNoYXIgc2Vh
cmNoaW5nRm9yTm9kZVtdID0gInNlYXJjaGluZ0Zvck5vZGUiOworc3RhdGljIGNvbnN0IGNoYXIg
dGltZWxpbmVQcm9maWxlckVuYWJsZWRbXSA9ICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCI7Citz
dGF0aWMgY29uc3QgY2hhciB1c2VySW5pdGlhdGVkUHJvZmlsaW5nW10gPSAidXNlckluaXRpYXRl
ZFByb2ZpbGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBkZWJ1Z2dlckVuYWJsZWRbXSA9ICJkZWJ1
Z2dlckVuYWJsZWQiOworc3RhdGljIGNvbnN0IGNoYXIgcHJvZmlsZXJFbmFibGVkW10gPSAicHJv
ZmlsZXJFbmFibGVkIjsKK30KKwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OkVs
ZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdl
bnQ6OkNvbnNvbGVQYW5lbCA9ICJjb25zb2xlIjsKIGNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3Rv
ckFnZW50OjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7CkBAIC0xOTMsNyArMjAxLDcgQEAgYm9v
bCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlZCgpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQWdlbnQ6
OnNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0YXRlLT5n
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKKyAgICByZXR1cm4g
bV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpzZWFyY2hpbmdGb3JOb2Rl
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNv
b2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRlQ29va2llKQpAQCAtMjEwLDEzICsyMTgs
MTMgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tp
ZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXQKIAogICAgIG1fcmVzb3VyY2VBZ2VudCA9IElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc3RvcmUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdl
dCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKIAotICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkpCisgICAgaWYgKG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQp
KQogICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgIHJlc3RvcmVEZWJ1Z2dlcihmYWxzZSk7CiAgICAgcmVzdG9yZVBy
b2ZpbGVyKFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdlbnQpOwotICAgIGlmIChtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nKSkKKyAgICBpZiAo
bV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjp1c2VySW5pdGlhdGVkUHJv
ZmlsaW5nKSkKICAgICAgICAgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiAjZW5kaWYK
IH0KQEAgLTM0Niw3ICszNTQsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpzZXRTZWFyY2hpbmdG
b3JOb2RlKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgp
ID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlLCBlbmFibGVkKTsKKyAgICBtX3N0YXRlLT5z
ZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUsIGVuYWJsZWQp
OwogICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgaGlkZUhpZ2hsaWdodCgpOwogfQpAQCAtNDY0
LDcgKzQ3Miw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAK
ICAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogICAgIG1fdGltZWxpbmVBZ2Vu
dC5jbGVhcigpOwotICAgIG1fZXh0cmFIZWFkZXJzLmNsZWFyKCk7CiAgICAgbV91c2VyQWdlbnRP
dmVycmlkZSA9ICIiOwogfQogCkBAIC01NjcsNyArNTc0LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6cmVzdG9yZURlYnVnZ2VyKGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50cykKIHsKICAgICBB
U1NFUlQobV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAg
aWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyRW5hYmxlZCkp
CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6ZGVidWdn
ZXJFbmFibGVkKSkKICAgICAgICAgZW5hYmxlRGVidWdnZXIoZXJhc2VTdGlja3lCcmVha3BvaW50
cyk7CiAjZW5kaWYKIH0KQEAgLTU3Nyw3ICs1ODQsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpy
ZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlQWN0aW9uIGFjdGlvbikKICAgICBBU1NFUlQo
bV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgbV9wcm9m
aWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgpKTsKLSAgICBpZiAobV9zdGF0
ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJFbmFibGVkKSkKKyAgICBpZiAo
bV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpwcm9maWxlckVuYWJsZWQp
KQogICAgICAgICBlbmFibGVQcm9maWxlcigpOwogICAgIGlmIChhY3Rpb24gPT0gUHJvZmlsZXJS
ZXN0b3JlUmVzZXRBZ2VudCkKICAgICAgICAgbV9wcm9maWxlckFnZW50LT5yZXNldEZyb250ZW5k
UHJvZmlsZXMoKTsKQEAgLTY4NywyNyArNjk0LDEwIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNl
dFVzZXJBZ2VudE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIG1fdXNlckFn
ZW50T3ZlcnJpZGUgPSB1c2VyQWdlbnQ7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JBZ2VudDo6dXNl
ckFnZW50T3ZlcnJpZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3VzZXJBZ2VudE92ZXJyaWRl
OwotfQotCi12b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6YXBwbHlVc2VyQWdlbnRPdmVycmlk
ZShTdHJpbmcqIHVzZXJBZ2VudCkgY29uc3QKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZnJvbnRlbmQpIHsKLSAgICAgICAgLy8gT25seSBlbmFi
bGUgbG9hZCB0aW1pbmcgYW5kIHJhdyBoZWFkZXJzIGlmIGZyb250LWVuZCBpcyBhdHRhY2hlZCwg
YXMgb3RoZXJ3aXNlIHdlIG1heSBwcm9kdWNlIG92ZXJoZWFkLgotICAgICAgICByZXF1ZXN0LnNl
dFJlcG9ydExvYWRUaW1pbmcodHJ1ZSk7Ci0gICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0UmF3SGVh
ZGVycyh0cnVlKTsKLQotICAgICAgICBpZiAobV9leHRyYUhlYWRlcnMpIHsKLSAgICAgICAgICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZXh0cmFIZWFkZXJzLT5lbmQo
KTsKLSAgICAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2V4dHJhSGVhZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAg
IHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgaWYgKCFtX3VzZXJBZ2VudE92ZXJyaWRlLmlzRW1wdHkoKSkKKyAg
ICAgICAgKnVzZXJBZ2VudCA9IG1fdXNlckFnZW50T3ZlcnJpZGU7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQWdlbnQ6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCkBAIC03MjIsNyArNzEyLDcgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV9mcm9u
dGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsK
IAotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmls
ZXJFbmFibGVkLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50
U3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JBZ2VudDo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQpAQCAtNzM3LDcgKzcyNyw3IEBAIHZvaWQg
SW5zcGVjdG9yQWdlbnQ6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV9mcm9udGVu
ZCkKICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsKIAot
ICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkLCBmYWxzZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0
YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOwogfQogCiAjaWYgRU5BQkxFKFdP
UktFUlMpCkBAIC05NzMsNyArOTYzLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0g
ICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dXNlckluaXRpYXRlZFByb2Zp
bGluZywgdHJ1ZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRl
Ojp1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCB0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQpAQCAtOTgxLDcgKzk3MSw3IEBAIHZvaWQg
SW5zcGVjdG9yQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICBpZiAoIWVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmcoKTsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0
YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCBmYWxzZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9v
bGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCBmYWxzZSk7
CiB9CiAKIGJvb2wgSW5zcGVjdG9yQWdlbnQ6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0CkBAIC05
OTMsMTMgKzk4MywxMyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjplbmFibGVQcm9maWxlcigpCiB7
CiAgICAgaWYgKHByb2ZpbGVyRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0
ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKKyAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnByb2ZpbGVyRW5hYmxl
ZCwgdHJ1ZSk7CiAgICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUoZmFsc2UpOwogfQogCiB2b2lk
IEluc3BlY3RvckFnZW50OjpkaXNhYmxlUHJvZmlsZXIoKQogewotICAgIG1fc3RhdGUtPnNldEJv
b2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOworICAgIG1fc3Rh
dGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6cHJvZmlsZXJFbmFibGVkLCBmYWxz
ZSk7CiAgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CiB9CiAjZW5kaWYKQEAgLTEwMTQs
NyArMTAwNCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcigp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9mcm9udGVuZCkgewotICAgICAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwor
ICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OmRlYnVnZ2Vy
RW5hYmxlZCwgdHJ1ZSk7CiAgICAgICAgIHNob3dQYW5lbChTY3JpcHRzUGFuZWwpOwogICAgIH0g
ZWxzZQogICAgICAgICBlbmFibGVEZWJ1Z2dlcih0cnVlKTsKQEAgLTEwMjQsMTYgKzEwMTQsMTEg
QEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBlcmFzZVN0aWNreUJy
ZWFrcG9pbnRzKQogewogICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyRW5hYmxl
ZCwgdHJ1ZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpk
ZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCi0g
ICAgaWYgKGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpIHsKLSAgICAgICAgbV9zdGF0ZS0+c2V0T2Jq
ZWN0KEluc3BlY3RvclN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMsIEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOwotICAgICAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6
OmJyb3dzZXJCcmVha3BvaW50cywgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQot
Ci0gICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRo
aXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMpOworICAgIG1fZGVidWdnZXJB
Z2VudCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdl
dCgpLCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKTsKKyAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50
ID0gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBlcmFzZVN0aWNr
eUJyZWFrcG9pbnRzKTsKIAogICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRW5hYmxlZCgpOwog
fQpAQCAtMTA0OCw3ICsxMDMzLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZURlYnVn
Z2VyKCkKIAogICAgIGlmIChtX2Zyb250ZW5kKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRlYnVn
Z2VyV2FzRGlzYWJsZWQoKTsKLSAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6ZGVidWdnZXJFbmFibGVkLCBmYWxzZSk7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6ZGVidWdnZXJFbmFibGVkLCBmYWxzZSk7CiAgICAgfQog
fQogCkBAIC0xMDU3LDExICsxMDQyLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdW1lKCkK
ICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnJlc3Vt
ZSgpOwogfQotCi12b2lkIEluc3BlY3RvckFnZW50OjpzZXRBbGxCcm93c2VyQnJlYWtwb2ludHMo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQotewotICAgIG1fc3RhdGUt
PnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3NlckJyZWFrcG9pbnRzLCBicmVha3BvaW50
cyk7Ci19CiAjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCkBAIC0xMzgwLDE4ICsx
MzYwLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVsb2FkUGFnZSgpCiAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJl
c2goKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQotewotICAgIG1fZXh0cmFIZWFkZXJzID0gYWRv
cHRQdHIobmV3IEhUVFBIZWFkZXJNYXAoKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQoKTsKLSAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmFzU3RyaW5n
KCZ2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9leHRyYUhlYWRlcnMt
PmFkZChpdC0+Zmlyc3QsIHZhbHVlKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDQ3ZDA3MDAuLmI1ZDUwOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC0yNDYsOCArMjQ2LDYgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKCk7CiAgICAgYm9vbCBkZWJ1Z2dlckVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQWdlbnQ7IH0KICAgICB2b2lkIHJlc3VtZSgpOwot
Ci0gICAgdm9pZCBzZXRBbGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KTsKICNlbmRpZgogCiAgICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxlZCBmcm9tIGN1c3Rv
bSBpbXBsZW1lbnRhdGlvbnMuCkBAIC0yNjcsMTEgKzI2NSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CiAgICAg
dm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIGpzb25SZXN1bHQpOwogCi0gICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIEFQSQot
ICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwotCiAgICAgdm9pZCBz
ZXRVc2VyQWdlbnRPdmVycmlkZShjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7Ci0gICAgU3RyaW5n
IHVzZXJBZ2VudE92ZXJyaWRlKCkgY29uc3Q7CisgICAgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJy
aWRlKFN0cmluZyogdXNlckFnZW50KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIHB1c2hE
YXRhQ29sbGVjdGVkT2ZmbGluZSgpOwpAQCAtMzUxLDcgKzM0Niw2IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50PiBtX2Jyb3dzZXJEZWJ1Z2dlckFn
ZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBtX3Byb2ZpbGVyQWdlbnQ7
CiAjZW5kaWYKLSAgICBPd25QdHI8SFRUUEhlYWRlck1hcD4gbV9leHRyYUhlYWRlcnM7CiAgICAg
U3RyaW5nIG1fdXNlckFnZW50T3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludHB0cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4g
V29ya2Vyc01hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDY2ZDNjY2UuLjdmOGQ0NTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtNjEsNiArNjEsMTggQEAgY29uc3QgaW50IGRvbUJyZWFr
cG9pbnREZXJpdmVkVHlwZVNoaWZ0ID0gMTY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFt
ZXNwYWNlIEJyb3dzZXJEZWJ1Z2dlckFnZW50U3RhdGUgeworc3RhdGljIGNvbnN0IGNoYXIgYnJv
d3NlckJyZWFrcG9pbnRzW10gPSAiYnJvd3NlckJyZWFrcG9pbnRzIjsKK30KKworUGFzc093blB0
cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGJvb2wgZXJhc2VT
dGlja3lCcmVha3BvaW50cykKK3sKKyAgICBpZiAoZXJhc2VTdGlja3lCcmVha3BvaW50cykKKyAg
ICAgICAgaW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChCcm93c2VyRGVidWdnZXJB
Z2VudFN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dChpbnNwZWN0b3JBZ2VudCkpOworfQorCiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50KQogICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAgICAsIG1faGFz
WEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTChmYWxzZSkKQEAgLTczLDcgKzg1LDcgQEAgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgp
CiAKIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldEFsbEJyb3dzZXJCcmVh
a3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCiB7Ci0gICAg
bV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93
c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdGF0
ZSgpLT5zZXRPYmplY3QoQnJvd3NlckRlYnVnZ2VyQWdlbnRTdGF0ZTo6YnJvd3NlckJyZWFrcG9p
bnRzLCBicmVha3BvaW50cyk7CiAgICAgaW5zcGVjdGVkVVJMQ2hhbmdlZChtX2luc3BlY3RvckFn
ZW50LT5pbnNwZWN0ZWRVUkxXaXRob3V0RnJhZ21lbnQoKSk7CiB9CiAKQEAgLTgzLDcgKzk1LDcg
QEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIHVybCkKICAgICBtX1hIUkJyZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAg
bV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gZmFsc2U7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCkt
PmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3NlckJyZWFrcG9pbnRzKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1faW5zcGVjdG9yQWdlbnQtPnN0
YXRlKCktPmdldE9iamVjdChCcm93c2VyRGVidWdnZXJBZ2VudFN0YXRlOjpicm93c2VyQnJlYWtw
b2ludHMpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnJlYWtwb2ludHMgPSBhbGxCcmVh
a3BvaW50cy0+Z2V0QXJyYXkodXJsKTsKICAgICBpZiAoIWJyZWFrcG9pbnRzKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudC5oCmluZGV4IDA2NzZjMzAuLjY0ZDVjODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudC5oCkBAIC01MSwxMCArNTEsNyBAQCBjbGFzcyBOb2RlOwogY2xhc3MgSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQoaW5zcGVjdG9yQWdlbnQpKTsKLSAgICB9CisgICAgc3RhdGljIFBh
c3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQsIGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50cyk7CiAKICAg
ICB2aXJ0dWFsIH5JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IDg3
MmNiYjcuLjdkMTFhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC00OSw2ICs0OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsK
IAorbmFtZXNwYWNlIENvbnNvbGVBZ2VudFN0YXRlIHsKK3N0YXRpYyBjb25zdCBjaGFyIG1vbml0
b3JpbmdYSFJbXSA9ICJtb25pdG9yaW5nWEhSIjsKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnNvbGVN
ZXNzYWdlc0VuYWJsZWRbXSA9ICJjb25zb2xlTWVzc2FnZXNFbmFibGVkIjsKK30KKwogSW5zcGVj
dG9yQ29uc29sZUFnZW50OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50KQogICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAg
ICAsIG1fZnJvbnRlbmQoMCkKQEAgLTE2NCw3ICsxNjksNyBAQCB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
dXJsLAogewogICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIpKQorICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5z
dGF0ZSgpLT5nZXRCb29sZWFuKENvbnNvbGVBZ2VudFN0YXRlOjptb25pdG9yaW5nWEhSKSkKICAg
ICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBl
LCBMb2dNZXNzYWdlTGV2ZWwsICJYSFIgZmluaXNoZWQgbG9hZGluZzogXCIiICsgdXJsICsgIlwi
LiIsIHNlbmRMaW5lTnVtYmVyLCBzZW5kVVJMKTsKIH0KIApAQCAtMTkyLDEyICsxOTcsMTIgQEAg
dm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3UKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNl
dE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBtX2luc3BlY3RvckFn
ZW50LT5zdGF0ZSgpLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSLCBl
bmFibGVkKTsKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRCb29sZWFuKENvbnNv
bGVBZ2VudFN0YXRlOjptb25pdG9yaW5nWEhSLCBlbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4oSW5zcGVjdG9yU3Rh
dGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQsIGVuYWJsZWQpOworICAgIG1faW5zcGVjdG9yQWdl
bnQtPnN0YXRlKCktPnNldEJvb2xlYW4oQ29uc29sZUFnZW50U3RhdGU6OmNvbnNvbGVNZXNzYWdl
c0VuYWJsZWQsIGVuYWJsZWQpOwogICAgIGlmICghZW5hYmxlZCB8fCAhbV9mcm9udGVuZCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yMTUsMTIgKzIyMCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6YWRkQ29uc29sZU1lc3NhZ2UoUGFzc093blB0cjxDb25zb2xlTWVzc2FnZT4gY29u
c29sZQogCiAgICAgaWYgKG1fcHJldmlvdXNNZXNzYWdlICYmIG1fcHJldmlvdXNNZXNzYWdlLT5p
c0VxdWFsKGNvbnNvbGVNZXNzYWdlLmdldCgpKSkgewogICAgICAgICBtX3ByZXZpb3VzTWVzc2Fn
ZS0+aW5jcmVtZW50Q291bnQoKTsKLSAgICAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRl
KCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYm
IG1fZnJvbnRlbmQpCisgICAgICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRC
b29sZWFuKENvbnNvbGVBZ2VudFN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAmJiBtX2Zy
b250ZW5kKQogICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPnVwZGF0ZVJlcGVhdENvdW50
SW5Db25zb2xlKG1fZnJvbnRlbmQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fcHJldmlvdXNN
ZXNzYWdlID0gY29uc29sZU1lc3NhZ2UuZ2V0KCk7CiAgICAgICAgIG1fY29uc29sZU1lc3NhZ2Vz
LmFwcGVuZChjb25zb2xlTWVzc2FnZSk7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5z
dGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVk
KSAmJiBtX2Zyb250ZW5kKQorICAgICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+
Z2V0Qm9vbGVhbihDb25zb2xlQWdlbnRTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCkgJiYg
bV9mcm9udGVuZCkKICAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5hZGRUb0Zyb250ZW5k
KG1fZnJvbnRlbmQsIG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgpKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcAppbmRleCBlOTZjMjJiLi45MDRjY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC00Miw4ICs0Miwx
NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorbmFtZXNwYWNlIERl
YnVnZ2VyQWdlbnRTdGF0ZSB7CitzdGF0aWMgY29uc3QgY2hhciBqYXZhU2NyaXB0QnJlYWtwb2lu
dHNbXSA9ICJqYXZhU2NyaXB0QnJlYWtvcGludHMiOworfTsKKworUGFzc093blB0cjxJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9y
QWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGJvb2wg
ZXJhc2VTdGlja3lCcmVha3BvaW50cykKIHsKKyAgICBpZiAoZXJhc2VTdGlja3lCcmVha3BvaW50
cykKKyAgICAgICAgaW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChEZWJ1Z2dlckFn
ZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CisKICAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gYWdlbnQgPSBhZG9wdFB0
cihuZXcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnNwZWN0b3JBZ2VudCwgZnJvbnRlbmQpKTsK
ICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY2xlYXJCcmVha3BvaW50cygpOwogICAg
IC8vIEZJWE1FKFdLNDQ1MTMpOiBicmVha3BvaW50cyBhY3RpdmF0ZWQgZmxhZyBzaG91bGQgYmUg
c3luY2hyb25pemVkIGJldHdlZW4gYWxsIGZyb250LWVuZHMKQEAgLTg1LDcgKzkyLDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYpCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCwgU3RyaW5nKiBvdXRCcmVha3BvaW50
SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxvY2F0aW9ucykKIHsKICAgICBTdHJpbmcgYnJl
YWtwb2ludElkID0gbWFrZVN0cmluZyh1cmwsICI6IiwgU3RyaW5nOjpudW1iZXIobGluZU51bWJl
ciksICI6IiwgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVtYmVyKSk7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgp
LT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFn
ZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJl
YWtwb2ludHMpOwogICAgIGlmIChicmVha3BvaW50c0Nvb2tpZS0+ZmluZChicmVha3BvaW50SWQp
ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwpAQCAtOTUsNyArMTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRKYXZhU2NyaXB0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmUKICAgICBi
cmVha3BvaW50T2JqZWN0LT5zZXRTdHJpbmcoImNvbmRpdGlvbiIsIGNvbmRpdGlvbik7CiAgICAg
YnJlYWtwb2ludE9iamVjdC0+c2V0Qm9vbGVhbigiZW5hYmxlZCIsIGVuYWJsZWQpOwogICAgIGJy
ZWFrcG9pbnRzQ29va2llLT5zZXRPYmplY3QoYnJlYWtwb2ludElkLCBicmVha3BvaW50T2JqZWN0
KTsKLSAgICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRPYmplY3QoSW5zcGVjdG9yU3Rh
dGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgYnJlYWtwb2ludHNDb29raWUpOworICAgIG1faW5z
cGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFT
Y3JpcHRCcmVha3BvaW50cywgYnJlYWtwb2ludHNDb29raWUpOwogCiAgICAgU2NyaXB0QnJlYWtw
b2ludCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBlbmFi
bGVkKTsKICAgICBmb3IgKFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2lu
KCk7IGl0ICE9IG1fc2NyaXB0cy5lbmQoKTsgKytpdCkgewpAQCAtMTI2LDkgKzEzMyw5IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnRCeVNvdXJj
ZUlkKGNvbnN0IFN0cmluZyYgc291CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVt
b3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3Rv
ckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVh
a3BvaW50cyk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUg
PSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRl
OjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGJyZWFrcG9pbnRzQ29va2llLT5yZW1vdmUo
YnJlYWtwb2ludElkKTsKLSAgICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRPYmplY3Qo
SW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgYnJlYWtwb2ludHNDb29raWUp
OworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChEZWJ1Z2dlckFnZW50
U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgYnJlYWtwb2ludHNDb29raWUpOwogCiAgICAg
QnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVn
U2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJl
YWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHMuZW5kKCkpCkBAIC0yNzgsNyArMjg1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcK
ICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0
ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3Rv
ckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0
QnJlYWtwb2ludHMpOwogICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJy
ZWFrcG9pbnRzQ29va2llLT5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7
ICsraXQpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVj
dCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CiAgICAgICAgIFN0cmluZyBicmVha3BvaW50VVJM
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKaW5kZXggZjRlN2U0MS4uODk2MmI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC01Nyw3ICs1Nyw3IEBAIGVudW0gRGVi
dWdnZXJFdmVudFR5cGUgewogY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBT
Y3JpcHREZWJ1Z0xpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFn
ZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JGcm9udGVu
ZCosIGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50cyk7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9y
RGVidWdnZXJBZ2VudCgpOwogCiAgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgdXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZGJiNDcyYS4uY2E3NThhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAK
QEAgLTM4MSw5ICszODEsMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlkZW50
aWZpZXJGb3JJbml0aWFsUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqIGkKICAgICAgICAgcmVz
b3VyY2VBZ2VudC0+aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVl
c3QudXJsKCksIGxvYWRlcik7CiB9CiAKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
cHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQs
IFN0cmluZyogdXNlckFnZW50KQoreworICAgIGluc3BlY3RvckFnZW50LT5hcHBseVVzZXJBZ2Vu
dE92ZXJyaWRlKHVzZXJBZ2VudCk7Cit9CisKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpYywgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgaWMtPndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0
KTsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJp
ZXZlVGltZWxpbmVBZ2VudChpYykpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxTZW5kUmVz
b3VyY2VSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QpOwogICAgIGlmIChJbnNwZWN0b3JSZXNv
dXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGljKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aAppbmRleCAwMmY1ZDNmLi5hNDM3YmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2Fs
Y3VsYXRlU3R5bGUoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWNhbGN1bGF0ZVN0
eWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSosIFN0cmluZyopOwogICAgIHN0YXRp
YyB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAg
ICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3QoRnJhbWUqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpOwogICAgIHN0YXRpYyB2b2lkIG1hcmtSZXNvdXJjZUFzQ2FjaGVkKFBhZ2UqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpAQCAtMjIwLDYgKzIyMSw4IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgZGlkUGFpbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bFJlY2FsY3VsYXRlU3R5bGVJbXBsKEluc3BlY3RvckFnZW50Kik7CiAgICAgc3RhdGljIHZvaWQg
ZGlkUmVjYWxjdWxhdGVTdHlsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnNw
ZWN0b3JBZ2VudCosIFN0cmluZyopOwogICAgIHN0YXRpYyB2b2lkIGlkZW50aWZpZXJGb3JJbml0
aWFsUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgc3RhdGljIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJl
Y3RSZXNwb25zZSk7CiAgICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKElu
c3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTU5Nyw2ICs2MDAs
MTQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppZGVudGlmaWVyRm9y
SW5pdGlhbFJlcXVlc3QoRnJhbWUqIGZyYW1lLAogI2VuZGlmCiB9CiAKK2lubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSogZnJh
bWUsIFN0cmluZyogdXNlckFnZW50KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250
ZW5kRm9yRnJhbWUoZnJhbWUpKQorICAgICAgICBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChp
bnNwZWN0b3JBZ2VudCwgdXNlckFnZW50KTsKKyNlbmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChGcmFtZSogZnJhbWUsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5jcHAKaW5kZXggZDZlNGNjZi4uM2E2OWVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNjcsOSArNjcsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgUmVzb3VyY2VBZ2VudFN0YXRlIHsKK3N0
YXRpYyBjb25zdCBjaGFyIHJlc291cmNlQWdlbnRFbmFibGVkW10gPSAicmVzb3VyY2VBZ2VudEVu
YWJsZWQiOworc3RhdGljIGNvbnN0IGNoYXIgZXh0cmFSZXF1ZXN0SGVhZGVyc1tdID0gImV4dHJh
UmVxdWVzdEhlYWRlcnMiOworfQorCiBQYXNzUmVmUHRyPEluc3BlY3RvclJlc291cmNlQWdlbnQ+
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc3RvcmUoUGFnZSogcGFnZSwgSW5zcGVjdG9yU3Rh
dGUqIHN0YXRlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7Ci0gICAgaWYgKHN0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZUFnZW50RW5hYmxlZCkpCisgICAg
aWYgKHN0YXRlLT5nZXRCb29sZWFuKFJlc291cmNlQWdlbnRTdGF0ZTo6cmVzb3VyY2VBZ2VudEVu
YWJsZWQpKQogICAgICAgICByZXR1cm4gY3JlYXRlKHBhZ2UsIHN0YXRlLCBmcm9udGVuZCk7CiAg
ICAgcmV0dXJuIDA7CiB9CkBAIC0yODcsNyArMjkyLDcgQEAgc3RhdGljIHZvaWQgcG9wdWxhdGVP
YmplY3RXaXRoRnJhbWVSZXNvdXJjZXMoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck8KIAogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6fkluc3BlY3RvclJlc291cmNlQWdlbnQoKQog
ewotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlQWdlbnRF
bmFibGVkLCBmYWxzZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihSZXNvdXJjZUFnZW50U3Rh
dGU6OnJlc291cmNlQWdlbnRFbmFibGVkLCBmYWxzZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgS1VSTCYgdXJsLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQpAQCAtMzAy
LDggKzMwNywyOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZQogICAgIG1fZnJvbnRlbmQtPmlk
ZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChpZGVudGlmaWVyLCB1cmwuc3RyaW5nKCksIGxvYWRl
ck9iamVjdCwgY2FsbFN0YWNrVmFsdWUpOwogfQogCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OnNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykK
K3sKKyAgICBtX3N0YXRlLT5zZXRPYmplY3QoUmVzb3VyY2VBZ2VudFN0YXRlOjpleHRyYVJlcXVl
c3RIZWFkZXJzLCBoZWFkZXJzKTsKK30KKworCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0
KFJlc291cmNlQWdlbnRTdGF0ZTo6ZXh0cmFSZXF1ZXN0SGVhZGVycyk7CisKKyAgICBpZiAoaGVh
ZGVycykgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhl
YWRlcnMtPmVuZCgpOworICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
IFN0cmluZyB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFs
dWUpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJz
dCwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVxdWVzdC5zZXRSZXBvcnRMb2Fk
VGltaW5nKHRydWUpOworICAgIHJlcXVlc3Quc2V0UmVwb3J0UmF3SGVhZGVycyh0cnVlKTsKKwog
ICAgIG1fZnJvbnRlbmQtPndpbGxTZW5kUmVxdWVzdChpZGVudGlmaWVyLCBjdXJyZW50VGltZSgp
LCBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgYnVpbGRPYmplY3RGb3JS
ZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpKTsKIH0KIApAQCAtNDkyLDcgKzUxNyw3
IEBAIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Okluc3BlY3RvclJlc291cmNlQWdlbnQoUGFnZSog
cGFnZSwgSW5zcGVjdG9yU3RhdGUqIHN0YXRlCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogICAgICwg
bV9mcm9udGVuZChmcm9udGVuZCkKIHsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpyZXNvdXJjZUFnZW50RW5hYmxlZCwgdHJ1ZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9v
bGVhbihSZXNvdXJjZUFnZW50U3RhdGU6OnJlc291cmNlQWdlbnRFbmFibGVkLCB0cnVlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKaW5kZXggNmMyZGYyNC4uMjNkYmVlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCkBA
IC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCBmcm9tIGZyb250ZW5kIAog
ICAgIHZvaWQgY2FjaGVkUmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Kik7CiAgICAg
dm9pZCByZXNvdXJjZUNvbnRlbnQodW5zaWduZWQgbG9uZyBmcmFtZUlELCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBiYXNlNjRFbmNvZGUsIFN0cmluZyogY29udGVudCk7CisgICAgdm9pZCBzZXRF
eHRyYUhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKIAogcHJpdmF0ZToKICAg
ICBJbnNwZWN0b3JSZXNvdXJjZUFnZW50KFBhZ2UqIHBhZ2UsIEluc3BlY3RvclN0YXRlKiwgSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3RhdGUuY3BwCmluZGV4IDc3OWQ0NjRkLi5iN2U2NmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTI0ICszNyw2NSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcHJvcGVydGllcyhJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKQogewotICAgIC8vIFB1cmUgcmVsb2FkIHN0YXRlCi0g
ICAgcmVnaXN0ZXJCb29sZWFuKHVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIGZhbHNlKTsKLSAgICBy
ZWdpc3RlckJvb2xlYW4odGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlKTsKLSAgICByZWdp
c3RlckJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZSwgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVh
bihkZWJ1Z2dlckVuYWJsZWQsIGZhbHNlKTsKLSAgICByZWdpc3RlckJvb2xlYW4ocHJvZmlsZXJF
bmFibGVkLCBmYWxzZSk7Ci0gICAgcmVnaXN0ZXJPYmplY3QoamF2YVNjcmlwdEJyZWFrcG9pbnRz
KTsKLSAgICByZWdpc3Rlck9iamVjdChicm93c2VyQnJlYWtwb2ludHMpOwotICAgIHJlZ2lzdGVy
Qm9vbGVhbihjb25zb2xlTWVzc2FnZXNFbmFibGVkLCBmYWxzZSk7Ci0gICAgcmVnaXN0ZXJCb29s
ZWFuKG1vbml0b3JpbmdYSFIsIGZhbHNlKTsKLSAgICByZWdpc3RlckJvb2xlYW4ocmVzb3VyY2VB
Z2VudEVuYWJsZWQsIGZhbHNlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZy
b21JbnNwZWN0b3JDb29raWUoY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4ganNvblZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29uKTsK
LSAgICBpZiAoIWpzb25WYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4ganNvbk9iamVjdCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAo
IWpzb25PYmplY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciBpID0ganNvbk9iamVjdC0+YmVnaW4oKTsgaSAhPSBqc29uT2JqZWN0LT5lbmQo
KTsgKytpKSB7Ci0gICAgICAgIEluc3BlY3RvclByb3BlcnR5SWQgaWQgPSAoSW5zcGVjdG9yUHJv
cGVydHlJZClpLT5maXJzdC50b0ludCgpOwotICAgICAgICBBU1NFUlQoaWQgPiAwICYmIGlkIDwg
bGFzdFByb3BlcnR5SWQpOwotICAgICAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaiA9IG1fcHJv
cGVydGllcy5maW5kKGlkKTsKLSAgICAgICAgQVNTRVJUKGogIT0gbV9wcm9wZXJ0aWVzLmVuZCgp
KTsKLSAgICAgICAgQVNTRVJUKGotPnNlY29uZC5tX3ZhbHVlLT50eXBlKCkgPT0gaS0+c2Vjb25k
LT50eXBlKCkpOwotICAgICAgICBqLT5zZWNvbmQubV92YWx1ZSA9IGktPnNlY29uZDsKLSAgICB9
CisgICAgaWYgKGpzb25WYWx1ZSkKKyAgICAgICAgbV9wcm9wZXJ0aWVzID0ganNvblZhbHVlLT5h
c09iamVjdCgpOworICAgIGlmICghbV9wcm9wZXJ0aWVzKQorICAgICAgICBtX3Byb3BlcnRpZXMg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvclN0YXRlOjp1
cGRhdGVDb29raWUoKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvb2tpZU9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChQcm9wZXJ0eU1hcDo6aXRl
cmF0b3IgaSA9IG1fcHJvcGVydGllcy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsg
KytpKQotICAgICAgICBjb29raWVPYmplY3QtPnNldFZhbHVlKFN0cmluZzo6bnVtYmVyKGktPmZp
cnN0KSwgaS0+c2Vjb25kLm1fdmFsdWUpOwotICAgIG1fY2xpZW50LT51cGRhdGVJbnNwZWN0b3JT
dGF0ZUNvb2tpZShjb29raWVPYmplY3QtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2NsaWVudC0+
dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUobV9wcm9wZXJ0aWVzLT50b0pTT05TdHJpbmcoKSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnNldFZhbHVlKEluc3BlY3RvclByb3BlcnR5SWQg
aWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQordm9pZCBJbnNwZWN0b3JTdGF0
ZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQogewotICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9w
ZXJ0aWVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7Ci0g
ICAgaS0+c2Vjb25kLm1fdmFsdWUgPSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMtPnNldFZhbHVl
KHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIHVwZGF0ZUNvb2tpZSgpOwogfQogCi1ib29sIElu
c3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQgaWQpCitib29sIElu
c3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewot
ICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOwotICAg
IEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpp
dGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wg
dmFsdWUgPSBmYWxzZTsKLSAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNCb29sZWFuKCZ2YWx1ZSk7
CisgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCisgICAgICAgIGl0LT5zZWNvbmQt
PmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotU3RyaW5nIEluc3Bl
Y3RvclN0YXRlOjpnZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKK1N0cmluZyBJbnNw
ZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAg
IFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOwotICAgIEFT
U0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIFN0cmluZyB2
YWx1ZTsKLSAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKTsKKyAgICBpZiAo
aXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKKyAgICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmco
JnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLWxvbmcgSW5zcGVjdG9yU3RhdGU6Omdl
dExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKK2xvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExv
bmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgUHJvcGVydHlNYXA6Oml0ZXJh
dG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0
aWVzLmVuZCgpKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0
aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9uZyB2YWx1ZSA9IDA7Ci0gICAgaS0+c2Vj
b25kLm1fdmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAgaWYgKGl0ICE9IG1fcHJvcGVydGll
cy0+ZW5kKCkpCisgICAgICAgIGl0LT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSk7CiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3Rh
dGU6OmdldE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQotewotICAgIFByb3BlcnR5TWFw
OjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpICE9IG1f
cHJvcGVydGllcy5lbmQoKSk7Ci0gICAgcmV0dXJuIGktPnNlY29uZC5tX3ZhbHVlLT5hc09iamVj
dCgpOwotfQotCi12b2lkIEluc3BlY3RvclN0YXRlOjpzZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVy
dHlJZCBpZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRp
ZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKLSAgICBQ
cm9wZXJ0eSYgcHJvcGVydHkgPSBpLT5zZWNvbmQ7Ci0gICAgcHJvcGVydHkubV92YWx1ZSA9IHZh
bHVlOwotICAgIHVwZGF0ZUNvb2tpZSgpOwotfQotCi12b2lkIEluc3BlY3RvclN0YXRlOjpyZWdp
c3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlKQot
ewotICAgIG1fcHJvcGVydGllcy5zZXQocHJvcGVydHlJZCwgUHJvcGVydHk6OmNyZWF0ZShJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3Rh
dGU6OnJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3Bl
cnR5OjpjcmVhdGUoSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpKSk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyTG9uZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5
SWQsIGxvbmcgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9w
ZXJ0eTo6Y3JlYXRlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSkp
OwotfQotCi12b2lkIEluc3BlY3RvclN0YXRlOjpyZWdpc3Rlck9iamVjdChJbnNwZWN0b3JQcm9w
ZXJ0eUlkIHByb3BlcnR5SWQpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQ
cm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpKTsKLX0KLQotSW5zcGVj
dG9yU3RhdGU6OlByb3BlcnR5IEluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotewotICAgIFByb3BlcnR5IHByb3BlcnR5Owot
ICAgIHByb3BlcnR5Lm1fdmFsdWUgPSB2YWx1ZTsKLSAgICByZXR1cm4gcHJvcGVydHk7CisgICAg
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0
eU5hbWUpOworICAgIGlmIChpdCA9PSBtX3Byb3BlcnRpZXMtPmVuZCgpKSB7CisgICAgICAgIG1f
cHJvcGVydGllcy0+c2V0T2JqZWN0KHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSk7CisgICAgICAgIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiBpdC0+c2Vjb25kLT5hc09iamVjdCgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCmlu
ZGV4IDkwYTJjMTcuLjI2ODNhMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5oCkBAIC0xLDI5ICsxLDMxIEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
SW5zcGVjdG9yU3RhdGVfaApAQCAtNDMsNTEgKzQ1LDI2IEBAIGNsYXNzIEluc3BlY3RvckNsaWVu
dDsKIAogY2xhc3MgSW5zcGVjdG9yU3RhdGUgewogcHVibGljOgotICAgIGVudW0gSW5zcGVjdG9y
UHJvcGVydHlJZCB7Ci0gICAgICAgIG1vbml0b3JpbmdYSFIgPSAxLAotICAgICAgICB0aW1lbGlu
ZVByb2ZpbGVyRW5hYmxlZCwKLSAgICAgICAgc2VhcmNoaW5nRm9yTm9kZSwKLSAgICAgICAgY29u
c29sZU1lc3NhZ2VzRW5hYmxlZCwKLSAgICAgICAgcHJvZmlsZXJFbmFibGVkLAotICAgICAgICB1
c2VySW5pdGlhdGVkUHJvZmlsaW5nLAotICAgICAgICBkZWJ1Z2dlckVuYWJsZWQsCi0gICAgICAg
IGphdmFTY3JpcHRCcmVha3BvaW50cywKLSAgICAgICAgYnJvd3NlckJyZWFrcG9pbnRzLAotICAg
ICAgICByZXNvdXJjZUFnZW50RW5hYmxlZCwKLSAgICAgICAgbGFzdFByb3BlcnR5SWQKLSAgICB9
OwotCiAgICAgSW5zcGVjdG9yU3RhdGUoSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpOwogCiAgICAg
dm9pZCByZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb25TdHJpbmcp
OwogCi0gICAgYm9vbCBnZXRCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQpOwotICAgIFN0cmlu
ZyBnZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCk7Ci0gICAgbG9uZyBnZXRMb25nKEluc3Bl
Y3RvclByb3BlcnR5SWQpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmpl
Y3QoSW5zcGVjdG9yUHJvcGVydHlJZCk7CisgICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKTsKKyAgICBsb25nIGdldExvbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBzZXRCb29sZWFuKEluc3BlY3RvclByb3BlcnR5
SWQgcHJvcGVydHlJZCwgYm9vbCB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0
b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsgfQotICAgIHZvaWQgc2V0U3RyaW5nKEluc3Bl
Y3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBzZXRWYWx1
ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOyB9Ci0gICAgdm9p
ZCBzZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSkgeyBz
ZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2
YWx1ZSkpOyB9Ci0gICAgdm9pZCBzZXRPYmplY3QoSW5zcGVjdG9yUHJvcGVydHlJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKTsKKyAgICB2b2lkIHNldEJvb2xlYW4oY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlOYW1l
LCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsgfQorICAgIHZvaWQgc2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNl
dFZhbHVlKHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpKTsgfQor
ICAgIHZvaWQgc2V0TG9uZyhjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgbG9uZyB2YWx1ZSkg
eyBzZXRWYWx1ZShwcm9wZXJ0eU5hbWUsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91
YmxlKXZhbHVlKSk7IH0KKyAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKSB7IHNldFZhbHVlKHByb3Bl
cnR5TmFtZSwgdmFsdWUpOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDb29raWUoKTsK
LSAgICB2b2lkIHNldFZhbHVlKEluc3BlY3RvclByb3BlcnR5SWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KTsKLQotICAgIHN0cnVjdCBQcm9wZXJ0eSB7Ci0gICAgICAgIHN0YXRpYyBQcm9w
ZXJ0eSBjcmVhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOwotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fdmFsdWU7Ci0gICAgfTsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8bG9uZywgUHJvcGVydHk+IFByb3BlcnR5TWFwOwotICAgIFByb3BlcnR5TWFwIG1fcHJvcGVy
dGllczsKLQotICAgIHZvaWQgcmVnaXN0ZXJCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQsIGJv
b2wgdmFsdWUpOwotICAgIHZvaWQgcmVnaXN0ZXJTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCByZWdpc3RlckxvbmcoSW5zcGVjdG9yUHJv
cGVydHlJZCwgbG9uZyB2YWx1ZSk7Ci0gICAgdm9pZCByZWdpc3Rlck9iamVjdChJbnNwZWN0b3JQ
cm9wZXJ0eUlkKTsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CiAKICAgICBJbnNwZWN0b3JDbGllbnQqIG1f
Y2xpZW50OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcHJvcGVydGllczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CmluZGV4IDcxZjYyNWMuLmY1NzVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcApAQCAtMjU1NSwxNCArMjU1NSw5IEBAIGludCBGcmFtZUxvYWRlcjo6bnVtUGVuZGluZ09y
TG9hZGluZ1JlcXVlc3RzKGJvb2wgcmVjdXJzZSkgY29uc3QKIAogU3RyaW5nIEZyYW1lTG9hZGVy
Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYgdXJsKSBjb25zdAogewotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgU3Ry
aW5nIHVzZXJBZ2VudE92ZXJyaWRlID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT51c2Vy
QWdlbnRPdmVycmlkZSgpOwotICAgICAgICBpZiAoIXVzZXJBZ2VudE92ZXJyaWRlLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybiB1c2VyQWdlbnRPdmVycmlkZTsKLSAgICB9Ci0jZW5kaWYK
LSAgICByZXR1cm4gbV9jbGllbnQtPnVzZXJBZ2VudCh1cmwpOworICAgIFN0cmluZyB1c2VyQWdl
bnQgPSBtX2NsaWVudC0+dXNlckFnZW50KHVybCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKG1fZnJhbWUsICZ1c2VyQWdlbnQpOworICAgIHJl
dHVybiB1c2VyQWdlbnQ7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZWRPbmxvYWRFdmVu
dHMoKQo=
</data>
<flag name="review"
          id="73074"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81625</attachid>
            <date>2011-02-08 05:48:12 -0800</date>
            <delta_ts>2011-02-08 05:48:12 -0800</delta_ts>
            <desc>landed patch</desc>
            <filename>inspector-state-refactoring.diff</filename>
            <type>text/plain</type>
            <size>45262</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZDU4YzVlLi4xNjAwNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTEtMDItMDQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtyZWZhY290cmluZ10gbWVyZ2UgSW5zcGVjdG9yQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCgp
IGludG8gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODkKKyAgICAgICAgIC0gcGVyZm9ybSBVc2VyQWdlbnQg
b3ZlcnJpZGUgdmlhIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgorICAgICAgICAgLSBtb3ZlIGFk
ZGluZyBleHRyYSByZXF1ZXN0IGhlYWRlcnMgdG8gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudAorICAg
ICAgICAgLSBzaW1wbGlmaWVkIHRoaW5ncyBpbiBJbnNwZWN0b3JTdGF0ZQorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNjb25uZWN0RnJv
bnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmFwcGx5VXNlckFnZW50
T3ZlcnJpZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5k
UmVxdWVzdEltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlV
c2VyQWdlbnRPdmVycmlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0
RXh0cmFIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6dXBkYXRlQ29va2llKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdGF0ZTo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0
ZTo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRMb25n
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3RhdGU6OnNldE9iamVjdCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1c2VyQWdlbnQpOgorCiAyMDExLTAyLTA4
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsCmluZGV4IDk2NmQ2OWIuLmVhMGY0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCkBAIC02Miw3ICs2Miw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2RvbWFp
bj1JbnNwZWN0b3JdIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KCk7CiAgICAgICAgIFtub3RpZnks
IGRvbWFpbj1JbnNwZWN0b3JdIHZvaWQgdXBkYXRlRm9jdXNlZE5vZGUob3V0IGxvbmcgbm9kZUlk
KTsKIAotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRFeHRyYUhlYWRlcnMoaW4g
T2JqZWN0IGhlYWRlcnMpOwogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRVc2Vy
QWdlbnRPdmVycmlkZShpbiBTdHJpbmcgdXNlckFnZW50KTsKIAogICAgICAgICBbZG9tYWluPUlu
c3BlY3Rvcl0gdm9pZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQgU3RyaW5nIGNv
b2tpZXNTdHJpbmcpOwpAQCAtMTAyLDYgKzEwMSw3IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgICAg
ICBbZG9tYWluPU5ldHdvcmtdIHZvaWQgY2FjaGVkUmVzb3VyY2VzKG91dCBPYmplY3QgcmVzb3Vy
Y2VzKTsKICAgICAgICAgW2RvbWFpbj1OZXR3b3JrXSB2b2lkIHJlc291cmNlQ29udGVudChpbiB1
bnNpZ25lZCBsb25nIGZyYW1lSWQsIGluIFN0cmluZyB1cmwsIGluIGJvb2xlYW4gYmFzZTY0RW5j
b2RlLCBvdXQgU3RyaW5nIGNvbnRlbnQpOworICAgICAgICBbZG9tYWluPU5ldHdvcmtdIHZvaWQg
c2V0RXh0cmFIZWFkZXJzKGluIE9iamVjdCBoZWFkZXJzKTsKIAogICAgICAgICBbbm90aWZ5LCBk
b21haW49TmV0d29ya10gdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudChvdXQgdW5zaWduZWQg
bG9uZyBmcmFtZUlkKTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPU5ldHdvcmtdIHZvaWQgaWRl
bnRpZmllckZvckluaXRpYWxSZXF1ZXN0KG91dCBsb25nIGlkZW50aWZpZXIsIG91dCBTdHJpbmcg
dXJsLCBvdXQgT2JqZWN0IGxvYWRlciwgb3V0IFZhbHVlIGNhbGxTdGFjayk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCA2NWRkMjFhLi5lYTRkYzBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTEy
OSw2ICsxMjksMTQgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCituYW1lc3BhY2UgSW5zcGVjdG9yQWdlbnRTdGF0ZSB7CitzdGF0aWMgY29uc3QgY2hhciBz
ZWFyY2hpbmdGb3JOb2RlW10gPSAic2VhcmNoaW5nRm9yTm9kZSI7CitzdGF0aWMgY29uc3QgY2hh
ciB0aW1lbGluZVByb2ZpbGVyRW5hYmxlZFtdID0gInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIjsK
K3N0YXRpYyBjb25zdCBjaGFyIHVzZXJJbml0aWF0ZWRQcm9maWxpbmdbXSA9ICJ1c2VySW5pdGlh
dGVkUHJvZmlsaW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRlYnVnZ2VyRW5hYmxlZFtdID0gImRl
YnVnZ2VyRW5hYmxlZCI7CitzdGF0aWMgY29uc3QgY2hhciBwcm9maWxlckVuYWJsZWRbXSA9ICJw
cm9maWxlckVuYWJsZWQiOworfQorCiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6
RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JB
Z2VudDo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVj
dG9yQWdlbnQ6OlNjcmlwdHNQYW5lbCA9ICJzY3JpcHRzIjsKQEAgLTE5Myw3ICsyMDEsNyBAQCBi
b29sIEluc3BlY3RvckFnZW50OjplbmFibGVkKCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JBZ2Vu
dDo6c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpOworICAgIHJldHVy
biBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnNlYXJjaGluZ0Zvck5v
ZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9t
Q29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29raWUpCkBAIC0yMTAsMTMgKzIx
OCwxMyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29v
a2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdAogCiAgICAgbV9yZXNvdXJjZUFnZW50ID0g
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzdG9yZShtX2luc3BlY3RlZFBhZ2UsIG1fc3RhdGUu
Z2V0KCksIG1fZnJvbnRlbmQuZ2V0KCkpOwogCi0gICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKSkKKyAgICBpZiAobV9zdGF0
ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxl
ZCkpCiAgICAgICAgIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwogCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgcmVzdG9yZURlYnVnZ2VyKGZhbHNlKTsKICAgICByZXN0b3Jl
UHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCk7Ci0gICAgaWYgKG1fc3RhdGUtPmdl
dEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcpKQorICAgIGlm
IChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnVzZXJJbml0aWF0ZWRQ
cm9maWxpbmcpKQogICAgICAgICBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICNlbmRp
ZgogfQpAQCAtMzQ2LDcgKzM1NCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFNlYXJjaGlu
Z0Zvck5vZGUoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChzZWFyY2hpbmdGb3JOb2RlSW5QYWdl
KCkgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUsIGVuYWJsZWQpOworICAgIG1fc3RhdGUt
PnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSwgZW5hYmxl
ZCk7CiAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICBoaWRlSGlnaGxpZ2h0KCk7CiB9CkBAIC00
NjQsNyArNDcyLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZyb250ZW5kKCkK
IAogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAgICAgbV90aW1lbGluZUFn
ZW50LmNsZWFyKCk7Ci0gICAgbV9leHRyYUhlYWRlcnMuY2xlYXIoKTsKICAgICBtX3VzZXJBZ2Vu
dE92ZXJyaWRlID0gIiI7CiB9CiAKQEAgLTU2Nyw3ICs1NzQsNyBAQCB2b2lkIEluc3BlY3RvckFn
ZW50OjpyZXN0b3JlRGVidWdnZXIoYm9vbCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKQogewogICAg
IEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAg
ICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJFbmFibGVk
KSkKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpkZWJ1
Z2dlckVuYWJsZWQpKQogICAgICAgICBlbmFibGVEZWJ1Z2dlcihlcmFzZVN0aWNreUJyZWFrcG9p
bnRzKTsKICNlbmRpZgogfQpAQCAtNTc3LDcgKzU4NCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6
OnJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24gYWN0aW9uKQogICAgIEFTU0VS
VChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBtX3By
b2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmIChtX3N0
YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9maWxlckVuYWJsZWQpKQorICAgIGlm
IChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnByb2ZpbGVyRW5hYmxl
ZCkpCiAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAgICAgaWYgKGFjdGlvbiA9PSBQcm9maWxl
clJlc3RvcmVSZXNldEFnZW50KQogICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnJlc2V0RnJvbnRl
bmRQcm9maWxlcygpOwpAQCAtNjg3LDI3ICs2OTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6
c2V0VXNlckFnZW50T3ZlcnJpZGUoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiAgICAgbV91c2Vy
QWdlbnRPdmVycmlkZSA9IHVzZXJBZ2VudDsKIH0KIAotU3RyaW5nIEluc3BlY3RvckFnZW50Ojp1
c2VyQWdlbnRPdmVycmlkZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXNlckFnZW50T3ZlcnJp
ZGU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit2b2lkIEluc3BlY3RvckFnZW50OjphcHBseVVzZXJBZ2VudE92ZXJy
aWRlKFN0cmluZyogdXNlckFnZW50KSBjb25zdAogewotICAgIGlmICghZW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkgewotICAgICAgICAvLyBPbmx5IGVu
YWJsZSBsb2FkIHRpbWluZyBhbmQgcmF3IGhlYWRlcnMgaWYgZnJvbnQtZW5kIGlzIGF0dGFjaGVk
LCBhcyBvdGhlcndpc2Ugd2UgbWF5IHByb2R1Y2Ugb3ZlcmhlYWQuCi0gICAgICAgIHJlcXVlc3Qu
c2V0UmVwb3J0TG9hZFRpbWluZyh0cnVlKTsKLSAgICAgICAgcmVxdWVzdC5zZXRSZXBvcnRSYXdI
ZWFkZXJzKHRydWUpOwotCi0gICAgICAgIGlmIChtX2V4dHJhSGVhZGVycykgewotICAgICAgICAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9leHRyYUhlYWRlcnMtPmVu
ZCgpOwotICAgICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fZXh0cmFIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBpZiAoIW1fdXNlckFnZW50T3ZlcnJpZGUuaXNFbXB0eSgpKQor
ICAgICAgICAqdXNlckFnZW50ID0gbV91c2VyQWdlbnRPdmVycmlkZTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKQEAgLTcyMiw3ICs3MTIsNyBAQCB2
b2lkIEluc3BlY3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zy
b250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgp
OwogCi0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9m
aWxlckVuYWJsZWQsIHRydWUpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdl
bnRTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIHRydWUpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckFnZW50OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCkBAIC03MzcsNyArNzI3LDcgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zyb250
ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwog
Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxl
ckVuYWJsZWQsIGZhbHNlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50
U3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7CiB9CiAKICNpZiBFTkFCTEUo
V09SS0VSUykKQEAgLTk3Myw3ICs5NjMsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpzdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgbV9wcm9maWxlckFnZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsK
LSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVkUHJv
ZmlsaW5nLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3Rh
dGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckFn
ZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCkBAIC05ODEsNyArOTcxLDcgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIGlmICgh
ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9maWxlckFnZW50LT5zdG9wVXNl
ckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9y
U3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIGZhbHNlKTsKKyAgICBtX3N0YXRlLT5zZXRC
b29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIGZhbHNl
KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBZ2VudDo6cHJvZmlsZXJFbmFibGVkKCkgY29uc3QKQEAg
LTk5MywxMyArOTgzLDEzIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZVByb2ZpbGVyKCkK
IHsKICAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9maWxlckVuYWJsZWQsIHRydWUpOwor
ICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6cHJvZmlsZXJFbmFi
bGVkLCB0cnVlKTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZShmYWxzZSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVQcm9maWxlcigpCiB7Ci0gICAgbV9zdGF0ZS0+c2V0
Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7CisgICAgbV9z
dGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpwcm9maWxlckVuYWJsZWQsIGZh
bHNlKTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmRpc2FibGUoKTsKIH0KICNlbmRpZgpAQCAtMTAx
NCw3ICsxMDA0LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2hvd0FuZEVuYWJsZURlYnVnZ2Vy
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Zyb250ZW5kKSB7Ci0gICAgICAgIG1f
c3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyRW5hYmxlZCwgdHJ1ZSk7
CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6ZGVidWdn
ZXJFbmFibGVkLCB0cnVlKTsKICAgICAgICAgc2hvd1BhbmVsKFNjcmlwdHNQYW5lbCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyKHRydWUpOwpAQCAtMTAyNCwxNiArMTAxNCwx
MSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcihib29sIGVyYXNlU3RpY2t5
QnJlYWtwb2ludHMpCiB7CiAgICAgaWYgKGRlYnVnZ2VyRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJFbmFi
bGVkLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6
OmRlYnVnZ2VyRW5hYmxlZCwgdHJ1ZSk7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAK
LSAgICBpZiAoZXJhc2VTdGlja3lCcmVha3BvaW50cykgewotICAgICAgICBtX3N0YXRlLT5zZXRP
YmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0
ZTo6YnJvd3NlckJyZWFrcG9pbnRzLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
Ci0KLSAgICBtX2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUo
dGhpcywgbV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgbV9icm93c2VyRGVidWdnZXJBZ2VudCA9IElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcyk7CisgICAgbV9kZWJ1Z2dl
ckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQu
Z2V0KCksIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdl
bnQgPSBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIGVyYXNlU3Rp
Y2t5QnJlYWtwb2ludHMpOwogCiAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFibGVkKCk7
CiB9CkBAIC0xMDQ4LDcgKzEwMzMsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaXNhYmxlRGVi
dWdnZXIoKQogCiAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGVi
dWdnZXJXYXNEaXNhYmxlZCgpOwotICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIGZhbHNlKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9v
bGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIGZhbHNlKTsKICAgICB9
CiB9CiAKQEAgLTEwNTcsMTEgKzEwNDIsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN1bWUo
KQogICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVz
dW1lKCk7CiB9Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEFsbEJyb3dzZXJCcmVha3BvaW50
cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCi17Ci0gICAgbV9zdGF0
ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9p
bnRzKTsKLX0KICNlbmRpZgogCiB2b2lkIEluc3BlY3RvckFnZW50OjpldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKQEAgLTEzNzgsMTgg
KzEzNTgsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQYWdlKGJvb2wgaWdub3JlQ2Fj
aGUpCiAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPnJlbG9hZChp
Z25vcmVDYWNoZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEV4dHJhSGVhZGVycyhQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykKLXsKLSAgICBtX2V4dHJhSGVhZGVy
cyA9IGFkb3B0UHRyKG5ldyBIVFRQSGVhZGVyTWFwKCkpOwotICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7Ci0gICAgZm9yIChJbnNwZWN0b3JP
YmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5h
c1N0cmluZygmdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fZXh0cmFI
ZWFkZXJzLT5hZGQoaXQtPmZpcnN0LCB2YWx1ZSk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA5ODdiNzdjLi4yOTExNmNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaApAQCAtMjQ2LDggKzI0Niw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcigpOwogICAgIGJvb2wgZGVidWdnZXJF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9CiAgICAgdm9pZCByZXN1
bWUoKTsKLQotICAgIHZvaWQgc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0Pik7CiAjZW5kaWYKIAogICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJv
bSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgpAQCAtMjY3LDExICsyNjUsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUp
OwogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAotICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
biBBUEkKLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKLQogICAg
IHZvaWQgc2V0VXNlckFnZW50T3ZlcnJpZGUoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwotICAg
IFN0cmluZyB1c2VyQWdlbnRPdmVycmlkZSgpIGNvbnN0OworICAgIHZvaWQgYXBwbHlVc2VyQWdl
bnRPdmVycmlkZShTdHJpbmcqIHVzZXJBZ2VudCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKTsKQEAgLTM1MSw3ICszNDYsNiBAQCBwcml2YXRl
OgogICAgIE93blB0cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gbV9icm93c2VyRGVi
dWdnZXJBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9wcm9maWxl
ckFnZW50OwogI2VuZGlmCi0gICAgT3duUHRyPEhUVFBIZWFkZXJNYXA+IG1fZXh0cmFIZWFkZXJz
OwogICAgIFN0cmluZyBtX3VzZXJBZ2VudE92ZXJyaWRlOwogI2lmIEVOQUJMRShXT1JLRVJTKQog
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291
cmNlPiA+IFdvcmtlcnNNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA2NmQzY2NlLi41ZmU5
OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTYxLDEwICs2MSwyMSBAQCBjb25zdCBpbnQg
ZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQorbmFtZXNwYWNlIEJyb3dz
ZXJEZWJ1Z2dlckFnZW50U3RhdGUgeworc3RhdGljIGNvbnN0IGNoYXIgYnJvd3NlckJyZWFrcG9p
bnRzW10gPSAiYnJvd3NlckJyZWFrcG9pbnRzIjsKK30KKworUGFzc093blB0cjxJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZShJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGJvb2wgZXJhc2VTdGlja3lCcmVha3Bv
aW50cykKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50KGluc3BlY3RvckFnZW50LCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKSk7Cit9CisKK0lu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGJvb2wgZXJhc2VTdGlja3lCcmVha3Bv
aW50cykKICAgICA6IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2hh
c1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwoZmFsc2UpCiB7CisgICAgaWYgKGVyYXNlU3RpY2t5
QnJlYWtwb2ludHMpCisgICAgICAgIGluc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRPYmplY3Qo
QnJvd3NlckRlYnVnZ2VyQWdlbnRTdGF0ZTo6YnJvd3NlckJyZWFrcG9pbnRzLCBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKIH0KIAogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5J
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpCkBAIC03Myw3ICs4NCw3IEBAIEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKQog
CiB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRBbGxCcm93c2VyQnJlYWtw
b2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQogewotICAgIG1f
aW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3Nl
ckJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUo
KS0+c2V0T2JqZWN0KEJyb3dzZXJEZWJ1Z2dlckFnZW50U3RhdGU6OmJyb3dzZXJCcmVha3BvaW50
cywgYnJlYWtwb2ludHMpOwogICAgIGluc3BlY3RlZFVSTENoYW5nZWQobV9pbnNwZWN0b3JBZ2Vu
dC0+aW5zcGVjdGVkVVJMV2l0aG91dEZyYWdtZW50KCkpOwogfQogCkBAIC04Myw3ICs5NCw3IEBA
IHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJiB1cmwpCiAgICAgbV9YSFJCcmVha3BvaW50cy5jbGVhcigpOwogICAgIG1f
aGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNlOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYWxsQnJlYWtwb2ludHMgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5n
ZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cyk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYWxsQnJlYWtwb2ludHMgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0
ZSgpLT5nZXRPYmplY3QoQnJvd3NlckRlYnVnZ2VyQWdlbnRTdGF0ZTo6YnJvd3NlckJyZWFrcG9p
bnRzKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJyZWFrcG9pbnRzID0gYWxsQnJlYWtw
b2ludHMtPmdldEFycmF5KHVybCk7CiAgICAgaWYgKCFicmVha3BvaW50cykKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwNjc2YzMwLi5mYWM1NGJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuaApAQCAtNTEsMTAgKzUxLDcgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50KGluc3BlY3RvckFnZW50KSk7Ci0gICAgfQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQWdl
bnQqLCBib29sIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpOwogCiAgICAgdmlydHVhbCB+SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsKIApAQCAtNzksNyArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChjb25zdCBTdHJpbmcmIGNhdGVnb3J5
VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGJvb2wgc3luY2hyb25vdXMpOwogCiBwcml2
YXRlOgotICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50Kik7
CisgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQWdlbnQqLCBib29s
IGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpOwogCiAgICAgdm9pZCByZXN0b3JlU3RpY2t5QnJlYWtw
b2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXgg
ODcyY2JiNy4uN2QxMWE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTQ5LDYgKzQ5LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtQ29uc29sZU1lc3NhZ2VzID0gMTAw
MDsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBleHBpcmVDb25zb2xlTWVzc2FnZXNTdGVwID0gMTAw
OwogCituYW1lc3BhY2UgQ29uc29sZUFnZW50U3RhdGUgeworc3RhdGljIGNvbnN0IGNoYXIgbW9u
aXRvcmluZ1hIUltdID0gIm1vbml0b3JpbmdYSFIiOworc3RhdGljIGNvbnN0IGNoYXIgY29uc29s
ZU1lc3NhZ2VzRW5hYmxlZFtdID0gImNvbnNvbGVNZXNzYWdlc0VuYWJsZWQiOworfQorCiBJbnNw
ZWN0b3JDb25zb2xlQWdlbnQ6Okluc3BlY3RvckNvbnNvbGVBZ2VudChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQpCiAgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQog
ICAgICwgbV9mcm9udGVuZCgwKQpAQCAtMTY0LDcgKzE2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5n
JiB1cmwsCiB7CiAgICAgaWYgKCFtX2luc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAobV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihJ
bnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUikpCisgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQt
PnN0YXRlKCktPmdldEJvb2xlYW4oQ29uc29sZUFnZW50U3RhdGU6Om1vbml0b3JpbmdYSFIpKQog
ICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5
cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1cmwgKyAi
XCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogfQogCkBAIC0xOTIsMTIgKzE5NywxMiBA
QCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIG1faW5zcGVjdG9y
QWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIs
IGVuYWJsZWQpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4oQ29u
c29sZUFnZW50U3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6c2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCwgZW5hYmxlZCk7CisgICAgbV9pbnNwZWN0b3JB
Z2VudC0+c3RhdGUoKS0+c2V0Qm9vbGVhbihDb25zb2xlQWdlbnRTdGF0ZTo6Y29uc29sZU1lc3Nh
Z2VzRW5hYmxlZCwgZW5hYmxlZCk7CiAgICAgaWYgKCFlbmFibGVkIHx8ICFtX2Zyb250ZW5kKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTIxNSwxMiArMjIwLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjphZGRDb25zb2xlTWVzc2FnZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPiBj
b25zb2xlCiAKICAgICBpZiAobV9wcmV2aW91c01lc3NhZ2UgJiYgbV9wcmV2aW91c01lc3NhZ2Ut
PmlzRXF1YWwoY29uc29sZU1lc3NhZ2UuZ2V0KCkpKSB7CiAgICAgICAgIG1fcHJldmlvdXNNZXNz
YWdlLT5pbmNyZW1lbnRDb3VudCgpOwotICAgICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudC0+c3Rh
dGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCkg
JiYgbV9mcm9udGVuZCkKKyAgICAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdl
dEJvb2xlYW4oQ29uc29sZUFnZW50U3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1f
ZnJvbnRlbmQpCiAgICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+dXBkYXRlUmVwZWF0Q291
bnRJbkNvbnNvbGUobV9mcm9udGVuZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9wcmV2aW91
c01lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZS5nZXQoKTsKICAgICAgICAgbV9jb25zb2xlTWVzc2Fn
ZXMuYXBwZW5kKGNvbnNvbGVNZXNzYWdlKTsKLSAgICAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQt
PnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJs
ZWQpICYmIG1fZnJvbnRlbmQpCisgICAgICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgp
LT5nZXRCb29sZWFuKENvbnNvbGVBZ2VudFN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAm
JiBtX2Zyb250ZW5kKQogICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvRnJvbnRl
bmQobV9mcm9udGVuZCwgbV9pbnNwZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwCmluZGV4IGU5NmMyMmIuLmU4YjRhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQyLDkgKzQy
LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCituYW1lc3BhY2Ug
RGVidWdnZXJBZ2VudFN0YXRlIHsKK3N0YXRpYyBjb25zdCBjaGFyIGphdmFTY3JpcHRCcmVha3Bv
aW50c1tdID0gImphdmFTY3JpcHRCcmVha29waW50cyI7Cit9OworCitQYXNzT3duUHRyPEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgYm9v
bCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKQogewotICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3Bl
Y3RvckFnZW50LCBmcm9udGVuZCkpOworICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3BlY3RvckFn
ZW50LCBmcm9udGVuZCwgZXJhc2VTdGlja3lCcmVha3BvaW50cykpOwogICAgIFNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5jbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgLy8gRklYTUUoV0s0NDUx
Myk6IGJyZWFrcG9pbnRzIGFjdGl2YXRlZCBmbGFnIHNob3VsZCBiZSBzeW5jaHJvbml6ZWQgYmV0
d2VlbiBhbGwgZnJvbnQtZW5kcwogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRC
cmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsKQEAgLTUyLDEyICs1NiwxNCBAQCBQYXNzT3duUHRy
PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJ
bnNwZWN0b3JBZ2VudAogICAgIHJldHVybiBhZ2VudC5yZWxlYXNlKCk7CiB9CiAKLUluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCitJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBib29sIGVyYXNlU3RpY2t5QnJl
YWtwb2ludHMpCiAgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwg
bV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAgICAs
IG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogeworICAgIGlmIChlcmFzZVN0aWNr
eUJyZWFrcG9pbnRzKQorICAgICAgICBpbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0T2JqZWN0
KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzLCBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKIH0KIAogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRl
YnVnZ2VyQWdlbnQoKQpAQCAtODUsNyArOTEsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwg
Ym9vbCBlbmFibGVkLCBTdHJpbmcqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogbG9jYXRpb25zKQogewogICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBtYWtlU3RyaW5n
KHVybCwgIjoiLCBTdHJpbmc6Om51bWJlcihsaW5lTnVtYmVyKSwgIjoiLCBTdHJpbmc6Om51bWJl
cihjb2x1bW5OdW1iZXIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50
c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0b3JT
dGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVj
dChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CiAgICAgaWYgKGJy
ZWFrcG9pbnRzQ29va2llLT5maW5kKGJyZWFrcG9pbnRJZCkgIT0gYnJlYWtwb2ludHNDb29raWUt
PmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJl
YWtwb2ludE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CkBAIC05NSw3ICsxMDEs
NyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZQogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldFN0
cmluZygiY29uZGl0aW9uIiwgY29uZGl0aW9uKTsKICAgICBicmVha3BvaW50T2JqZWN0LT5zZXRC
b29sZWFuKCJlbmFibGVkIiwgZW5hYmxlZCk7CiAgICAgYnJlYWtwb2ludHNDb29raWUtPnNldE9i
amVjdChicmVha3BvaW50SWQsIGJyZWFrcG9pbnRPYmplY3QpOwotICAgIG1faW5zcGVjdG9yQWdl
bnQtPnN0YXRlKCktPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9p
bnRzLCBicmVha3BvaW50c0Nvb2tpZSk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+
c2V0T2JqZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzLCBicmVh
a3BvaW50c0Nvb2tpZSk7CiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpOwogICAgIGZvciAoU2NyaXB0
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRzLmVu
ZCgpOyArK2l0KSB7CkBAIC0xMjYsOSArMTMyLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRKYXZhU2NyaXB0QnJlYWtwb2ludEJ5U291cmNlSWQoY29uc3QgU3RyaW5nJiBzb3UK
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVKYXZhU2NyaXB0QnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9i
amVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0
YXRlKCktPmdldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50
cyk7CiAgICAgYnJlYWtwb2ludHNDb29raWUtPnJlbW92ZShicmVha3BvaW50SWQpOwotICAgIG1f
aW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNj
cmlwdEJyZWFrcG9pbnRzLCBicmVha3BvaW50c0Nvb2tpZSk7CisgICAgbV9pbnNwZWN0b3JBZ2Vu
dC0+c3RhdGUoKS0+c2V0T2JqZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFr
cG9pbnRzLCBicmVha3BvaW50c0Nvb2tpZSk7CiAKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRl
cmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJl
YWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0g
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKQEAgLTI3OCw3
ICsyODQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZwogICAgIGlmICh1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3Bv
aW50c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0
b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9i
amVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CiAgICAgZm9y
IChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHNDb29raWUtPmJlZ2lu
KCk7IGl0ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKTsgKytpdCkgewogICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQtPnNlY29uZC0+YXNPYmpl
Y3QoKTsKICAgICAgICAgU3RyaW5nIGJyZWFrcG9pbnRVUkw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBmNGU3ZTQxLi42NDQ1
NTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTU3LDcgKzU3LDcgQEAgZW51bSBEZWJ1Z2dlckV2ZW50VHlwZSB7CiBjbGFz
cyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JGcm9udGVu
ZCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGNyZWF0
ZShJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvckZyb250ZW5kKiwgYm9vbCBlcmFzZVN0aWNreUJy
ZWFrcG9pbnRzKTsKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCk7CiAKICAg
ICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAtODYsNyAr
ODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRDb21wbGV0aW9uc09uQ2FsbEZyYW1lKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cmVzdWx0KTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3Rv
ckFnZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqLCBib29sIGVyYXNlU3RpY2t5QnJl
YWtwb2ludHMpOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY3VycmVudENhbGxG
cmFtZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBkYmI0NzJhLi5jYTc1OGEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApA
QCAtMzgxLDkgKzM4MSwxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aWRlbnRp
ZmllckZvckluaXRpYWxSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaQogICAgICAgICByZXNv
dXJjZUFnZW50LT5pZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVz
dC51cmwoKSwgbG9hZGVyKTsKIH0KIAordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFw
cGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwg
U3RyaW5nKiB1c2VyQWdlbnQpCit7CisgICAgaW5zcGVjdG9yQWdlbnQtPmFwcGx5VXNlckFnZW50
T3ZlcnJpZGUodXNlckFnZW50KTsKK30KKwogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxTZW5kUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqIGljLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICBpYy0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3Qp
OwogICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmll
dmVUaW1lbGluZUFnZW50KGljKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFNlbmRSZXNv
dXJjZVJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7CiAgICAgaWYgKEluc3BlY3RvclJlc291
cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaWMpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
CmluZGV4IDAyZjVkM2YuLmE0MzdiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjYWxj
dWxhdGVTdHlsZShEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2FsY3VsYXRlU3R5
bGUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiwgU3RyaW5nKik7CiAgICAgc3RhdGlj
IHZvaWQgaWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KEZyYW1lKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAg
IHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSk7CiAgICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWQoUGFnZSosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC0yMjAsNiArMjIxLDggQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBkaWRQYWludEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxs
UmVjYWxjdWxhdGVTdHlsZUltcGwoSW5zcGVjdG9yQWdlbnQqKTsKICAgICBzdGF0aWMgdm9pZCBk
aWRSZWNhbGN1bGF0ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUmKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3Bl
Y3RvckFnZW50KiwgU3RyaW5nKik7CiAgICAgc3RhdGljIHZvaWQgaWRlbnRpZmllckZvckluaXRp
YWxSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBzdGF0aWMgdm9p
ZCB3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKTsKICAgICBzdGF0aWMgdm9pZCBtYXJrUmVzb3VyY2VBc0NhY2hlZEltcGwoSW5z
cGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpAQCAtNTk3LDYgKzYwMCwx
NCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdChGcmFtZSogZnJhbWUsCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiBmcmFt
ZSwgU3RyaW5nKiB1c2VyQWdlbnQpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAo
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRl
bmRGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKGlu
c3BlY3RvckFnZW50LCB1c2VyQWdlbnQpOworI2VuZGlmCit9CisKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0KEZyYW1lKiBmcmFtZSwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcAppbmRleCBkNmU0Y2NmLi4zYTY5ZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC02Nyw5ICs2NywxNCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBSZXNvdXJjZUFnZW50U3RhdGUgeworc3Rh
dGljIGNvbnN0IGNoYXIgcmVzb3VyY2VBZ2VudEVuYWJsZWRbXSA9ICJyZXNvdXJjZUFnZW50RW5h
YmxlZCI7CitzdGF0aWMgY29uc3QgY2hhciBleHRyYVJlcXVlc3RIZWFkZXJzW10gPSAiZXh0cmFS
ZXF1ZXN0SGVhZGVycyI7Cit9CisKIFBhc3NSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4g
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzdG9yZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JTdGF0
ZSogc3RhdGUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKIHsKLSAgICBpZiAoc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlQWdlbnRFbmFibGVkKSkKKyAgICBp
ZiAoc3RhdGUtPmdldEJvb2xlYW4oUmVzb3VyY2VBZ2VudFN0YXRlOjpyZXNvdXJjZUFnZW50RW5h
YmxlZCkpCiAgICAgICAgIHJldHVybiBjcmVhdGUocGFnZSwgc3RhdGUsIGZyb250ZW5kKTsKICAg
ICByZXR1cm4gMDsKIH0KQEAgLTI4Nyw3ICsyOTIsNyBAQCBzdGF0aWMgdm9pZCBwb3B1bGF0ZU9i
amVjdFdpdGhGcmFtZVJlc291cmNlcyhGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
TwogCiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp+SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpCiB7
Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VBZ2VudEVu
YWJsZWQsIGZhbHNlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKFJlc291cmNlQWdlbnRTdGF0
ZTo6cmVzb3VyY2VBZ2VudEVuYWJsZWQsIGZhbHNlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBLVVJMJiB1cmwsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0zMDIs
OCArMzA3LDI4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6aWRlbnRpZmllckZvcklu
aXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllCiAgICAgbV9mcm9udGVuZC0+aWRl
bnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHVybC5zdHJpbmcoKSwgbG9hZGVy
T2JqZWN0LCBjYWxsU3RhY2tWYWx1ZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQor
eworICAgIG1fc3RhdGUtPnNldE9iamVjdChSZXNvdXJjZUFnZW50U3RhdGU6OmV4dHJhUmVxdWVz
dEhlYWRlcnMsIGhlYWRlcnMpOworfQorCisKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcnMgPSBtX3N0YXRlLT5nZXRPYmplY3Qo
UmVzb3VyY2VBZ2VudFN0YXRlOjpleHRyYVJlcXVlc3RIZWFkZXJzKTsKKworICAgIGlmIChoZWFk
ZXJzKSB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVh
ZGVycy0+ZW5kKCk7CisgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
U3RyaW5nIHZhbHVlOworICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1
ZSkpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXF1ZXN0LnNldFJlcG9ydExvYWRU
aW1pbmcodHJ1ZSk7CisgICAgcmVxdWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOworCiAg
ICAgbV9mcm9udGVuZC0+d2lsbFNlbmRSZXF1ZXN0KGlkZW50aWZpZXIsIGN1cnJlbnRUaW1lKCks
IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBidWlsZE9iamVjdEZvclJl
c291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSkpOwogfQogCkBAIC00OTIsNyArNTE3LDcg
QEAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudChQYWdlKiBw
YWdlLCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUKICAgICAsIG1fc3RhdGUoc3RhdGUpCiAgICAgLCBt
X2Zyb250ZW5kKGZyb250ZW5kKQogewotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9y
U3RhdGU6OnJlc291cmNlQWdlbnRFbmFibGVkLCB0cnVlKTsKKyAgICBtX3N0YXRlLT5zZXRCb29s
ZWFuKFJlc291cmNlQWdlbnRTdGF0ZTo6cmVzb3VyY2VBZ2VudEVuYWJsZWQsIHRydWUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlQWdlbnQuaAppbmRleCA2YzJkZjI0Li4yM2RiZWVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKQEAg
LTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRlbmQgCiAg
ICAgdm9pZCBjYWNoZWRSZXNvdXJjZXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKICAgICB2
b2lkIHJlc291cmNlQ29udGVudCh1bnNpZ25lZCBsb25nIGZyYW1lSUQsIGNvbnN0IFN0cmluZyYg
dXJsLCBib29sIGJhc2U2NEVuY29kZSwgU3RyaW5nKiBjb250ZW50KTsKKyAgICB2b2lkIHNldEV4
dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3RvclJlc291cmNlQWdlbnQoUGFnZSogcGFnZSwgSW5zcGVjdG9yU3RhdGUqLCBJbnNw
ZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdGF0ZS5jcHAKaW5kZXggNzc5ZDQ2NGQuLmI3ZTY2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMjQgKzM3LDY1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogSW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wcm9wZXJ0aWVzKElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpCiB7Ci0gICAgLy8gUHVyZSByZWxvYWQgc3RhdGUKLSAg
ICByZWdpc3RlckJvb2xlYW4odXNlckluaXRpYXRlZFByb2ZpbGluZywgZmFsc2UpOwotICAgIHJl
Z2lzdGVyQm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOwotICAgIHJlZ2lz
dGVyQm9vbGVhbihzZWFyY2hpbmdGb3JOb2RlLCBmYWxzZSk7Ci0gICAgcmVnaXN0ZXJCb29sZWFu
KGRlYnVnZ2VyRW5hYmxlZCwgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVhbihwcm9maWxlckVu
YWJsZWQsIGZhbHNlKTsKLSAgICByZWdpc3Rlck9iamVjdChqYXZhU2NyaXB0QnJlYWtwb2ludHMp
OwotICAgIHJlZ2lzdGVyT2JqZWN0KGJyb3dzZXJCcmVha3BvaW50cyk7Ci0gICAgcmVnaXN0ZXJC
b29sZWFuKGNvbnNvbGVNZXNzYWdlc0VuYWJsZWQsIGZhbHNlKTsKLSAgICByZWdpc3RlckJvb2xl
YW4obW9uaXRvcmluZ1hIUiwgZmFsc2UpOwotICAgIHJlZ2lzdGVyQm9vbGVhbihyZXNvdXJjZUFn
ZW50RW5hYmxlZCwgZmFsc2UpOwogfQogCiB2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJv
bUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb24pCiB7CiAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBqc29uVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24pOwot
ICAgIGlmICghanNvblZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBqc29uT2JqZWN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOwotICAgIGlmICgh
anNvbk9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGkgPSBqc29uT2JqZWN0LT5iZWdpbigpOyBpICE9IGpzb25PYmplY3QtPmVuZCgp
OyArK2kpIHsKLSAgICAgICAgSW5zcGVjdG9yUHJvcGVydHlJZCBpZCA9IChJbnNwZWN0b3JQcm9w
ZXJ0eUlkKWktPmZpcnN0LnRvSW50KCk7Ci0gICAgICAgIEFTU0VSVChpZCA+IDAgJiYgaWQgPCBs
YXN0UHJvcGVydHlJZCk7Ci0gICAgICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBqID0gbV9wcm9w
ZXJ0aWVzLmZpbmQoaWQpOwotICAgICAgICBBU1NFUlQoaiAhPSBtX3Byb3BlcnRpZXMuZW5kKCkp
OwotICAgICAgICBBU1NFUlQoai0+c2Vjb25kLm1fdmFsdWUtPnR5cGUoKSA9PSBpLT5zZWNvbmQt
PnR5cGUoKSk7Ci0gICAgICAgIGotPnNlY29uZC5tX3ZhbHVlID0gaS0+c2Vjb25kOwotICAgIH0K
KyAgICBpZiAoanNvblZhbHVlKQorICAgICAgICBtX3Byb3BlcnRpZXMgPSBqc29uVmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFtX3Byb3BlcnRpZXMpCisgICAgICAgIG1fcHJvcGVydGllcyA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3RhdGU6OnVw
ZGF0ZUNvb2tpZSgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29va2llT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyAr
K2kpCi0gICAgICAgIGNvb2tpZU9iamVjdC0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoaS0+Zmly
c3QpLCBpLT5zZWNvbmQubV92YWx1ZSk7Ci0gICAgbV9jbGllbnQtPnVwZGF0ZUluc3BlY3RvclN0
YXRlQ29va2llKGNvb2tpZU9iamVjdC0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fY2xpZW50LT51
cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShtX3Byb3BlcnRpZXMtPnRvSlNPTlN0cmluZygpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JTdGF0ZTo6c2V0VmFsdWUoSW5zcGVjdG9yUHJvcGVydHlJZCBp
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit2b2lkIEluc3BlY3RvclN0YXRl
OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCiB7Ci0gICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3Bl
cnRpZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKLSAg
ICBpLT5zZWNvbmQubV92YWx1ZSA9IHZhbHVlOworICAgIG1fcHJvcGVydGllcy0+c2V0VmFsdWUo
cHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgdXBkYXRlQ29va2llKCk7CiB9CiAKLWJvb2wgSW5z
cGVjdG9yU3RhdGU6OmdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBpZCkKK2Jvb2wgSW5z
cGVjdG9yU3RhdGU6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Ci0gICAg
QVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6Oml0
ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCB2
YWx1ZSA9IGZhbHNlOwotICAgIGktPnNlY29uZC5tX3ZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsK
KyAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKKyAgICAgICAgaXQtPnNlY29uZC0+
YXNCb29sZWFuKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1TdHJpbmcgSW5zcGVj
dG9yU3RhdGU6OmdldFN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQorU3RyaW5nIEluc3Bl
Y3RvclN0YXRlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
UHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Ci0gICAgQVNT
RVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgU3RyaW5nIHZh
bHVlOwotICAgIGktPnNlY29uZC5tX3ZhbHVlLT5hc1N0cmluZygmdmFsdWUpOworICAgIGlmIChp
dCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQorICAgICAgICBpdC0+c2Vjb25kLT5hc1N0cmluZygm
dmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0
TG9uZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQorbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9u
Zyhjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0
b3IgaSA9IG1fcHJvcGVydGllcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRp
ZXMuZW5kKCkpOworICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRp
ZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBsb25nIHZhbHVlID0gMDsKLSAgICBpLT5zZWNv
bmQubV92YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVz
LT5lbmQoKSkKKyAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0
ZTo6Z2V0T2JqZWN0KEluc3BlY3RvclByb3BlcnR5SWQgaWQpCi17Ci0gICAgUHJvcGVydHlNYXA6
Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGkgIT0gbV9w
cm9wZXJ0aWVzLmVuZCgpKTsKLSAgICByZXR1cm4gaS0+c2Vjb25kLm1fdmFsdWUtPmFzT2JqZWN0
KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnNldE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0
eUlkIGlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCitQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKIHsKLSAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGll
cy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOwotICAgIFBy
b3BlcnR5JiBwcm9wZXJ0eSA9IGktPnNlY29uZDsKLSAgICBwcm9wZXJ0eS5tX3ZhbHVlID0gdmFs
dWU7Ci0gICAgdXBkYXRlQ29va2llKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lz
dGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUpCi17
Ci0gICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JTdGF0
ZTo6cmVnaXN0ZXJTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5zZXQocHJvcGVydHlJZCwgUHJvcGVy
dHk6OmNyZWF0ZShJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJ
ZCwgbG9uZyB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3Bl
cnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKSk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyT2JqZWN0KEluc3BlY3RvclByb3Bl
cnR5SWQgcHJvcGVydHlJZCkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFBy
b3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSkpOwotfQotCi1JbnNwZWN0
b3JTdGF0ZTo6UHJvcGVydHkgSW5zcGVjdG9yU3RhdGU6OlByb3BlcnR5OjpjcmVhdGUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi17Ci0gICAgUHJvcGVydHkgcHJvcGVydHk7Ci0g
ICAgcHJvcGVydHkubV92YWx1ZSA9IHZhbHVlOwotICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICBJ
bnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5
TmFtZSk7CisgICAgaWYgKGl0ID09IG1fcHJvcGVydGllcy0+ZW5kKCkpIHsKKyAgICAgICAgbV9w
cm9wZXJ0aWVzLT5zZXRPYmplY3QocHJvcGVydHlOYW1lLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICAgICAgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKaW5k
ZXggOTBhMmMxNy4uMjY4M2EwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0YXRlLmgKQEAgLTEsMjkgKzEsMzEgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJ
bnNwZWN0b3JTdGF0ZV9oCkBAIC00Myw1MSArNDUsMjYgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50
OwogCiBjbGFzcyBJbnNwZWN0b3JTdGF0ZSB7CiBwdWJsaWM6Ci0gICAgZW51bSBJbnNwZWN0b3JQ
cm9wZXJ0eUlkIHsKLSAgICAgICAgbW9uaXRvcmluZ1hIUiA9IDEsCi0gICAgICAgIHRpbWVsaW5l
UHJvZmlsZXJFbmFibGVkLAotICAgICAgICBzZWFyY2hpbmdGb3JOb2RlLAotICAgICAgICBjb25z
b2xlTWVzc2FnZXNFbmFibGVkLAotICAgICAgICBwcm9maWxlckVuYWJsZWQsCi0gICAgICAgIHVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcsCi0gICAgICAgIGRlYnVnZ2VyRW5hYmxlZCwKLSAgICAgICAg
amF2YVNjcmlwdEJyZWFrcG9pbnRzLAotICAgICAgICBicm93c2VyQnJlYWtwb2ludHMsCi0gICAg
ICAgIHJlc291cmNlQWdlbnRFbmFibGVkLAotICAgICAgICBsYXN0UHJvcGVydHlJZAotICAgIH07
Ci0KICAgICBJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNsaWVudCk7CiAKICAgICB2
b2lkIHJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGNvbnN0IFN0cmluZyYganNvblN0cmluZyk7
CiAKLSAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCk7Ci0gICAgU3RyaW5n
IGdldFN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkKTsKLSAgICBsb25nIGdldExvbmcoSW5zcGVj
dG9yUHJvcGVydHlJZCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVj
dChJbnNwZWN0b3JQcm9wZXJ0eUlkKTsKKyAgICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpOworICAgIFN0cmluZyBnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOworICAgIGxvbmcgZ2V0TG9uZyhjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7
CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSk7CiAKLSAgICB2b2lkIHNldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJ
ZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOyB9Ci0gICAgdm9pZCBzZXRTdHJpbmcoSW5zcGVj
dG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNldFZhbHVl
KHByb3BlcnR5SWQsIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7IH0KLSAgICB2b2lk
IHNldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBsb25nIHZhbHVlKSB7IHNl
dFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZh
bHVlKSk7IH0KLSAgICB2b2lkIHNldE9iamVjdChJbnNwZWN0b3JQcm9wZXJ0eUlkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpOworICAgIHZvaWQgc2V0Qm9vbGVhbihjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eU5hbWUs
IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOyB9CisgICAgdm9pZCBzZXRTdHJp
bmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgc2V0
VmFsdWUocHJvcGVydHlOYW1lLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOyB9Cisg
ICAgdm9pZCBzZXRMb25nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBsb25nIHZhbHVlKSB7
IHNldFZhbHVlKHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3Vi
bGUpdmFsdWUpKTsgfQorICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVy
dHlOYW1lLCB2YWx1ZSk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUNvb2tpZSgpOwot
ICAgIHZvaWQgc2V0VmFsdWUoSW5zcGVjdG9yUHJvcGVydHlJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4pOwotCi0gICAgc3RydWN0IFByb3BlcnR5IHsKLSAgICAgICAgc3RhdGljIFByb3Bl
cnR5IGNyZWF0ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSk7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV92YWx1ZTsKLSAgICB9OwotICAgIHR5cGVkZWYgSGFzaE1h
cDxsb25nLCBQcm9wZXJ0eT4gUHJvcGVydHlNYXA7Ci0gICAgUHJvcGVydHlNYXAgbV9wcm9wZXJ0
aWVzOwotCi0gICAgdm9pZCByZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCwgYm9v
bCB2YWx1ZSk7Ci0gICAgdm9pZCByZWdpc3RlclN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHJlZ2lzdGVyTG9uZyhJbnNwZWN0b3JQcm9w
ZXJ0eUlkLCBsb25nIHZhbHVlKTsKLSAgICB2b2lkIHJlZ2lzdGVyT2JqZWN0KEluc3BlY3RvclBy
b3BlcnR5SWQpOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKIAogICAgIEluc3BlY3RvckNsaWVudCogbV9j
bGllbnQ7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9wcm9wZXJ0aWVzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
aW5kZXggNzFmNjI1Yy4uZjU3NWM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCkBAIC0yNTU1LDE0ICsyNTU1LDkgQEAgaW50IEZyYW1lTG9hZGVyOjpudW1QZW5kaW5nT3JM
b2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1cnNlKSBjb25zdAogCiBTdHJpbmcgRnJhbWVMb2FkZXI6
OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBTdHJp
bmcgdXNlckFnZW50T3ZlcnJpZGUgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnVzZXJB
Z2VudE92ZXJyaWRlKCk7Ci0gICAgICAgIGlmICghdXNlckFnZW50T3ZlcnJpZGUuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcmV0dXJuIHVzZXJBZ2VudE92ZXJyaWRlOwotICAgIH0KLSNlbmRpZgot
ICAgIHJldHVybiBtX2NsaWVudC0+dXNlckFnZW50KHVybCk7CisgICAgU3RyaW5nIHVzZXJBZ2Vu
dCA9IG1fY2xpZW50LT51c2VyQWdlbnQodXJsKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGUobV9mcmFtZSwgJnVzZXJBZ2VudCk7CisgICAgcmV0
dXJuIHVzZXJBZ2VudDsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6aGFuZGxlZE9ubG9hZEV2ZW50
cygpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>