<?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>44174</bug_id>
          
          <creation_ts>2010-08-18 07:09:19 -0700</creation_ts>
          <short_desc>Web Inspector: extract profiler-related code and data from InspectorController into ProfilerAgent</short_desc>
          <delta_ts>2010-08-23 03:23:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>266087</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-18 07:09:19 -0700</bug_when>
    <thetext>The same refactoring as was previously done for debugger-related stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266090</commentid>
    <comment_count>1</comment_count>
      <attachid>64704</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-18 07:18:16 -0700</bug_when>
    <thetext>Created attachment 64704
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266099</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-18 07:36:45 -0700</bug_when>
    <thetext>Attachment 64704 did not build on mac:
Build output: http://queues.webkit.org/results/3703368</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266107</commentid>
    <comment_count>3</comment_count>
      <attachid>64712</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-18 08:04:02 -0700</bug_when>
    <thetext>Created attachment 64712
Fix mac linking issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266187</commentid>
    <comment_count>4</comment_count>
      <attachid>64712</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-18 10:07:58 -0700</bug_when>
    <thetext>Comment on attachment 64712
Fix mac linking issue

WebCore/GNUmakefile.am:1628
 +  	WebCore/inspector/InspectorProfilerAgent.cpp \
Do not forget the CMakeLists.

WebCore/ChangeLog:5
 +          Extract profiler-related code and data from InspectorController into ProfilerAgent.
Web Inspector: Extract ... into InspectorProfilerAgent.

WebCore/inspector/InspectorController.cpp:1488
 +      if (profilerEnabled())
In the previous version, user initiated profiling could be started regardless of the profilerEnabled state. You should not change that. r- for that. Please make sure profiler tests are passing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266682</commentid>
    <comment_count>5</comment_count>
      <attachid>64836</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-19 05:56:54 -0700</bug_when>
    <thetext>Created attachment 64836
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266709</commentid>
    <comment_count>6</comment_count>
      <attachid>64836</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-19 07:12:10 -0700</bug_when>
    <thetext>Comment on attachment 64836
Comments addressed.

This breaks Chromium&apos;s interactive_ui_test for profiler. Holding this change back.

&gt; diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
&gt; index 3fe6c2c..4efd85c 100644
&gt; --- a/WebCore/CMakeLists.txt
&gt; +++ b/WebCore/CMakeLists.txt
&gt; @@ -1074,6 +1074,7 @@ SET(WebCore_SOURCES
&gt;      inspector/InspectorDebuggerAgent.cpp
&gt;      inspector/InspectorFrontendClientLocal.cpp
&gt;      inspector/InspectorFrontendHost.cpp
&gt; +    inspector/InspectorProfilerAgent.cpp
&gt;      inspector/InspectorResource.cpp
&gt;      inspector/InspectorValues.cpp
&gt;      inspector/InspectorStorageAgent.cpp
&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 9934fbf..ba704d5 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,69 @@
&gt; +2010-08-19  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Extract profiler-related code and data from InspectorController into
&gt; +        InspectorProfilerAgent.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44174
&gt; +
&gt; +        * CMakeLists.txt:
&gt; +        * GNUmakefile.am:
&gt; +        * WebCore.exp.in:
&gt; +        * WebCore.gypi:
&gt; +        * WebCore.pro:
&gt; +        * WebCore.vcproj/WebCore.vcproj:
&gt; +        * WebCore.xcodeproj/project.pbxproj:
&gt; +        * bindings/js/ScriptProfiler.cpp:
&gt; +        (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
&gt; +        * bindings/js/ScriptProfiler.h:
&gt; +        * bindings/v8/ScriptProfiler.cpp:
&gt; +        (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
&gt; +        * bindings/v8/ScriptProfiler.h:
&gt; +        * inspector/CodeGeneratorInspector.pm:
&gt; +        * inspector/Inspector.idl:
&gt; +        * inspector/InspectorController.cpp:
&gt; +        (WebCore::InspectorController::InspectorController):
&gt; +        (WebCore::InspectorController::inspectedPageDestroyed):
&gt; +        (WebCore::InspectorController::connectFrontend):
&gt; +        (WebCore::InspectorController::disconnectFrontend):
&gt; +        (WebCore::InspectorController::populateScriptObjects):
&gt; +        (WebCore::InspectorController::didCommitLoad):
&gt; +        (WebCore::InspectorController::addProfile):
&gt; +        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
&gt; +        (WebCore::InspectorController::addStartProfilingMessageToConsole):
&gt; +        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
&gt; +        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
&gt; +        (WebCore::InspectorController::startUserInitiatedProfiling):
&gt; +        (WebCore::InspectorController::stopUserInitiatedProfiling):
&gt; +        (WebCore::InspectorController::enableProfiler):
&gt; +        (WebCore::InspectorController::disableProfiler):
&gt; +        * inspector/InspectorController.h:
&gt; +        (WebCore::InspectorController::profilerEnabled):
&gt; +        (WebCore::InspectorController::profilerAgent):
&gt; +        * inspector/InspectorProfilerAgent.cpp: Added.
&gt; +        (WebCore::InspectorProfilerAgent::create):
&gt; +        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
&gt; +        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
&gt; +        (WebCore::InspectorProfilerAgent::addProfile):
&gt; +        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
&gt; +        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
&gt; +        (WebCore::InspectorProfilerAgent::createProfileHeader):
&gt; +        (WebCore::InspectorProfilerAgent::getCurrentUserInitiatedProfileName):
&gt; +        (WebCore::InspectorProfilerAgent::getProfileHeaders):
&gt; +        (WebCore::InspectorProfilerAgent::getProfile):
&gt; +        (WebCore::InspectorProfilerAgent::removeProfile):
&gt; +        (WebCore::InspectorProfilerAgent::resetState):
&gt; +        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
&gt; +        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
&gt; +        (WebCore::InspectorProfilerAgent::toggleRecordButton):
&gt; +        * inspector/InspectorProfilerAgent.h: Added.
&gt; +        (WebCore::InspectorProfilerAgent::clearProfiles):
&gt; +        (WebCore::InspectorProfilerAgent::isRecordingUserInitiatedProfile):
&gt; +        (WebCore::InspectorProfilerAgent::setRemoteFrontend):
&gt; +        (WebCore::InspectorProfilerAgent::startProfiling):
&gt; +        (WebCore::InspectorProfilerAgent::stopProfiling):
&gt; +
&gt;  2010-08-19  Andreas Kling  &lt;andreas.kling@nokia.com&gt;
&gt;  
&gt;          Reviewed by Kenneth Rohde Christiansen.
&gt; diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
&gt; index 20baf0f..e4b660e 100644
&gt; --- a/WebCore/GNUmakefile.am
&gt; +++ b/WebCore/GNUmakefile.am
&gt; @@ -1627,6 +1627,8 @@ webcore_sources += \
&gt;  	WebCore/inspector/InspectorFrontendClientLocal.h \
&gt;  	WebCore/inspector/InspectorFrontendHost.cpp \
&gt;  	WebCore/inspector/InspectorFrontendHost.h \
&gt; +	WebCore/inspector/InspectorProfilerAgent.cpp \
&gt; +	WebCore/inspector/InspectorProfilerAgent.h \
&gt;  	WebCore/inspector/InspectorResource.cpp \
&gt;  	WebCore/inspector/InspectorResource.h \
&gt;  	WebCore/inspector/InspectorStorageAgent.cpp \
&gt; diff --git a/WebCore/WebCore.exp.in b/WebCore/WebCore.exp.in
&gt; index 1369296..57b8440 100644
&gt; --- a/WebCore/WebCore.exp.in
&gt; +++ b/WebCore/WebCore.exp.in
&gt; @@ -1189,10 +1189,11 @@ __ZN7WebCore19InspectorController20stopTimelineProfilerEv
&gt;  __ZN7WebCore19InspectorController21startTimelineProfilerEv
&gt;  __ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKN3WTF6StringE
&gt;  __ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtrINS_23InspectorFrontendClientEEE
&gt; +__ZN7WebCore19InspectorController27startUserInitiatedProfilingEv
&gt;  __ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv
&gt; -__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_EE
&gt;  __ZN7WebCore19InspectorController34inspectorStartsAttachedSettingNameEv
&gt;  __ZN7WebCore19InspectorController34inspectorStartsAttachedSettingNameEv
&gt; +__ZNK7WebCore19InspectorController31isRecordingUserInitiatedProfileEv
&gt;  __ZN7WebCore19InspectorController4showEv
&gt;  __ZN7WebCore19InspectorController5closeEv
&gt;  __ZN7WebCore19InspectorController7inspectEPNS_4NodeE
&gt; diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
&gt; index 3dff25d..38504ad 100644
&gt; --- a/WebCore/WebCore.gypi
&gt; +++ b/WebCore/WebCore.gypi
&gt; @@ -1769,6 +1769,8 @@
&gt;              &apos;inspector/InspectorFrontendClient.h&apos;,
&gt;              &apos;inspector/InspectorFrontendHost.cpp&apos;,
&gt;              &apos;inspector/InspectorFrontendHost.h&apos;,
&gt; +            &apos;inspector/InspectorProfilerAgent.cpp&apos;,
&gt; +            &apos;inspector/InspectorProfilerAgent.h&apos;,
&gt;              &apos;inspector/InspectorResource.cpp&apos;,
&gt;              &apos;inspector/InspectorResource.h&apos;,
&gt;              &apos;inspector/InspectorStorageAgent.cpp&apos;,
&gt; diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
&gt; index 37d4bd7..4555725 100644
&gt; --- a/WebCore/WebCore.pro
&gt; +++ b/WebCore/WebCore.pro
&gt; @@ -753,6 +753,7 @@ SOURCES += \
&gt;      inspector/InspectorDOMStorageResource.cpp \
&gt;      inspector/InspectorFrontendClientLocal.cpp \
&gt;      inspector/InspectorFrontendHost.cpp \
&gt; +    inspector/InspectorProfilerAgent.cpp \
&gt;      inspector/InspectorResource.cpp \
&gt;      inspector/InspectorStorageAgent.cpp \
&gt;      inspector/InspectorTimelineAgent.cpp \
&gt; @@ -1522,6 +1523,7 @@ HEADERS += \
&gt;      inspector/InspectorFrontendClient.h \
&gt;      inspector/InspectorFrontendClientLocal.h \
&gt;      inspector/InspectorFrontendHost.h \
&gt; +    inspector/InspectorProfilerAgent.h \
&gt;      inspector/InspectorResource.h \
&gt;      inspector/InspectorStorageAgent.h \
&gt;      inspector/InspectorTimelineAgent.h \
&gt; diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
&gt; index 18d4851..e4831f4 100644
&gt; --- a/WebCore/WebCore.vcproj/WebCore.vcproj
&gt; +++ b/WebCore/WebCore.vcproj/WebCore.vcproj
&gt; @@ -51853,6 +51853,14 @@
&gt;  				&gt;
&gt;  			&lt;/File&gt;
&gt;  			&lt;File
&gt; +				RelativePath=&quot;..\inspector\InspectorProfilerAgent.cpp&quot;
&gt; +				&gt;
&gt; +			&lt;/File&gt;
&gt; +			&lt;File
&gt; +				RelativePath=&quot;..\inspector\InspectorProfilerAgent.h&quot;
&gt; +				&gt;
&gt; +			&lt;/File&gt;
&gt; +			&lt;File
&gt;  				RelativePath=&quot;..\inspector\InspectorResource.cpp&quot;
&gt;  				&gt;
&gt;  			&lt;/File&gt;
&gt; diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; index 2435c61..6712582 100644
&gt; --- a/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; +++ b/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; @@ -2742,6 +2742,8 @@
&gt;  		97EF561011E40783007E026F /* HTMLConstructionSite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */; };
&gt;  		97EF561111E40783007E026F /* HTMLConstructionSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 97EF560F11E40783007E026F /* HTMLConstructionSite.h */; };
&gt;  		97EF7DFE107E55B700D7C49C /* ScriptControllerBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */; };
&gt; +		9F0D6B2E121BFEBA006C0288 /* InspectorProfilerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */; };
&gt; +		9F0D6B2F121BFEBA006C0288 /* InspectorProfilerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */; };
&gt;  		9F6FC1961122E82A00E80196 /* ScriptDebugServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */; };
&gt;  		9F6FC1971122E82A00E80196 /* ScriptDebugServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */; settings = {ATTRIBUTES = (Private, ); }; };
&gt;  		9F72304F11184B4100AD0126 /* ScriptProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F72304C11184B4100AD0126 /* ScriptProfile.h */; settings = {ATTRIBUTES = (Private, ); }; };
&gt; @@ -8597,6 +8599,8 @@
&gt;  		97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLConstructionSite.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt;  		97EF560F11E40783007E026F /* HTMLConstructionSite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLConstructionSite.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt;  		97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptControllerBase.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorProfilerAgent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorProfilerAgent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt;  		9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptDebugServer.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt;  		9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDebugServer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt;  		9F72304C11184B4100AD0126 /* ScriptProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptProfile.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; @@ -11787,6 +11791,8 @@
&gt;  				7A0E770B10C00A8800A0276E /* InspectorFrontendHost.cpp */,
&gt;  				7A0E770C10C00A8800A0276E /* InspectorFrontendHost.h */,
&gt;  				7A0E770D10C00A8800A0276E /* InspectorFrontendHost.idl */,
&gt; +				9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */,
&gt; +				9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */,
&gt;  				41F062000F5F0B6600A07EAC /* InspectorResource.cpp */,
&gt;  				41F061FF0F5F0B6600A07EAC /* InspectorResource.h */,
&gt;  				7AB0B1BE1211A62200A76940 /* InspectorStorageAgent.cpp */,
&gt; @@ -20329,6 +20335,7 @@
&gt;  				2EDEF1F8121B0EFC00726DB2 /* BlobStorageData.h in Headers */,
&gt;  				2EF1BFEB121C9F4200C27627 /* FileStream.h in Headers */,
&gt;  				46A26906121B6B4300C41F3A /* FileWriter.h in Headers */,
&gt; +				9F0D6B2F121BFEBA006C0288 /* InspectorProfilerAgent.h in Headers */,
&gt;  			);
&gt;  			runOnlyForDeploymentPostprocessing = 0;
&gt;  		};
&gt; @@ -22780,6 +22787,7 @@
&gt;  				2EDEF1F6121B0EFC00726DB2 /* BlobRegistryImpl.cpp in Sources */,
&gt;  				2EF1BFEA121C9F4200C27627 /* FileStream.cpp in Sources */,
&gt;  				46A26905121B6B4300C41F3A /* FileWriter.cpp in Sources */,
&gt; +				9F0D6B2E121BFEBA006C0288 /* InspectorProfilerAgent.cpp in Sources */,
&gt;  			);
&gt;  			runOnlyForDeploymentPostprocessing = 0;
&gt;  		};
&gt; diff --git a/WebCore/bindings/js/ScriptProfiler.cpp b/WebCore/bindings/js/ScriptProfiler.cpp
&gt; index f372c3c..62ae9ba 100644
&gt; --- a/WebCore/bindings/js/ScriptProfiler.cpp
&gt; +++ b/WebCore/bindings/js/ScriptProfiler.cpp
&gt; @@ -46,6 +46,11 @@ PassRefPtr&lt;ScriptProfile&gt; ScriptProfiler::stop(ScriptState* state, const String&amp;
&gt;      return ScriptProfile::create(profile);
&gt;  }
&gt;  
&gt; +bool ScriptProfiler::isProfilerAlwaysEnabled()
&gt; +{
&gt; +    return false;
&gt; +}
&gt; +
&gt;  } // namespace WebCore
&gt;  
&gt;  #endif // ENABLE(JAVASCRIPT_DEBUGGER)
&gt; diff --git a/WebCore/bindings/js/ScriptProfiler.h b/WebCore/bindings/js/ScriptProfiler.h
&gt; index 4fa331c..180c49f 100644
&gt; --- a/WebCore/bindings/js/ScriptProfiler.h
&gt; +++ b/WebCore/bindings/js/ScriptProfiler.h
&gt; @@ -41,6 +41,7 @@ public:
&gt;      static PassRefPtr&lt;ScriptProfile&gt; stop(ScriptState* state, const String&amp; title);
&gt;      static void takeHeapSnapshot() { }
&gt;      static long getProfilerLogLines(long, String*) { return 0; }
&gt; +    static bool isProfilerAlwaysEnabled();
&gt;  };
&gt;  
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/bindings/v8/ScriptProfiler.cpp b/WebCore/bindings/v8/ScriptProfiler.cpp
&gt; index 9213774..0de4a24 100644
&gt; --- a/WebCore/bindings/v8/ScriptProfiler.cpp
&gt; +++ b/WebCore/bindings/v8/ScriptProfiler.cpp
&gt; @@ -69,4 +69,9 @@ long ScriptProfiler::getProfilerLogLines(long position, String* data)
&gt;      return position;
&gt;  }
&gt;  
&gt; +bool ScriptProfiler::isProfilerAlwaysEnabled()
&gt; +{
&gt; +    return true;
&gt; +}
&gt; +
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/bindings/v8/ScriptProfiler.h b/WebCore/bindings/v8/ScriptProfiler.h
&gt; index 5c1054b..b1ab3b1 100644
&gt; --- a/WebCore/bindings/v8/ScriptProfiler.h
&gt; +++ b/WebCore/bindings/v8/ScriptProfiler.h
&gt; @@ -45,6 +45,7 @@ public:
&gt;      static PassRefPtr&lt;ScriptProfile&gt; stop(ScriptState* state, const String&amp; title);
&gt;      static void takeHeapSnapshot();
&gt;      static long getProfilerLogLines(long position, String* data);
&gt; +    static bool isProfilerAlwaysEnabled();
&gt;  };
&gt;  
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm
&gt; index cd9052a..e647c90 100644
&gt; --- a/WebCore/inspector/CodeGeneratorInspector.pm
&gt; +++ b/WebCore/inspector/CodeGeneratorInspector.pm
&gt; @@ -38,6 +38,11 @@ $typeTransform{&quot;ApplicationCache&quot;} = {
&gt;      &quot;header&quot; =&gt; &quot;InspectorApplicationCacheAgent.h&quot;,
&gt;      &quot;handlerAccessor&quot; =&gt; &quot;m_inspectorController-&gt;applicationCacheAgent()&quot;,
&gt;  };
&gt; +$typeTransform{&quot;Profiler&quot;} = {
&gt; +    &quot;forward&quot; =&gt; &quot;InspectorProfilerAgent&quot;,
&gt; +    &quot;header&quot; =&gt; &quot;InspectorProfilerAgent.h&quot;,
&gt; +    &quot;handlerAccessor&quot; =&gt; &quot;m_inspectorController-&gt;profilerAgent()&quot;,
&gt; +};
&gt;  $typeTransform{&quot;Frontend&quot;} = {
&gt;      &quot;forward&quot; =&gt; &quot;RemoteInspectorFrontend&quot;,
&gt;      &quot;header&quot; =&gt; &quot;RemoteInspectorFrontend.h&quot;,
&gt; diff --git a/WebCore/inspector/Inspector.idl b/WebCore/inspector/Inspector.idl
&gt; index 1c66b59..4864842 100644
&gt; --- a/WebCore/inspector/Inspector.idl
&gt; +++ b/WebCore/inspector/Inspector.idl
&gt; @@ -145,14 +145,14 @@ module core {
&gt;          [handler=Controller] void enableProfiler(in boolean always);
&gt;          [handler=Controller] void disableProfiler(in boolean always);
&gt;  
&gt; -        [handler=Controller] void startProfiling();
&gt; -        [handler=Controller] void stopProfiling();
&gt; +        [handler=Profiler] void startProfiling();
&gt; +        [handler=Profiler] void stopProfiling();
&gt;  
&gt; -        [handler=Controller] void getProfileHeaders(in long callId, out Array headers);
&gt; -        [handler=Controller] void getProfile(in long callId, in unsigned long uid, out Object profile);
&gt; +        [handler=Profiler] void getProfileHeaders(in long callId, out Array headers);
&gt; +        [handler=Profiler] void getProfile(in long callId, in unsigned long uid, out Object profile);
&gt;  
&gt; -        [handler=Controller] void removeProfile(in unsigned long uid);
&gt; -        [handler=Controller] void clearProfiles();
&gt; +        [handler=Profiler] void removeProfile(in unsigned long uid);
&gt; +        [handler=Profiler] void clearProfiles();
&gt;  
&gt;          [handler=Backend] void takeHeapSnapshot();
&gt;          [handler=Backend] void getProfilerLogLines(in long callId, in long inPosition, out long outPosition, out String log);
&gt; diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
&gt; index ac670cb..d6a3634 100644
&gt; --- a/WebCore/inspector/InspectorController.cpp
&gt; +++ b/WebCore/inspector/InspectorController.cpp
&gt; @@ -63,6 +63,7 @@
&gt;  #include &quot;InspectorDOMStorageResource.h&quot;
&gt;  #include &quot;InspectorDatabaseResource.h&quot;
&gt;  #include &quot;InspectorDebuggerAgent.h&quot;
&gt; +#include &quot;InspectorProfilerAgent.h&quot;
&gt;  #include &quot;InspectorResource.h&quot;
&gt;  #include &quot;InspectorStorageAgent.h&quot;
&gt;  #include &quot;InspectorTimelineAgent.h&quot;
&gt; @@ -115,8 +116,6 @@ using namespace std;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -static const char* const UserInitiatedProfileName = &quot;org.webkit.profiles.user-initiated&quot;;
&gt; -static const char* const CPUProfileType = &quot;CPU&quot;;
&gt;  static const char* const resourceTrackingEnabledSettingName = &quot;resourceTrackingEnabled&quot;;
&gt;  static const char* const debuggerEnabledSettingName = &quot;debuggerEnabled&quot;;
&gt;  static const char* const profilerEnabledSettingName = &quot;profilerEnabled&quot;;
&gt; @@ -170,11 +169,6 @@ InspectorController::InspectorController(Page* page, InspectorClient* client)
&gt;      , m_injectedScriptHost(InjectedScriptHost::create(this))
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt;      , m_attachDebuggerWhenShown(false)
&gt; -    , m_profilerEnabled(!WTF_USE_JSC)
&gt; -    , m_recordingUserInitiatedProfile(false)
&gt; -    , m_currentUserInitiatedProfileNumber(-1)
&gt; -    , m_nextUserInitiatedProfileNumber(1)
&gt; -    , m_startProfiling(this, &amp;InspectorController::startUserInitiatedProfiling)
&gt;  #endif
&gt;  {
&gt;      ASSERT_ARG(page, page);
&gt; @@ -209,6 +203,7 @@ void InspectorController::inspectedPageDestroyed()
&gt;  
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt;      m_debuggerAgent.clear();
&gt; +    m_profilerAgent.clear();
&gt;  #endif
&gt;      ASSERT(m_inspectedPage);
&gt;      m_inspectedPage = 0;
&gt; @@ -504,10 +499,16 @@ void InspectorController::connectFrontend()
&gt;          String debuggerEnabled = setting(debuggerEnabledSettingName);
&gt;          if (debuggerEnabled == &quot;true&quot; || m_attachDebuggerWhenShown)
&gt;              enableDebugger();
&gt; +    }
&gt; +    if (ScriptProfiler::isProfilerAlwaysEnabled())
&gt; +        enableProfiler(true, false);
&gt; +    else {
&gt;          String profilerEnabled = setting(profilerEnabledSettingName);
&gt;          if (profilerEnabled == &quot;true&quot;)
&gt;              enableProfiler();
&gt;      }
&gt; +    if (profilerEnabled())
&gt; +        m_profilerAgent-&gt;setRemoteFrontend(m_remoteFrontend.get());
&gt;  #endif
&gt;  
&gt;      if (m_showAfterVisible == lastActivePanel)
&gt; @@ -594,7 +595,10 @@ void InspectorController::disconnectFrontend()
&gt;      hideHighlight();
&gt;  
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; -    stopUserInitiatedProfiling();
&gt; +    if (profilerEnabled()) {
&gt; +        m_profilerAgent-&gt;setRemoteFrontend(0);
&gt; +        stopUserInitiatedProfiling();
&gt; +    }
&gt;  #endif
&gt;  
&gt;      releaseFrontendLifetimeAgents();
&gt; @@ -638,7 +642,7 @@ void InspectorController::populateScriptObjects()
&gt;          m_remoteFrontend-&gt;monitoringXHRWasEnabled();
&gt;  
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; -    if (m_profilerEnabled)
&gt; +    if (profilerEnabled())
&gt;          m_remoteFrontend-&gt;profilerWasEnabled();
&gt;  #endif
&gt;  
&gt; @@ -745,11 +749,8 @@ void InspectorController::didCommitLoad(DocumentLoader* loader)
&gt;              m_debuggerAgent-&gt;clearForPageNavigation();
&gt;  #endif
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER) &amp;&amp; USE(JSC)
&gt; -        m_profiles.clear();
&gt; -        m_currentUserInitiatedProfileNumber = 1;
&gt; -        m_nextUserInitiatedProfileNumber = 1;
&gt; -        if (m_remoteFrontend)
&gt; -            m_remoteFrontend-&gt;resetProfilesPanel();
&gt; +        if (m_profilerAgent)
&gt; +            m_profilerAgent-&gt;resetState();
&gt;  #endif
&gt;          // unbindAllResources should be called before database and DOM storage
&gt;          // resources are cleared so that it has a chance to unbind them.
&gt; @@ -1456,145 +1457,48 @@ InspectorDOMStorageResource* InspectorController::getDOMStorageResourceForId(lon
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt;  void InspectorController::addProfile(PassRefPtr&lt;ScriptProfile&gt; prpProfile, unsigned lineNumber, const String&amp; sourceURL)
&gt;  {
&gt; -    if (!enabled())
&gt; -        return;
&gt; -
&gt; -    RefPtr&lt;ScriptProfile&gt; profile = prpProfile;
&gt; -    m_profiles.add(profile-&gt;uid(), profile);
&gt; -
&gt; -    if (m_remoteFrontend) {
&gt; -        m_remoteFrontend-&gt;addProfileHeader(createProfileHeader(*profile));
&gt; -    }
&gt; -
&gt; -    addProfileFinishedMessageToConsole(profile, lineNumber, sourceURL);
&gt; +    if (profilerEnabled())
&gt; +        m_profilerAgent-&gt;addProfile(prpProfile, lineNumber, sourceURL);
&gt;  }
&gt;  
&gt;  void InspectorController::addProfileFinishedMessageToConsole(PassRefPtr&lt;ScriptProfile&gt; prpProfile, unsigned lineNumber, const String&amp; sourceURL)
&gt;  {
&gt; -    RefPtr&lt;ScriptProfile&gt; profile = prpProfile;
&gt; -
&gt; -    String title = profile-&gt;title();
&gt; -    String message = String::format(&quot;Profile \&quot;webkit-profile://%s/%s#%d\&quot; finished.&quot;, CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data(), profile-&gt;uid());
&gt; -    addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
&gt; +    if (profilerEnabled())
&gt; +        m_profilerAgent-&gt;addProfileFinishedMessageToConsole(prpProfile, lineNumber, sourceURL);
&gt;  }
&gt;  
&gt;  void InspectorController::addStartProfilingMessageToConsole(const String&amp; title, unsigned lineNumber, const String&amp; sourceURL)
&gt;  {
&gt; -    String message = String::format(&quot;Profile \&quot;webkit-profile://%s/%s#0\&quot; started.&quot;, CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data());
&gt; -    addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
&gt; -}
&gt; -
&gt; -void InspectorController::removeProfile(unsigned uid)
&gt; -{
&gt; -    if (!enabled())
&gt; -        return;
&gt; -
&gt; -    if (m_profiles.contains(uid))
&gt; -        m_profiles.remove(uid);
&gt; +    if (profilerEnabled())
&gt; +        m_profilerAgent-&gt;addStartProfilingMessageToConsole(title, lineNumber, sourceURL);
&gt;  }
&gt;  
&gt; -void InspectorController::clearProfiles()
&gt; -{
&gt; -    if (!enabled())
&gt; -        return;
&gt; -
&gt; -    m_profiles.clear();
&gt; -    m_currentUserInitiatedProfileNumber = 1;
&gt; -    m_nextUserInitiatedProfileNumber = 1;
&gt; -}
&gt;  
&gt; -void InspectorController::getProfileHeaders(RefPtr&lt;InspectorArray&gt;* headers)
&gt; +bool InspectorController::isRecordingUserInitiatedProfile() const
&gt;  {
&gt; -    ProfilesMap::iterator profilesEnd = m_profiles.end();
&gt; -    for (ProfilesMap::iterator it = m_profiles.begin(); it != profilesEnd; ++it)
&gt; -        (*headers)-&gt;pushObject(createProfileHeader(*it-&gt;second));
&gt; +    return m_profilerAgent &amp;&amp; m_profilerAgent-&gt;isRecordingUserInitiatedProfile();
&gt;  }
&gt;  
&gt; -void InspectorController::getProfile(unsigned uid, RefPtr&lt;InspectorObject&gt;* profileObject)
&gt; +String InspectorController::getCurrentUserInitiatedProfileName(bool incrementProfileNumber)
&gt;  {
&gt; -    ProfilesMap::iterator it = m_profiles.find(uid);
&gt; -    if (it != m_profiles.end()) {
&gt; -        *profileObject = createProfileHeader(*it-&gt;second);
&gt; -        (*profileObject)-&gt;setObject(&quot;head&quot;, it-&gt;second-&gt;buildInspectorObjectForHead());
&gt; -    }
&gt; -}
&gt; -
&gt; -PassRefPtr&lt;InspectorObject&gt; InspectorController::createProfileHeader(const ScriptProfile&amp; profile)
&gt; -{
&gt; -    RefPtr&lt;InspectorObject&gt; header = InspectorObject::create();
&gt; -    header-&gt;setString(&quot;title&quot;, profile.title());
&gt; -    header-&gt;setNumber(&quot;uid&quot;, profile.uid());
&gt; -    header-&gt;setString(&quot;typeId&quot;, String(CPUProfileType));
&gt; -    return header;
&gt; +    if (profilerEnabled())
&gt; +        return m_profilerAgent-&gt;getCurrentUserInitiatedProfileName(incrementProfileNumber);
&gt; +    return &quot;&quot;;
&gt;  }
&gt;  
&gt; -String InspectorController::getCurrentUserInitiatedProfileName(bool incrementProfileNumber = false)
&gt; +void InspectorController::startUserInitiatedProfiling()
&gt;  {
&gt; -    if (incrementProfileNumber)
&gt; -        m_currentUserInitiatedProfileNumber = m_nextUserInitiatedProfileNumber++;
&gt; -
&gt; -    return String::format(&quot;%s.%d&quot;, UserInitiatedProfileName, m_currentUserInitiatedProfileNumber);
&gt; -}
&gt; -
&gt; -void InspectorController::startUserInitiatedProfilingSoon()
&gt; -{
&gt; -    m_startProfiling.startOneShot(0);
&gt; -}
&gt; -
&gt; -void InspectorController::startUserInitiatedProfiling(Timer&lt;InspectorController&gt;*)
&gt; -{
&gt; -    if (!enabled())
&gt; -        return;
&gt; -
&gt;      if (!profilerEnabled()) {
&gt;          enableProfiler(false, true);
&gt;          ScriptDebugServer::shared().recompileAllJSFunctions();
&gt;      }
&gt; -
&gt; -    m_recordingUserInitiatedProfile = true;
&gt; -
&gt; -    String title = getCurrentUserInitiatedProfileName(true);
&gt; -
&gt; -#if USE(JSC)
&gt; -    JSC::ExecState* scriptState = toJSDOMWindow(m_inspectedPage-&gt;mainFrame(), debuggerWorld())-&gt;globalExec();
&gt; -#else
&gt; -    ScriptState* scriptState = 0;
&gt; -#endif
&gt; -    ScriptProfiler::start(scriptState, title);
&gt; -
&gt; -    addStartProfilingMessageToConsole(title, 0, String());
&gt; -
&gt; -    toggleRecordButton(true);
&gt; +    m_profilerAgent-&gt;startUserInitiatedProfiling();
&gt;  }
&gt;  
&gt;  void InspectorController::stopUserInitiatedProfiling()
&gt;  {
&gt; -    if (!enabled())
&gt; -        return;
&gt; -
&gt; -    m_recordingUserInitiatedProfile = false;
&gt; -
&gt; -    String title = getCurrentUserInitiatedProfileName();
&gt; -
&gt; -#if USE(JSC)
&gt; -    JSC::ExecState* scriptState = toJSDOMWindow(m_inspectedPage-&gt;mainFrame(), debuggerWorld())-&gt;globalExec();
&gt; -#else
&gt; -    // Use null script state to avoid filtering by context security token.
&gt; -    // All functions from all iframes should be visible from Inspector UI.
&gt; -    ScriptState* scriptState = 0;
&gt; -#endif
&gt; -    RefPtr&lt;ScriptProfile&gt; profile = ScriptProfiler::stop(scriptState, title);
&gt; -    if (profile)
&gt; -        addProfile(profile, 0, String());
&gt; -
&gt; -    toggleRecordButton(false);
&gt; -}
&gt; -
&gt; -void InspectorController::toggleRecordButton(bool isProfiling)
&gt; -{
&gt; -    if (!m_remoteFrontend)
&gt; -        return;
&gt; -    m_remoteFrontend-&gt;setRecordingProfile(isProfiling);
&gt; +    if (profilerEnabled())
&gt; +        m_profilerAgent-&gt;stopUserInitiatedProfiling();
&gt;  }
&gt;  
&gt;  void InspectorController::enableProfiler(bool always, bool skipRecompile)
&gt; @@ -1602,14 +1506,14 @@ void InspectorController::enableProfiler(bool always, bool skipRecompile)
&gt;      if (always)
&gt;          setSetting(profilerEnabledSettingName, &quot;true&quot;);
&gt;  
&gt; -    if (m_profilerEnabled)
&gt; +    if (profilerEnabled())
&gt;          return;
&gt;  
&gt; -    m_profilerEnabled = true;
&gt; -
&gt;      if (!skipRecompile)
&gt;          ScriptDebugServer::shared().recompileAllJSFunctionsSoon();
&gt;  
&gt; +    m_profilerAgent = InspectorProfilerAgent::create(this, m_remoteFrontend.get());
&gt; +
&gt;      if (m_remoteFrontend)
&gt;          m_remoteFrontend-&gt;profilerWasEnabled();
&gt;  }
&gt; @@ -1619,10 +1523,10 @@ void InspectorController::disableProfiler(bool always)
&gt;      if (always)
&gt;          setSetting(profilerEnabledSettingName, &quot;false&quot;);
&gt;  
&gt; -    if (!m_profilerEnabled)
&gt; +    if (!profilerEnabled())
&gt;          return;
&gt;  
&gt; -    m_profilerEnabled = false;
&gt; +    m_profilerAgent.clear();
&gt;  
&gt;      ScriptDebugServer::shared().recompileAllJSFunctionsSoon();
&gt;  
&gt; diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
&gt; index 8d96005..672a7c1 100644
&gt; --- a/WebCore/inspector/InspectorController.h
&gt; +++ b/WebCore/inspector/InspectorController.h
&gt; @@ -33,9 +33,7 @@
&gt;  #include &quot;Cookie.h&quot;
&gt;  #include &quot;InspectorDOMAgent.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt; -#include &quot;ScriptProfile.h&quot;
&gt;  #include &quot;ScriptState.h&quot;
&gt; -#include &quot;Timer.h&quot;
&gt;  #include &lt;wtf/HashMap.h&gt;
&gt;  #include &lt;wtf/HashSet.h&gt;
&gt;  #include &lt;wtf/ListHashSet.h&gt;
&gt; @@ -65,6 +63,7 @@ class InspectorDatabaseResource;
&gt;  class InspectorDebuggerAgent;
&gt;  class InspectorFrontendClient;
&gt;  class InspectorObject;
&gt; +class InspectorProfilerAgent;
&gt;  class InspectorResource;
&gt;  class InspectorStorageAgent;
&gt;  class InspectorTimelineAgent;
&gt; @@ -78,6 +77,7 @@ class ResourceRequest;
&gt;  class ResourceResponse;
&gt;  class ResourceError;
&gt;  class ScriptCallStack;
&gt; +class ScriptProfile;
&gt;  class ScriptString;
&gt;  class SharedBuffer;
&gt;  class Storage;
&gt; @@ -228,20 +228,14 @@ public:
&gt;      void addProfile(PassRefPtr&lt;ScriptProfile&gt;, unsigned lineNumber, const String&amp; sourceURL);
&gt;      void addProfileFinishedMessageToConsole(PassRefPtr&lt;ScriptProfile&gt;, unsigned lineNumber, const String&amp; sourceURL);
&gt;      void addStartProfilingMessageToConsole(const String&amp; title, unsigned lineNumber, const String&amp; sourceURL);
&gt; -    void removeProfile(unsigned);
&gt; -    void clearProfiles();
&gt; -
&gt; -    bool isRecordingUserInitiatedProfile() const { return m_recordingUserInitiatedProfile; }
&gt; -
&gt; -    String getCurrentUserInitiatedProfileName(bool incrementProfileNumber);
&gt; -    void startUserInitiatedProfiling(Timer&lt;InspectorController&gt;* = 0);
&gt; +    bool isRecordingUserInitiatedProfile() const;
&gt; +    String getCurrentUserInitiatedProfileName(bool incrementProfileNumber = false);
&gt; +    void startUserInitiatedProfiling();
&gt;      void stopUserInitiatedProfiling();
&gt; -    void startProfiling() { startUserInitiatedProfiling(); }
&gt; -    void stopProfiling() { stopUserInitiatedProfiling(); }
&gt; -
&gt;      void enableProfiler(bool always = false, bool skipRecompile = false);
&gt;      void disableProfiler(bool always = false);
&gt; -    bool profilerEnabled() const { return enabled() &amp;&amp; m_profilerEnabled; }
&gt; +    bool profilerEnabled() const { return enabled() &amp;&amp; m_profilerAgent; }
&gt; +    InspectorProfilerAgent* profilerAgent() const { return m_profilerAgent.get(); }
&gt;  
&gt;      void enableDebugger();
&gt;      void disableDebugger(bool always = false);
&gt; @@ -283,14 +277,9 @@ private:
&gt;      void releaseFrontendLifetimeAgents();
&gt;  
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; -    typedef HashMap&lt;unsigned int, RefPtr&lt;ScriptProfile&gt; &gt; ProfilesMap;
&gt;  
&gt; -    void startUserInitiatedProfilingSoon();
&gt;      void toggleRecordButton(bool);
&gt;      void enableDebuggerFromFrontend(bool always);
&gt; -    void getProfileHeaders(RefPtr&lt;InspectorArray&gt;* headers);
&gt; -    void getProfile(unsigned uid, RefPtr&lt;InspectorObject&gt;* profileObject);
&gt; -    PassRefPtr&lt;InspectorObject&gt; createProfileHeader(const ScriptProfile&amp; profile);
&gt;  #endif
&gt;  #if ENABLE(DATABASE)
&gt;      void selectDatabase(Database* database);
&gt; @@ -380,12 +369,7 @@ private:
&gt;      bool m_attachDebuggerWhenShown;
&gt;      OwnPtr&lt;InspectorDebuggerAgent&gt; m_debuggerAgent;
&gt;  
&gt; -    bool m_profilerEnabled;
&gt; -    bool m_recordingUserInitiatedProfile;
&gt; -    int m_currentUserInitiatedProfileNumber;
&gt; -    unsigned m_nextUserInitiatedProfileNumber;
&gt; -    Timer&lt;InspectorController&gt; m_startProfiling;
&gt; -    ProfilesMap m_profiles;
&gt; +    OwnPtr&lt;InspectorProfilerAgent&gt; m_profilerAgent;
&gt;  #endif
&gt;  #if ENABLE(WORKERS)
&gt;      typedef HashMap&lt;intptr_t, RefPtr&lt;InspectorWorkerResource&gt; &gt; WorkersMap;
&gt; diff --git a/WebCore/inspector/InspectorProfilerAgent.cpp b/WebCore/inspector/InspectorProfilerAgent.cpp
&gt; new file mode 100644
&gt; index 0000000..3954194
&gt; --- /dev/null
&gt; +++ b/WebCore/inspector/InspectorProfilerAgent.cpp
&gt; @@ -0,0 +1,184 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;InspectorProfilerAgent.h&quot;
&gt; +
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +
&gt; +#include &quot;Console.h&quot;
&gt; +#include &quot;InspectorController.h&quot;
&gt; +#include &quot;InspectorValues.h&quot;
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;Page.h&quot;
&gt; +#include &quot;RemoteInspectorFrontend.h&quot;
&gt; +#include &quot;ScriptProfile.h&quot;
&gt; +#include &quot;ScriptProfiler.h&quot;
&gt; +#include &lt;wtf/OwnPtr.h&gt;
&gt; +
&gt; +#if USE(JSC)
&gt; +#include &quot;JSDOMWindow.h&quot;
&gt; +#endif
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +static const char* const UserInitiatedProfileName = &quot;org.webkit.profiles.user-initiated&quot;;
&gt; +static const char* const CPUProfileType = &quot;CPU&quot;;
&gt; +
&gt; +PassOwnPtr&lt;InspectorProfilerAgent&gt; InspectorProfilerAgent::create(InspectorController* inspectorController, RemoteInspectorFrontend* remoteFrontend)
&gt; +{
&gt; +    OwnPtr&lt;InspectorProfilerAgent&gt; agent = adoptPtr(new InspectorProfilerAgent(inspectorController, remoteFrontend));
&gt; +    return agent.release();
&gt; +}
&gt; +
&gt; +InspectorProfilerAgent::InspectorProfilerAgent(InspectorController* inspectorController, RemoteInspectorFrontend* remoteFrontend)
&gt; +        : m_inspectorController(inspectorController)
&gt; +        , m_remoteFrontend(remoteFrontend)
&gt; +        , m_recordingUserInitiatedProfile(false)
&gt; +        , m_currentUserInitiatedProfileNumber(-1)
&gt; +        , m_nextUserInitiatedProfileNumber(1)
&gt; +{
&gt; +}
&gt; +
&gt; +InspectorProfilerAgent::~InspectorProfilerAgent()
&gt; +{
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::addProfile(PassRefPtr&lt;ScriptProfile&gt; prpProfile, unsigned lineNumber, const String&amp; sourceURL)
&gt; +{
&gt; +    RefPtr&lt;ScriptProfile&gt; profile = prpProfile;
&gt; +    m_profiles.add(profile-&gt;uid(), profile);
&gt; +    if (m_remoteFrontend)
&gt; +        m_remoteFrontend-&gt;addProfileHeader(createProfileHeader(*profile));
&gt; +    addProfileFinishedMessageToConsole(profile, lineNumber, sourceURL);
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::addProfileFinishedMessageToConsole(PassRefPtr&lt;ScriptProfile&gt; prpProfile, unsigned lineNumber, const String&amp; sourceURL)
&gt; +{
&gt; +    RefPtr&lt;ScriptProfile&gt; profile = prpProfile;
&gt; +
&gt; +    String title = profile-&gt;title();
&gt; +    String message = String::format(&quot;Profile \&quot;webkit-profile://%s/%s#%d\&quot; finished.&quot;, CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data(), profile-&gt;uid());
&gt; +    m_inspectorController-&gt;addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::addStartProfilingMessageToConsole(const String&amp; title, unsigned lineNumber, const String&amp; sourceURL)
&gt; +{
&gt; +    String message = String::format(&quot;Profile \&quot;webkit-profile://%s/%s#0\&quot; started.&quot;, CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data());
&gt; +    m_inspectorController-&gt;addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;InspectorObject&gt; InspectorProfilerAgent::createProfileHeader(const ScriptProfile&amp; profile)
&gt; +{
&gt; +    RefPtr&lt;InspectorObject&gt; header = InspectorObject::create();
&gt; +    header-&gt;setString(&quot;title&quot;, profile.title());
&gt; +    header-&gt;setNumber(&quot;uid&quot;, profile.uid());
&gt; +    header-&gt;setString(&quot;typeId&quot;, String(CPUProfileType));
&gt; +    return header;
&gt; +}
&gt; +
&gt; +String InspectorProfilerAgent::getCurrentUserInitiatedProfileName(bool incrementProfileNumber)
&gt; +{
&gt; +    if (incrementProfileNumber)
&gt; +        m_currentUserInitiatedProfileNumber = m_nextUserInitiatedProfileNumber++;
&gt; +
&gt; +    return String::format(&quot;%s.%d&quot;, UserInitiatedProfileName, m_currentUserInitiatedProfileNumber);
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::getProfileHeaders(RefPtr&lt;InspectorArray&gt;* headers)
&gt; +{
&gt; +    ProfilesMap::iterator profilesEnd = m_profiles.end();
&gt; +    for (ProfilesMap::iterator it = m_profiles.begin(); it != profilesEnd; ++it)
&gt; +        (*headers)-&gt;pushObject(createProfileHeader(*it-&gt;second));
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::getProfile(unsigned uid, RefPtr&lt;InspectorObject&gt;* profileObject)
&gt; +{
&gt; +    ProfilesMap::iterator it = m_profiles.find(uid);
&gt; +    if (it != m_profiles.end()) {
&gt; +        *profileObject = createProfileHeader(*it-&gt;second);
&gt; +        (*profileObject)-&gt;setObject(&quot;head&quot;, it-&gt;second-&gt;buildInspectorObjectForHead());
&gt; +    }
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::removeProfile(unsigned uid)
&gt; +{
&gt; +    if (m_profiles.contains(uid))
&gt; +        m_profiles.remove(uid);
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::resetState()
&gt; +{
&gt; +    m_profiles.clear();
&gt; +    m_currentUserInitiatedProfileNumber = 1;
&gt; +    m_nextUserInitiatedProfileNumber = 1;
&gt; +    if (m_remoteFrontend)
&gt; +        m_remoteFrontend-&gt;resetProfilesPanel();
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::startUserInitiatedProfiling()
&gt; +{
&gt; +    m_recordingUserInitiatedProfile = true;
&gt; +    String title = getCurrentUserInitiatedProfileName(true);
&gt; +#if USE(JSC)
&gt; +    JSC::ExecState* scriptState = toJSDOMWindow(m_inspectorController-&gt;inspectedPage()-&gt;mainFrame(), debuggerWorld())-&gt;globalExec();
&gt; +#else
&gt; +    ScriptState* scriptState = 0;
&gt; +#endif
&gt; +    ScriptProfiler::start(scriptState, title);
&gt; +    addStartProfilingMessageToConsole(title, 0, String());
&gt; +    toggleRecordButton(true);
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::stopUserInitiatedProfiling()
&gt; +{
&gt; +    m_recordingUserInitiatedProfile = false;
&gt; +    String title = getCurrentUserInitiatedProfileName();
&gt; +#if USE(JSC)
&gt; +    JSC::ExecState* scriptState = toJSDOMWindow(m_inspectorController-&gt;inspectedPage()-&gt;mainFrame(), debuggerWorld())-&gt;globalExec();
&gt; +#else
&gt; +    // Use null script state to avoid filtering by context security token.
&gt; +    // All functions from all iframes should be visible from Inspector UI.
&gt; +    ScriptState* scriptState = 0;
&gt; +#endif
&gt; +    RefPtr&lt;ScriptProfile&gt; profile = ScriptProfiler::stop(scriptState, title);
&gt; +    if (profile)
&gt; +        addProfile(profile, 0, String());
&gt; +    toggleRecordButton(false);
&gt; +}
&gt; +
&gt; +void InspectorProfilerAgent::toggleRecordButton(bool isProfiling)
&gt; +{
&gt; +    if (m_remoteFrontend)
&gt; +        m_remoteFrontend-&gt;setRecordingProfile(isProfiling);
&gt; +}
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // ENABLE(JAVASCRIPT_DEBUGGER)
&gt; diff --git a/WebCore/inspector/InspectorProfilerAgent.h b/WebCore/inspector/InspectorProfilerAgent.h
&gt; new file mode 100644
&gt; index 0000000..2ce6549
&gt; --- /dev/null
&gt; +++ b/WebCore/inspector/InspectorProfilerAgent.h
&gt; @@ -0,0 +1,89 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef InspectorProfilerAgent_h
&gt; +#define InspectorProfilerAgent_h
&gt; +
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &lt;wtf/Forward.h&gt;
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +#include &lt;wtf/Noncopyable.h&gt;
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class InspectorArray;
&gt; +class InspectorController;
&gt; +class InspectorObject;
&gt; +class ScriptProfile;
&gt; +class RemoteInspectorFrontend;
&gt; +
&gt; +class InspectorProfilerAgent : public Noncopyable {
&gt; +public:
&gt; +    static PassOwnPtr&lt;InspectorProfilerAgent&gt; create(InspectorController*, RemoteInspectorFrontend*);
&gt; +    virtual ~InspectorProfilerAgent();
&gt; +
&gt; +    void addProfile(PassRefPtr&lt;ScriptProfile&gt; prpProfile, unsigned lineNumber, const String&amp; sourceURL);
&gt; +    void addProfileFinishedMessageToConsole(PassRefPtr&lt;ScriptProfile&gt;, unsigned lineNumber, const String&amp; sourceURL);
&gt; +    void addStartProfilingMessageToConsole(const String&amp; title, unsigned lineNumber, const String&amp; sourceURL);
&gt; +    void clearProfiles() { resetState(); }
&gt; +    String getCurrentUserInitiatedProfileName(bool incrementProfileNumber = false);
&gt; +    void getProfileHeaders(RefPtr&lt;InspectorArray&gt;* headers);
&gt; +    void getProfile(unsigned uid, RefPtr&lt;InspectorObject&gt;* profileObject);
&gt; +    bool isRecordingUserInitiatedProfile() { return m_recordingUserInitiatedProfile; }
&gt; +    void removeProfile(unsigned uid);
&gt; +    void resetState();
&gt; +    void setRemoteFrontend(RemoteInspectorFrontend* frontend) { m_remoteFrontend = frontend; }
&gt; +    void startProfiling() { startUserInitiatedProfiling(); }
&gt; +    void startUserInitiatedProfiling();
&gt; +    void stopProfiling() { stopUserInitiatedProfiling(); }
&gt; +    void stopUserInitiatedProfiling();
&gt; +    void toggleRecordButton(bool isProfiling);
&gt; +
&gt; +private:
&gt; +    typedef HashMap&lt;unsigned int, RefPtr&lt;ScriptProfile&gt; &gt; ProfilesMap;
&gt; +
&gt; +    InspectorProfilerAgent(InspectorController*, RemoteInspectorFrontend*);
&gt; +    PassRefPtr&lt;InspectorObject&gt; createProfileHeader(const ScriptProfile&amp; profile);
&gt; +
&gt; +    InspectorController* m_inspectorController;
&gt; +    RemoteInspectorFrontend* m_remoteFrontend;
&gt; +    bool m_recordingUserInitiatedProfile;
&gt; +    int m_currentUserInitiatedProfileNumber;
&gt; +    unsigned m_nextUserInitiatedProfileNumber;
&gt; +    ProfilesMap m_profiles;
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +
&gt; +#endif // !defined(InspectorProfilerAgent_h)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266766</commentid>
    <comment_count>7</comment_count>
      <attachid>64857</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-19 08:46:17 -0700</bug_when>
    <thetext>Created attachment 64857
This time, interactive_ui_tests pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267206</commentid>
    <comment_count>8</comment_count>
      <attachid>64857</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-20 04:49:15 -0700</bug_when>
    <thetext>Comment on attachment 64857
This time, interactive_ui_tests pass

WebCore/inspector/InspectorController.cpp:177
 +      // Needed for &apos;console.profile&apos; to work.
This seems wrong. JSC does not require this for console.profile to work?

WebCore/inspector/InspectorController.cpp:506
 +      String profilerEnabledSetting = setting(profilerEnabledSettingName);
we should not perform this check in case profiler is always enabled?

WebCore/inspector/InspectorProfilerAgent.h:64
 +      void setRemoteFrontend(RemoteInspectorFrontend* frontend) { m_remoteFrontend = frontend; }
By the nature of your agent, all the calls to it should be of query form (initiated from the front-end side). You should not need remoteFrontend reference for it to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267792</commentid>
    <comment_count>9</comment_count>
      <attachid>65086</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-23 01:23:25 -0700</bug_when>
    <thetext>Created attachment 65086
Comments addressed.

As we had discussed offline, calls to InspectorProfilerAgent can&apos;t be fully converted into query form, e.g. starting and stopping profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267793</commentid>
    <comment_count>10</comment_count>
      <attachid>65087</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-23 01:24:59 -0700</bug_when>
    <thetext>Created attachment 65087
Comments addressed (forgot to mark the previous attachment as a patch.)

As we had discussed offline, calls to InspectorProfilerAgent can&apos;t be fully converted into query form, e.g. starting and stopping profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267798</commentid>
    <comment_count>11</comment_count>
      <attachid>65087</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-23 01:49:07 -0700</bug_when>
    <thetext>Comment on attachment 65087
Comments addressed (forgot to mark the previous attachment as a patch.)

WebCore/inspector/InspectorController.cpp:1470
 +  bool InspectorController::isRecordingUserInitiatedProfile() const
I&apos;d rather get rid of the usage in the WebKit layer. WebKit is starting and stopping it, why doesn&apos;t it track its own state? Also, I&apos;d implement user initiated profiling in the WebKit layer as a whole...

WebCore/inspector/InspectorProfilerAgent.cpp:62
 +          : m_inspectorController(inspectorController)
Too many spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267823</commentid>
    <comment_count>12</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-23 03:23:52 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/65797:


2010-08-23  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Extract profiler-related code and data from InspectorController into
        InspectorProfilerAgent.

        https://bugs.webkit.org/show_bug.cgi?id=44174</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64704</attachid>
            <date>2010-08-18 07:18:16 -0700</date>
            <delta_ts>2010-08-18 08:04:02 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>44174-patch</filename>
            <type>text/plain</type>
            <size>39391</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmMxY2UyYi4uNWNmNjJkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMC0wOC0xOCAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgcHJvZmlsZXItcmVsYXRlZCBjb2RlIGFuZCBk
YXRhIGZyb20gSW5zcGVjdG9yQ29udHJvbGxlciBpbnRvIFByb2ZpbGVyQWdlbnQuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTc0CisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFBy
b2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0Vu
YWJsZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9y
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25z
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5n
VXNlckluaXRpYXRlZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQ
cm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
UHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJs
ZVByb2ZpbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyQWdlbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp+SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50
OjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6
OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVByb2Zp
bGVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6c3RvcFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
dG9nZ2xlUmVjb3JkQnV0dG9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6OmNsZWFyUHJvZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFydFByb2ZpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wUHJvZmlsaW5nKToKKwogMjAxMC0wOC0x
OCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDk1NThmZDMuLmQ0YmI0NjUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtMTYyNSw2ICsxNjI1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0b3JhZ2VBZ2VudC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4ZjBjYmE5Li42ZmNlM2M2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTc2OCw2
ICsxNzY4LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCcsCisgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwJywKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KaW5kZXggNTI5YWZiNS4uNmE4YzQ4NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03NTMsNiArNzUzLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCkBAIC0xNTIxLDYgKzE1
MjIsNyBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKKyAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
aCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IGQ1MWNiNDAuLmRiOWM0Y2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtNTE3ODksNiArNTE3ODksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9y
UmVzb3VyY2UuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDAzOGNmNC4uZDFiNDExMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NDAsNiArMjc0MCw4IEBACiAJ
CTk3RUY1NjEwMTFFNDA3ODMwMDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0VGNTYwRTExRTQw
NzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwICovOyB9OwogCQk5N0VGNTYx
MTExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY1NjBGMTFFNDA3ODMwMDdFMDI2
RiAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5oICovOyB9OwogCQk5N0VGN0RGRTEwN0U1NUI3MDBE
N0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlw
dENvbnRyb2xsZXJCYXNlLmNwcCAqLzsgfTsKKwkJOUYwRDZCMkUxMjFCRkVCQTAwNkMwMjg4IC8q
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQuY3BwICovOyB9OworCQk5RjBENkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQuaCAqLzsgfTsKIAkJOUY2RkMxOTYxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVn
U2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlGNkZDMTk0MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgKi87IH07
CiAJCTlGNkZDMTk3MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUY2RkMxOTUxMTIyRTgy
QTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUY3MjMwNEYxMTE4NEI0MTAwQUQwMTI2IC8qIFNj
cmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlGNzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg1OTIsNiArODU5NCw4
IEBACiAJCTk3RUY1NjBFMTFFNDA3ODMwMDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQ29uc3RydWN0aW9u
U2l0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3RUY1NjBGMTFFNDA3ODMw
MDdFMDI2RiAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MQ29uc3RydWN0aW9uU2l0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q29udHJvbGxl
ckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5RjBENkIyQzEyMUJGRUJB
MDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjZGQzE5
NDExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5RjZGQzE5NTExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVi
dWdTZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RGVidWdT
ZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY3MjMwNEMxMTE4NEI0MTAw
QUQwMTI2IC8qIFNjcmlwdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2NyaXB0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE3ODIs
NiArMTE3ODYsOCBAQAogCQkJCTdBMEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwICovLAogCQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaCAqLywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUgLyog
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCAqLywKKwkJCQk5RjBENkIyQzEyMUJGRUJBMDA2QzAy
ODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi8sCisJCQkJOUYwRDZCMkQxMjFCRkVC
QTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLywKIAkJCQk0MUYwNjIwMDBG
NUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwICovLAogCQkJCTQxRjA2MUZG
MEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oICovLAogCQkJCTdBQjBCMUJF
MTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwICovLApAQCAtMjAz
MjAsNiArMjAzMjYsNyBAQAogCQkJCTJFREVGMUY1MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVn
aXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFREVGMUY3MTIxQjBFRkMwMDcyNkRCMiAvKiBC
bG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURFRjFGODEyMUIwRUZDMDA3
MjZEQjIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk5RjBENkIyRjEy
MUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0yMjc3MSw2ICsyMjc3OCw3IEBACiAJCQkJQzU3RkVERTExMjEyRUU5QzAwOTdCRTY1IC8q
IEZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2
REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFREVGMUY2MTIxQjBFRkMw
MDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlGMEQ2
QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCBmMzcyYzNj
Li42MmFlOWJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVy
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtNDYs
NiArNDYsMTEgQEAgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBTY3JpcHRQcm9maWxlcjo6c3Rv
cChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gU2NyaXB0UHJv
ZmlsZTo6Y3JlYXRlKHByb2ZpbGUpOwogfQogCitib29sIFNjcmlwdFByb2ZpbGVyOjppc1Byb2Zp
bGVyQWx3YXlzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaAppbmRleCA0ZmEzMzFjLi4xODBjNDlmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0YXRlKiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIHZvaWQgdGFrZUhlYXBTbmFw
c2hvdCgpIHsgfQogICAgIHN0YXRpYyBsb25nIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZywgU3Ry
aW5nKikgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFi
bGVkKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0UHJvZmlsZXIuY3BwCmluZGV4IDkyMTM3NzQuLjBkZTRhMjQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0UHJvZmlsZXIuY3BwCkBAIC02OSw0ICs2OSw5IEBAIGxvbmcgU2NyaXB0UHJvZmls
ZXI6OmdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBwb3NpdGlvbiwgU3RyaW5nKiBkYXRhKQogICAg
IHJldHVybiBwb3NpdGlvbjsKIH0KIAorYm9vbCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFs
d2F5c0VuYWJsZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggNWMxMDU0Yi4uYjFh
YjNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtNDUsNiArNDUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gc3RvcChTY3Jp
cHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHRh
a2VIZWFwU25hcHNob3QoKTsKICAgICBzdGF0aWMgbG9uZyBnZXRQcm9maWxlckxvZ0xpbmVzKGxv
bmcgcG9zaXRpb24sIFN0cmluZyogZGF0YSk7CisgICAgc3RhdGljIGJvb2wgaXNQcm9maWxlckFs
d2F5c0VuYWJsZWQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IDEwZTA4ODIuLjQ1ZDY5OTIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0K
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMzgs
NiArMzgsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKICAgICAi
aGVhZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLAogICAgICJoYW5k
bGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCgpIiwKIH07CiskdHlwZVRyYW5zZm9ybXsiUHJvZmlsZXIifSA9IHsKKyAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvclByb2ZpbGVyQWdlbnQiLAorICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JQcm9maWxlckFnZW50LmgiLAorICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPnByb2ZpbGVyQWdlbnQoKSIsCit9OwogJHR5cGVUcmFuc2Zvcm17IkZyb250
ZW5kIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCIsCiAg
ICAgImhlYWRlciIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kLmgiLApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5pZGwKaW5kZXggMWM2NmI1OS4uNDg2NDg0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRs
CkBAIC0xNDUsMTQgKzE0NSwxNCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPUNv
bnRyb2xsZXJdIHZvaWQgZW5hYmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogICAgICAg
ICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29sZWFuIGFs
d2F5cyk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzdGFydFByb2ZpbGlu
ZygpOwotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHN0b3BQcm9maWxpbmcoKTsK
KyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsKKyAgICAg
ICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCi0gICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoaW4gbG9uZyBjYWxsSWQs
IG91dCBBcnJheSBoZWFkZXJzKTsKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBn
ZXRQcm9maWxlKGluIGxvbmcgY2FsbElkLCBpbiB1bnNpZ25lZCBsb25nIHVpZCwgb3V0IE9iamVj
dCBwcm9maWxlKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZUhl
YWRlcnMoaW4gbG9uZyBjYWxsSWQsIG91dCBBcnJheSBoZWFkZXJzKTsKKyAgICAgICAgW2hhbmRs
ZXI9UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZShpbiBsb25nIGNhbGxJZCwgaW4gdW5zaWduZWQg
bG9uZyB1aWQsIG91dCBPYmplY3QgcHJvZmlsZSk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJv
bGxlcl0gdm9pZCByZW1vdmVQcm9maWxlKGluIHVuc2lnbmVkIGxvbmcgdWlkKTsKLSAgICAgICAg
W2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CisgICAgICAgIFtoYW5k
bGVyPVByb2ZpbGVyXSB2b2lkIHJlbW92ZVByb2ZpbGUoaW4gdW5zaWduZWQgbG9uZyB1aWQpOwor
ICAgICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CiAKICAgICAg
ICAgW2hhbmRsZXI9QmFja2VuZF0gdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7CiAgICAgICAgIFto
YW5kbGVyPUJhY2tlbmRdIHZvaWQgZ2V0UHJvZmlsZXJMb2dMaW5lcyhpbiBsb25nIGNhbGxJZCwg
aW4gbG9uZyBpblBvc2l0aW9uLCBvdXQgbG9uZyBvdXRQb3NpdGlvbiwgb3V0IFN0cmluZyBsb2cp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhYzY3MGNi
Li43NTA1NzZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3Rv
cmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMTE1
LDggKzExNiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJv
cmcud2Via2l0LnByb2ZpbGVzLnVzZXItaW5pdGlhdGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBDUFVQcm9maWxlVHlwZSA9ICJDUFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJl
c291cmNlVHJhY2tpbmdFbmFibGVkU2V0dGluZ05hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlYnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1l
ID0gImRlYnVnZ2VyRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJF
bmFibGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKQEAgLTE3MCwxMSArMTY5LDYg
QEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVj
dGVkU2NyaXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fcHJv
ZmlsZXJFbmFibGVkKCFXVEZfVVNFX0pTQykKLSAgICAsIG1fcmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGUoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJl
cigtMSkKLSAgICAsIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCi0gICAgLCBt
X3N0YXJ0UHJvZmlsaW5nKHRoaXMsICZJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcpCiAjZW5kaWYKIHsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwpA
QCAtMjA5LDYgKzIwMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFn
ZURlc3Ryb3llZCgpCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBtX2Rl
YnVnZ2VyQWdlbnQuY2xlYXIoKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQuY2xlYXIoKTsKICNlbmRp
ZgogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7
CkBAIC01MDQsNiArNDk5LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZy
b250ZW5kKCkKICAgICAgICAgU3RyaW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVidWdn
ZXJFbmFibGVkU2V0dGluZ05hbWUpOwogICAgICAgICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0
cnVlIiB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQogICAgICAgICAgICAgZW5hYmxlRGVi
dWdnZXIoKTsKKyAgICB9CisgICAgaWYgKFNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlz
RW5hYmxlZCgpKQorICAgICAgICBlbmFibGVQcm9maWxlcih0cnVlLCBmYWxzZSk7CisgICAgZWxz
ZSB7CiAgICAgICAgIFN0cmluZyBwcm9maWxlckVuYWJsZWQgPSBzZXR0aW5nKHByb2ZpbGVyRW5h
YmxlZFNldHRpbmdOYW1lKTsKICAgICAgICAgaWYgKHByb2ZpbGVyRW5hYmxlZCA9PSAidHJ1ZSIp
CiAgICAgICAgICAgICBlbmFibGVQcm9maWxlcigpOwpAQCAtNjM4LDcgKzYzNyw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICAgICAgbV9y
ZW1vdGVGcm9udGVuZC0+bW9uaXRvcmluZ1hIUldhc0VuYWJsZWQoKTsKIAogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChtX3Byb2ZpbGVyRW5hYmxlZCkKKyAgICBpZiAo
cHJvZmlsZXJFbmFibGVkKCkpCiAgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPnByb2ZpbGVyV2Fz
RW5hYmxlZCgpOwogI2VuZGlmCiAKQEAgLTc0NSw5ICs3NDQsOCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAg
ICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdlTmF2aWdhdGlvbigpOwogI2VuZGlmCiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0gICAgICAgIG1fcHJv
ZmlsZXMuY2xlYXIoKTsKLSAgICAgICAgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1i
ZXIgPSAxOwotICAgICAgICBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IDE7Cisg
ICAgICAgIGlmIChtX3Byb2ZpbGVyQWdlbnQpCisgICAgICAgICAgICBtX3Byb2ZpbGVyQWdlbnQt
PnJlc2V0U3RhdGUoKTsKICAgICAgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCiAgICAgICAgICAg
ICBtX3JlbW90ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKICNlbmRpZgpAQCAtMTQ1
NiwxNDUgKzE0NTQsNDUgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JD
b250cm9sbGVyOjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChsb24KICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZShQ
YXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2Zp
bGU7Ci0gICAgbV9wcm9maWxlcy5hZGQocHJvZmlsZS0+dWlkKCksIHByb2ZpbGUpOwotCi0gICAg
aWYgKG1fcmVtb3RlRnJvbnRlbmQpIHsKLSAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJv
ZmlsZUhlYWRlcihjcmVhdGVQcm9maWxlSGVhZGVyKCpwcm9maWxlKSk7Ci0gICAgfQotCi0gICAg
YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShwcm9maWxlLCBsaW5lTnVtYmVyLCBz
b3VyY2VVUkwpOworICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5hZGRQcm9maWxlKHBycFByb2ZpbGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRv
Q29uc29sZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIFJlZlB0cjxTY3JpcHRQ
cm9maWxlPiBwcm9maWxlID0gcHJwUHJvZmlsZTsKLQotICAgIFN0cmluZyB0aXRsZSA9IHByb2Zp
bGUtPnRpdGxlKCk7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmls
ZSBcIndlYmtpdC1wcm9maWxlOi8vJXMvJXMjJWRcIiBmaW5pc2hlZC4iLCBDUFVQcm9maWxlVHlw
ZSwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRsZSkudXRmOCgpLmRhdGEoKSwgcHJv
ZmlsZS0+dWlkKCkpOwotICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwpOworICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFn
ZW50LT5hZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKHBycFByb2ZpbGUsIGxpbmVO
dW1iZXIsIHNvdXJjZVVSTCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU3Rh
cnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIFN0cmluZyBtZXNz
YWdlID0gU3RyaW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIzBc
IiBzdGFydGVkLiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KHRpdGxlKS51dGY4KCkuZGF0YSgpKTsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2Fn
ZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51
bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVQ
cm9maWxlKHVuc2lnbmVkIHVpZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fcHJvZmlsZXMuY29udGFpbnModWlkKSkKLSAgICAgICAgbV9wcm9m
aWxlcy5yZW1vdmUodWlkKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhclBy
b2ZpbGVzKCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wcm9maWxlcy5jbGVhcigpOwotICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVt
YmVyID0gMTsKLSAgICBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IDE7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogaGVhZGVycykKLXsKLSAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmls
ZXNFbmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwotICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkKLSAgICAg
ICAgKCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25k
KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZSh1bnNpZ25lZCB1
aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQotewotICAgIFByb2Zp
bGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwotICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJv
ZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9i
amVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsK
LSAgICB9CisgICAgaWYgKHByb2ZpbGVyRW5hYmxlZCgpKQorICAgICAgICBtX3Byb2ZpbGVyQWdl
bnQtPmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNv
bnRyb2xsZXI6OmNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmls
ZSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0aXRsZSIsIHByb2ZpbGUudGl0
bGUoKSk7Ci0gICAgaGVhZGVyLT5zZXROdW1iZXIoInVpZCIsIHByb2ZpbGUudWlkKCkpOwotICAg
IGhlYWRlci0+c2V0U3RyaW5nKCJ0eXBlSWQiLCBTdHJpbmcoQ1BVUHJvZmlsZVR5cGUpKTsKLSAg
ICByZXR1cm4gaGVhZGVyOwotfQogCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0Q3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIg
PSBmYWxzZSkKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCi0g
ICAgICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gbV9uZXh0VXNlcklu
aXRpYXRlZFByb2ZpbGVOdW1iZXIrKzsKLQotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMu
JWQiLCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9m
aWxlTnVtYmVyKTsKKyAgICByZXR1cm4gbV9wcm9maWxlckFnZW50ICYmIG1fcHJvZmlsZXJBZ2Vu
dC0+aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ1Nvb24oKQorU3RyaW5nIElu
c3BlY3RvckNvbnRyb2xsZXI6OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9v
bCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQogewotICAgIG1fc3RhcnRQcm9maWxpbmcuc3RhcnRP
bmVTaG90KDApOworICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1f
cHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShpbmNyZW1l
bnRQcm9maWxlTnVtYmVyKTsKKyAgICByZXR1cm4gIiI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRy
b2xsZXI+KikKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJv
ZmlsaW5nKCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFwcm9maWxlckVuYWJsZWQoKSkgewotICAgICAgICBlbmFibGVQcm9maWxlcihmYWxzZSwg
dHJ1ZSk7Ci0gICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucygpOwotICAgIH0KLQotICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2Zp
bGUgPSB0cnVlOwotCi0gICAgU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZSh0cnVlKTsKLQotI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNj
cmlwdFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBk
ZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0jZWxzZQotICAgIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSA9IDA7Ci0jZW5kaWYKLSAgICBTY3JpcHRQcm9maWxlcjo6c3RhcnQoc2NyaXB0
U3RhdGUsIHRpdGxlKTsKLQotICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0
aXRsZSwgMCwgU3RyaW5nKCkpOwotCi0gICAgdG9nZ2xlUmVjb3JkQnV0dG9uKHRydWUpOworICAg
IGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5zdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
dG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUgPSBmYWxz
ZTsKLQotICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5h
bWUoKTsKLQotI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0g
dG9KU0RPTVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxk
KCkpLT5nbG9iYWxFeGVjKCk7Ci0jZWxzZQotICAgIC8vIFVzZSBudWxsIHNjcmlwdCBzdGF0ZSB0
byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0b2tlbi4KLSAgICAvLyBBbGwg
ZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBJbnNwZWN0
b3IgVUkuCi0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKLSNlbmRpZgotICAgIFJl
ZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJvZmlsZXI6OnN0b3Aoc2NyaXB0
U3RhdGUsIHRpdGxlKTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgYWRkUHJvZmlsZShwcm9m
aWxlLCAwLCBTdHJpbmcoKSk7Ci0KLSAgICB0b2dnbGVSZWNvcmRCdXR0b24oZmFsc2UpOwotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJv
ZmlsaW5nKQotewotICAgIGlmICghbV9yZW1vdGVGcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fcmVtb3RlRnJvbnRlbmQtPnNldFJlY29yZGluZ1Byb2ZpbGUoaXNQcm9maWxpbmcpOwor
ICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5zdG9w
VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCkBAIC0xNjAy
LDE0ICsxNTAwLDE0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIo
Ym9vbCBhbHdheXMsIGJvb2wgc2tpcFJlY29tcGlsZSkKICAgICBpZiAoYWx3YXlzKQogICAgICAg
ICBzZXRTZXR0aW5nKHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lLCAidHJ1ZSIpOwogCi0gICAg
aWYgKG1fcHJvZmlsZXJFbmFibGVkKQorICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSB0cnVlOwotCiAgICAgaWYgKCFz
a2lwUmVjb21waWxlKQogICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21w
aWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CiAKKyAgICBtX3Byb2ZpbGVyQWdlbnQgPSBJbnNwZWN0
b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhpcywgbV9yZW1vdGVGcm9udGVuZC5nZXQoKSk7CisK
ICAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkKICAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cHJv
ZmlsZXJXYXNFbmFibGVkKCk7CiB9CkBAIC0xNjE5LDEwICsxNTE3LDEwIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQogICAgIGlmIChhbHdh
eXMpCiAgICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJFbmFibGVkU2V0dGluZ05hbWUsICJmYWxz
ZSIpOwogCi0gICAgaWYgKCFtX3Byb2ZpbGVyRW5hYmxlZCkKKyAgICBpZiAoIXByb2ZpbGVyRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2ZpbGVyRW5hYmxlZCA9IGZhbHNl
OworICAgIG1fcHJvZmlsZXJBZ2VudC5jbGVhcigpOwogCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggOGQ5NjAwNS4uNjcyYTdjMSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzMsOSArMzMsNyBAQAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0U3RhdGUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KQEAgLTY1LDYgKzYzLDcgQEAgY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIGNs
YXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsK
IGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CkBAIC03OCw2ICs3Nyw3IEBAIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVy
cm9yOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOworY2xhc3MgU2NyaXB0UHJvZmlsZTsKIGNsYXNz
IFNjcmlwdFN0cmluZzsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN0b3JhZ2U7CkBAIC0y
MjgsMjAgKzIyOCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8
U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMKTsKICAgICB2b2lkIGFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1Jl
ZlB0cjxTY3JpcHRQcm9maWxlPiwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpOwogICAgIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKTsKLSAgICB2b2lkIHJlbW92ZVByb2ZpbGUodW5zaWduZWQpOwotICAgIHZvaWQgY2xl
YXJQcm9maWxlcygpOwotCi0gICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsgfQotCi0g
ICAgU3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1l
bnRQcm9maWxlTnVtYmVyKTsKLSAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyhU
aW1lcjxJbnNwZWN0b3JDb250cm9sbGVyPiogPSAwKTsKKyAgICBib29sIGlzUmVjb3JkaW5nVXNl
ckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdDsKKyAgICBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0
aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIgPSBmYWxzZSk7Cisg
ICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICAgICB2b2lkIHN0b3BVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0gICAgdm9pZCBzdGFydFByb2ZpbGluZygpIHsgc3RhcnRV
c2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KLSAgICB2b2lkIHN0b3BQcm9maWxpbmcoKSB7IHN0
b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KLQogICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIo
Ym9vbCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVjb21waWxlID0gZmFsc2UpOwogICAgIHZv
aWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwotICAgIGJvb2wgcHJvZmls
ZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJFbmFibGVk
OyB9CisgICAgYm9vbCBwcm9maWxlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBlbmFibGVkKCkg
JiYgbV9wcm9maWxlckFnZW50OyB9CisgICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmls
ZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudC5nZXQoKTsgfQogCiAgICAg
dm9pZCBlbmFibGVEZWJ1Z2dlcigpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3
YXlzID0gZmFsc2UpOwpAQCAtMjgzLDE0ICsyNzcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVs
ZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQotICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQ
cm9maWxlPiA+IFByb2ZpbGVzTWFwOwogCi0gICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmdTb29uKCk7CiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CiAgICAgdm9p
ZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cyk7Ci0gICAgdm9pZCBnZXRQ
cm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lk
IGdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmls
ZU9iamVjdCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVI
ZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmlsZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgdm9pZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwpA
QCAtMzgwLDEyICszNjksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldo
ZW5TaG93bjsKICAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1Z2dlckFn
ZW50OwogCi0gICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKLSAgICBib29sIG1fcmVjb3JkaW5n
VXNlckluaXRpYXRlZFByb2ZpbGU7Ci0gICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9m
aWxlTnVtYmVyOwotICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVy
OwotICAgIFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1fc3RhcnRQcm9maWxpbmc7Ci0gICAg
UHJvZmlsZXNNYXAgbV9wcm9maWxlczsKKyAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dD4gbV9wcm9maWxlckFnZW50OwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludHB0cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4g
V29ya2Vyc01hcDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5ODNlMQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBA
IC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgiCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIlNj
cmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlci5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKworI2lmIFVTRShKU0MpCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRp
YXRlZCI7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsK
KworUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUmVt
b3RlSW5zcGVjdG9yRnJvbnRlbmQqIHJlbW90ZUZyb250ZW5kKQoreworICAgIE93blB0cjxJbnNw
ZWN0b3JQcm9maWxlckFnZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxl
ckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIsIHJlbW90ZUZyb250ZW5kKSk7CisgICAgcmV0dXJu
IGFnZW50LnJlbGVhc2UoKTsKK30KKworSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBS
ZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogcmVtb3RlRnJvbnRlbmQpCisgICAgICAgIDogbV9pbnNw
ZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgICwgbV9yZW1vdGVG
cm9udGVuZChyZW1vdGVGcm9udGVuZCkKKyAgICAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0aWF0
ZWRQcm9maWxlKGZhbHNlKQorICAgICAgICAsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxl
TnVtYmVyKC0xKQorICAgICAgICAsIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKDEp
Cit7Cit9CisKK0luc3BlY3RvclByb2ZpbGVyQWdlbnQ6On5JbnNwZWN0b3JQcm9maWxlckFnZW50
KCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRQcm9maWxlKFBhc3NS
ZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2Zp
bGUgPSBwcnBQcm9maWxlOworICAgIG1fcHJvZmlsZXMuYWRkKHByb2ZpbGUtPnVpZCgpLCBwcm9m
aWxlKTsKKyAgICBtX3JlbW90ZUZyb250ZW5kLT5hZGRQcm9maWxlSGVhZGVyKGNyZWF0ZVByb2Zp
bGVIZWFkZXIoKnByb2ZpbGUpKTsKKyAgICBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25z
b2xlKHByb2ZpbGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQYXNzUmVm
UHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxl
ID0gcHJwUHJvZmlsZTsKKworICAgIFN0cmluZyB0aXRsZSA9IHByb2ZpbGUtPnRpdGxlKCk7Cisg
ICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmlsZSBcIndlYmtpdC1wcm9m
aWxlOi8vJXMvJXMjJWRcIiBmaW5pc2hlZC4iLCBDUFVQcm9maWxlVHlwZSwgZW5jb2RlV2l0aFVS
TEVzY2FwZVNlcXVlbmNlcyh0aXRsZSkudXRmOCgpLmRhdGEoKSwgcHJvZmlsZS0+dWlkKCkpOwor
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VT
b3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkU3Rh
cnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIFN0cmluZyBtZXNz
YWdlID0gU3RyaW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIzBc
IiBzdGFydGVkLiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KHRpdGxlKS51dGY4KCkuZGF0YSgpKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmFkZE1l
c3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCitQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlUHJvZmlsZUhl
YWRlcihjb25zdCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGhlYWRlciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaGVhZGVy
LT5zZXRTdHJpbmcoInRpdGxlIiwgcHJvZmlsZS50aXRsZSgpKTsKKyAgICBoZWFkZXItPnNldE51
bWJlcigidWlkIiwgcHJvZmlsZS51aWQoKSk7CisgICAgaGVhZGVyLT5zZXRTdHJpbmcoInR5cGVJ
ZCIsIFN0cmluZyhDUFVQcm9maWxlVHlwZSkpOworICAgIHJldHVybiBoZWFkZXI7Cit9CisKK1N0
cmluZyBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2Zp
bGVOYW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcikKK3sKKyAgICBpZiAoaW5jcmVtZW50
UHJvZmlsZU51bWJlcikKKyAgICAgICAgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1i
ZXIgPSBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcisrOworCisgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCIlcy4lZCIsIFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSwgbV9jdXJyZW50
VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIpOworfQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMp
Cit7CisgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHByb2ZpbGVzRW5kID0gbV9wcm9maWxlcy5l
bmQoKTsKKyAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuYmVn
aW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCisgICAgICAgICgqaGVhZGVycyktPnB1c2hP
YmplY3QoY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOworfQorCit2b2lkIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCkKK3sKKyAgICBQcm9maWxlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKKyAgICBpZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQo
KSkgeworICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5z
ZWNvbmQpOworICAgICAgICAoKnByb2ZpbGVPYmplY3QpLT5zZXRPYmplY3QoImhlYWQiLCBpdC0+
c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7CisgICAgfQorfQorCit2b2lk
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUodW5zaWduZWQgdWlkKQorewor
ICAgIGlmIChtX3Byb2ZpbGVzLmNvbnRhaW5zKHVpZCkpCisgICAgICAgIG1fcHJvZmlsZXMucmVt
b3ZlKHVpZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVzZXRTdGF0ZSgp
Cit7CisgICAgbV9wcm9maWxlcy5jbGVhcigpOworICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTnVtYmVyID0gMTsKKyAgICBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9
IDE7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6c3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nKCkKK3sKKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0gdHJ1
ZTsKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1l
KHRydWUpOworI2lmIFVTRShKU0MpCisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0g
dG9KU0RPTVdpbmRvdyhtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFp
bkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyNlbHNlCisgICAgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKKyNlbmRpZgorICAgIFNjcmlwdFByb2ZpbGVyOjpz
dGFydChzY3JpcHRTdGF0ZSwgdGl0bGUpOworICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRv
Q29uc29sZSh0aXRsZSwgMCwgU3RyaW5nKCkpOworICAgIHRvZ2dsZVJlY29yZEJ1dHRvbih0cnVl
KTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFBy
b2ZpbGluZygpCit7CisgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IGZhbHNl
OworICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUo
KTsKKyNpZiBVU0UoSlNDKQorICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNE
T01XaW5kb3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFt
ZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisjZWxzZQorICAgIC8vIFVzZSBu
dWxsIHNjcmlwdCBzdGF0ZSB0byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0
b2tlbi4KKyAgICAvLyBBbGwgZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZp
c2libGUgZnJvbSBJbnNwZWN0b3IgVUkuCisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0g
MDsKKyNlbmRpZgorICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJv
ZmlsZXI6OnN0b3Aoc2NyaXB0U3RhdGUsIHRpdGxlKTsKKyAgICBpZiAocHJvZmlsZSkKKyAgICAg
ICAgYWRkUHJvZmlsZShwcm9maWxlLCAwLCBTdHJpbmcoKSk7CisgICAgdG9nZ2xlUmVjb3JkQnV0
dG9uKGZhbHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNv
cmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZykKK3sKKyAgICBtX3JlbW90ZUZyb250ZW5kLT5zZXRS
ZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDY3N2QwYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudF9oCisjZGVmaW5lIEluc3BlY3RvclByb2ZpbGVyQWdlbnRfaAorCisjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIFNjcmlwdFBy
b2ZpbGU7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDsKKworY2xhc3MgSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckNvbnRy
b2xsZXIqLCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCopOworICAgIHZpcnR1YWwgfkluc3BlY3Rv
clByb2ZpbGVyQWdlbnQoKTsKKworICAgIHZvaWQgYWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlw
dFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKKyAgICB2b2lkIGFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUo
UGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpOworICAgIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25z
b2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKTsKKyAgICB2b2lkIGNsZWFyUHJvZmlsZXMoKSB7IHJlc2V0U3RhdGUoKTsg
fQorICAgIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGJvb2wgaW5j
cmVtZW50UHJvZmlsZU51bWJlciA9IGZhbHNlKTsKKyAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJz
KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpOworICAgIHZvaWQgZ2V0UHJvZmlsZSh1
bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KTsKKyAg
ICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSB7IHJldHVybiBtX3JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOyB9CisgICAgdm9pZCByZW1vdmVQcm9maWxlKHVuc2ln
bmVkIHVpZCk7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisgICAgdm9pZCBzdGFydFByb2ZpbGlu
ZygpIHsgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2b2lkIHN0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIHZvaWQgc3RvcFByb2ZpbGluZygpIHsgc3RvcFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQorICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoKTsKKyAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKTsK
KworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKKworICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQo
SW5zcGVjdG9yQ29udHJvbGxlciosIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKik7CisgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0
UHJvZmlsZSYgcHJvZmlsZSk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXI7CisgICAgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqIG1fcmVtb3RlRnJvbnRl
bmQ7CisgICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOworICAgIGludCBt
X2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKKyAgICB1bnNpZ25lZCBtX25leHRV
c2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKKyAgICBQcm9maWxlc01hcCBtX3Byb2ZpbGVzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JQcm9maWxlckFnZW50
X2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64712</attachid>
            <date>2010-08-18 08:04:02 -0700</date>
            <delta_ts>2010-08-19 05:56:54 -0700</delta_ts>
            <desc>Fix mac linking issue</desc>
            <filename>44174-patch</filename>
            <type>text/plain</type>
            <size>40469</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmMxY2UyYi4uZDRmOGI0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAxMC0wOC0xOCAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgcHJvZmlsZXItcmVsYXRlZCBjb2RlIGFuZCBk
YXRhIGZyb20gSW5zcGVjdG9yQ29udHJvbGxlciBpbnRvIFByb2ZpbGVyQWdlbnQuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTc0CisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxl
ZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQ
cm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRQcm9maWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3Nh
Z2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRk
U3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6cHJvZmlsZXJFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnByb2ZpbGVyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm9maWxlckFnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQcm9maWxlckFnZW50Ojp+SW5zcGVjdG9yUHJvZmlsZXJBZ2VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0Nv
bnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkU3Rh
cnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxl
SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQ
cm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlbW92
ZVByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVz
ZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dG9nZ2xlUmVjb3JkQnV0dG9uKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNsZWFyUHJvZmlsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVk
UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFy
dFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50Ojpz
dG9wUHJvZmlsaW5nKToKKwogMjAxMC0wOC0xOCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDk1NThmZDMuLmQ0YmI0NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTYyNSw2ICsxNjI1LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAog
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKKwlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAog
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXgg
MTM2OTI5Ni4uNTdiODQ0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMTg5LDEwICsxMTg5LDExIEBAIF9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIwc3RvcFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgogX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
RWxSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JG
cm9udGVuZENsaWVudEVFRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0VQTlNfNVRpbWVySVMwX0VF
CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWVFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzRpbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lRXYKK19fWk5LN1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIzMWlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgogX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNWNsb3NlRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNw
ZWN0RVBOU180Tm9kZUUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggOGYwY2JhOS4uNmZjZTNjNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3NjgsNiArMTc2
OCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgnLAorICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCcsCisgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdl
QWdlbnQuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IDUyOWFmYjUuLjZhOGM0ODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzUzLDYgKzc1Myw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXApAQCAtMTUyMSw2ICsxNTIyLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmgg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBkNTFjYjQwLi5kYjljNGNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTUxNzg5LDYgKzUxNzg5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclJlc291
cmNlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDAwMzhjZjQuLmQxYjQxMTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNzQwLDYgKzI3NDAsOCBAQAogCQk5N0VG
NTYxMDExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFRjU2MEUxMUU0MDc4MzAw
N0UwMjZGIC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCAqLzsgfTsKIAkJOTdFRjU2MTExMUU0
MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyog
SFRNTENvbnN0cnVjdGlvblNpdGUuaCAqLzsgfTsKIAkJOTdFRjdERkUxMDdFNTVCNzAwRDdDNDlD
IC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250
cm9sbGVyQmFzZS5jcHAgKi87IH07CisJCTlGMEQ2QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmNwcCAqLzsgfTsKKwkJOUYwRDZCMkYxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50
LmggKi87IH07CiAJCTlGNkZDMTk2MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjZG
QzE5NDExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovOyB9OwogCQk5
RjZGQzE5NzExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGNkZDMTk1MTEyMkU4MkEwMEU4
MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTlGNzIzMDRGMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQ
cm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RjcyMzA0QzExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NTkyLDYgKzg1OTQsOCBAQAog
CQk5N0VGNTYwRTExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0VGNTYwRjExRTQwNzgzMDA3RTAy
NkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTENvbnN0cnVjdGlvblNpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUYwRDZCMkMxMjFCRkVCQTAwNkMw
Mjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9m
aWxlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMxOTQxMTIy
RTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdERlYnVnU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUY2RkMxOTUxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdERlYnVnU2VydmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNzIzMDRDMTExODRCNDEwMEFEMDEy
NiAvKiBTY3JpcHRQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNzgyLDYgKzEx
Nzg2LDggQEAKIAkJCQk3QTBFNzcwQjEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcCAqLywKIAkJCQk3QTBFNzcwQzEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmggKi8sCiAJCQkJN0EwRTc3MEQxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3Bl
Y3RvckZyb250ZW5kSG9zdC5pZGwgKi8sCisJCQkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8q
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovLAorCQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZD
MDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2
NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNwcCAqLywKIAkJCQk0MUYwNjFGRjBGNUYw
QjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuaCAqLywKIAkJCQk3QUIwQjFCRTEyMTFB
NjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCAqLywKQEAgLTIwMzIwLDYg
KzIwMzI2LDcgQEAKIAkJCQkyRURFRjFGNTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURFRjFGNzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJl
Z2lzdHJ5SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERUYxRjgxMjFCMEVGQzAwNzI2REIy
IC8qIEJsb2JTdG9yYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUYwRDZCMkYxMjFCRkVC
QTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MjI3NzEsNiArMjI3NzgsNyBAQAogCQkJCUM1N0ZFREUxMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxl
U3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFREVGMUYzMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRURFRjFGNjEyMUIwRUZDMDA3MjZE
QjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5RjBENkIyRTEy
MUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXggZjM3MmMzYy4uNjJh
ZTliYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKQEAgLTQ2LDYgKzQ2
LDExIEBAIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0b3AoU2Ny
aXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIFNjcmlwdFByb2ZpbGU6
OmNyZWF0ZShwcm9maWxlKTsKIH0KIAorYm9vbCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFs
d2F5c0VuYWJsZWQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmggYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggNGZhMzMxYy4uMTgwYzQ5ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gc3RvcChTY3JpcHRTdGF0ZSogc3RhdGUs
IGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHRha2VIZWFwU25hcHNob3Qo
KSB7IH0KICAgICBzdGF0aWMgbG9uZyBnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcsIFN0cmluZyop
IHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFBy
b2ZpbGVyLmNwcAppbmRleCA5MjEzNzc0Li4wZGU0YTI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFByb2ZpbGVyLmNwcApAQCAtNjksNCArNjksOSBAQCBsb25nIFNjcmlwdFByb2ZpbGVyOjpn
ZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9zaXRpb24sIFN0cmluZyogZGF0YSkKICAgICByZXR1
cm4gcG9zaXRpb247CiB9CiAKK2Jvb2wgU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNF
bmFibGVkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCmluZGV4IDVjMTA1NGIuLmIxYWIzYjEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgdm9pZCB0YWtlSGVh
cFNuYXBzaG90KCk7CiAgICAgc3RhdGljIGxvbmcgZ2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIHBv
c2l0aW9uLCBTdHJpbmcqIGRhdGEpOworICAgIHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNF
bmFibGVkKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtIGIvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCAxMGUwODgyLi40NWQ2OTkyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KQEAgLTM4LDYgKzM4
LDExIEBAICR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7CiAgICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIiwKICAgICAiaGFuZGxlckFj
Y2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQo
KSIsCiB9OworJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7CisgICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JQcm9maWxlckFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oIiwKKyAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250
cm9sbGVyLT5wcm9maWxlckFnZW50KCkiLAorfTsKICR0eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9
ID0gewogICAgICJmb3J3YXJkIiA9PiAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQiLAogICAgICJo
ZWFkZXIiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZC5oIiwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsCmluZGV4IDFjNjZiNTkuLjQ4NjQ4NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAt
MTQ1LDE0ICsxNDUsMTQgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1Db250cm9s
bGVyXSB2b2lkIGVuYWJsZVByb2ZpbGVyKGluIGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkaXNhYmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdheXMp
OwogCi0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsK
LSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzdG9wUHJvZmlsaW5nKCk7CisgICAg
ICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAgIFto
YW5kbGVyPVByb2ZpbGVyXSB2b2lkIHN0b3BQcm9maWxpbmcoKTsKIAotICAgICAgICBbaGFuZGxl
cj1Db250cm9sbGVyXSB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGluIGxvbmcgY2FsbElkLCBvdXQg
QXJyYXkgaGVhZGVycyk7Ci0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0UHJv
ZmlsZShpbiBsb25nIGNhbGxJZCwgaW4gdW5zaWduZWQgbG9uZyB1aWQsIG91dCBPYmplY3QgcHJv
ZmlsZSk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIGdldFByb2ZpbGVIZWFkZXJz
KGluIGxvbmcgY2FsbElkLCBvdXQgQXJyYXkgaGVhZGVycyk7CisgICAgICAgIFtoYW5kbGVyPVBy
b2ZpbGVyXSB2b2lkIGdldFByb2ZpbGUoaW4gbG9uZyBjYWxsSWQsIGluIHVuc2lnbmVkIGxvbmcg
dWlkLCBvdXQgT2JqZWN0IHByb2ZpbGUpOwogCi0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJd
IHZvaWQgcmVtb3ZlUHJvZmlsZShpbiB1bnNpZ25lZCBsb25nIHVpZCk7Ci0gICAgICAgIFtoYW5k
bGVyPUNvbnRyb2xsZXJdIHZvaWQgY2xlYXJQcm9maWxlcygpOworICAgICAgICBbaGFuZGxlcj1Q
cm9maWxlcl0gdm9pZCByZW1vdmVQcm9maWxlKGluIHVuc2lnbmVkIGxvbmcgdWlkKTsKKyAgICAg
ICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgY2xlYXJQcm9maWxlcygpOwogCiAgICAgICAgIFto
YW5kbGVyPUJhY2tlbmRdIHZvaWQgdGFrZUhlYXBTbmFwc2hvdCgpOwogICAgICAgICBbaGFuZGxl
cj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVyTG9nTGluZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxv
bmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0UG9zaXRpb24sIG91dCBTdHJpbmcgbG9nKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggYWM2NzBjYi4uNzUw
NTc2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYz
LDYgKzYzLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKQEAgLTExNSw4ICsx
MTYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndl
YmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
Q1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZFNldHRpbmdOYW1lID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsK
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSA9ICJk
ZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHByb2ZpbGVyRW5hYmxl
ZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5hYmxlZCI7CkBAIC0xNzAsMTEgKzE2OSw2IEBAIElu
c3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVj
dG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNj
cmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX3Byb2ZpbGVy
RW5hYmxlZCghV1RGX1VTRV9KU0MpCi0gICAgLCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlKGZhbHNlKQotICAgICwgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIoLTEp
Ci0gICAgLCBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigxKQotICAgICwgbV9zdGFy
dFByb2ZpbGluZyh0aGlzLCAmSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nKQogI2VuZGlmCiB7CiAgICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKQEAgLTIw
OSw2ICsyMDMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0
cm95ZWQoKQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgbV9kZWJ1Z2dl
ckFnZW50LmNsZWFyKCk7CisgICAgbV9wcm9maWxlckFnZW50LmNsZWFyKCk7CiAjZW5kaWYKICAg
ICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwpAQCAt
NTA0LDYgKzQ5OSwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVu
ZCgpCiAgICAgICAgIFN0cmluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRlYnVnZ2VyRW5h
YmxlZFNldHRpbmdOYW1lKTsKICAgICAgICAgaWYgKGRlYnVnZ2VyRW5hYmxlZCA9PSAidHJ1ZSIg
fHwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bikKICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2Vy
KCk7CisgICAgfQorICAgIGlmIChTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJs
ZWQoKSkKKyAgICAgICAgZW5hYmxlUHJvZmlsZXIodHJ1ZSwgZmFsc2UpOworICAgIGVsc2Ugewog
ICAgICAgICBTdHJpbmcgcHJvZmlsZXJFbmFibGVkID0gc2V0dGluZyhwcm9maWxlckVuYWJsZWRT
ZXR0aW5nTmFtZSk7CiAgICAgICAgIGlmIChwcm9maWxlckVuYWJsZWQgPT0gInRydWUiKQogICAg
ICAgICAgICAgZW5hYmxlUHJvZmlsZXIoKTsKQEAgLTYzOCw3ICs2MzcsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgICAgIG1fcmVtb3Rl
RnJvbnRlbmQtPm1vbml0b3JpbmdYSFJXYXNFbmFibGVkKCk7CiAKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9wcm9maWxlckVuYWJsZWQpCisgICAgaWYgKHByb2Zp
bGVyRW5hYmxlZCgpKQogICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5wcm9maWxlcldhc0VuYWJs
ZWQoKTsKICNlbmRpZgogCkBAIC03NDUsOSArNzQ0LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgICAgICBt
X2RlYnVnZ2VyQWdlbnQtPmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKICNlbmRpZgogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQotICAgICAgICBtX3Byb2ZpbGVz
LmNsZWFyKCk7Ci0gICAgICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0g
MTsKLSAgICAgICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOworICAgICAg
ICBpZiAobV9wcm9maWxlckFnZW50KQorICAgICAgICAgICAgbV9wcm9maWxlckFnZW50LT5yZXNl
dFN0YXRlKCk7CiAgICAgICAgIGlmIChtX3JlbW90ZUZyb250ZW5kKQogICAgICAgICAgICAgbV9y
ZW1vdGVGcm9udGVuZC0+cmVzZXRQcm9maWxlc1BhbmVsKCk7CiAjZW5kaWYKQEAgLTE0NTYsMTQ1
ICsxNDU0LDQ1IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJv
bGxlcjo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQobG9uCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUoUGFzc1Jl
ZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBwcnBQcm9maWxlOwot
ICAgIG1fcHJvZmlsZXMuYWRkKHByb2ZpbGUtPnVpZCgpLCBwcm9maWxlKTsKLQotICAgIGlmICht
X3JlbW90ZUZyb250ZW5kKSB7Ci0gICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPmFkZFByb2ZpbGVI
ZWFkZXIoY3JlYXRlUHJvZmlsZUhlYWRlcigqcHJvZmlsZSkpOwotICAgIH0KLQotICAgIGFkZFBy
b2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUocHJvZmlsZSwgbGluZU51bWJlciwgc291cmNl
VVJMKTsKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIG1fcHJvZmlsZXJBZ2Vu
dC0+YWRkUHJvZmlsZShwcnBQcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNv
bGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBSZWZQdHI8U2NyaXB0UHJvZmls
ZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Ci0KLSAgICBTdHJpbmcgdGl0bGUgPSBwcm9maWxlLT50
aXRsZSgpOwotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3
ZWJraXQtcHJvZmlsZTovLyVzLyVzIyVkXCIgZmluaXNoZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVu
Y29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCksIHByb2ZpbGUt
PnVpZCgpKTsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJM
KTsKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+
YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShwcnBQcm9maWxlLCBsaW5lTnVtYmVy
LCBzb3VyY2VVUkwpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFN0YXJ0UHJv
ZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwid2Via2l0LXByb2ZpbGU6Ly8lcy8lcyMwXCIgc3Rh
cnRlZC4iLCBDUFVQcm9maWxlVHlwZSwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRs
ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3Vy
Y2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZVVSTCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlUHJvZmls
ZSh1bnNpZ25lZCB1aWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX3Byb2ZpbGVzLmNvbnRhaW5zKHVpZCkpCi0gICAgICAgIG1fcHJvZmlsZXMu
cmVtb3ZlKHVpZCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJQcm9maWxl
cygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJv
ZmlsZXMuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9
IDE7Ci0gICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwotfQotCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGVIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIGhlYWRlcnMpCi17Ci0gICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHByb2ZpbGVzRW5k
ID0gbV9wcm9maWxlcy5lbmQoKTsKLSAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9
IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCi0gICAgICAgICgq
aGVhZGVycyktPnB1c2hPYmplY3QoY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOwot
fQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCkKLXsKLSAgICBQcm9maWxlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKLSAgICBpZiAoaXQgIT0gbV9w
cm9maWxlcy5lbmQoKSkgewotICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVI
ZWFkZXIoKml0LT5zZWNvbmQpOwotICAgICAgICAoKnByb2ZpbGVPYmplY3QpLT5zZXRPYmplY3Qo
ImhlYWQiLCBpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7Ci0gICAg
fQorICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5h
ZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUodGl0bGUsIGxpbmVOdW1iZXIsIHNvdXJj
ZVVSTCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDb250cm9s
bGVyOjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpCi17
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBoZWFkZXItPnNldFN0cmluZygidGl0bGUiLCBwcm9maWxlLnRpdGxlKCkp
OwotICAgIGhlYWRlci0+c2V0TnVtYmVyKCJ1aWQiLCBwcm9maWxlLnVpZCgpKTsKLSAgICBoZWFk
ZXItPnNldFN0cmluZygidHlwZUlkIiwgU3RyaW5nKENQVVByb2ZpbGVUeXBlKSk7Ci0gICAgcmV0
dXJuIGhlYWRlcjsKLX0KIAotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyID0gZmFs
c2UpCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoKSBjb25zdAogewotICAgIGlmIChpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQotICAgICAg
ICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IG1fbmV4dFVzZXJJbml0aWF0
ZWRQcm9maWxlTnVtYmVyKys7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzLiVkIiwg
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51
bWJlcik7CisgICAgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudCAmJiBtX3Byb2ZpbGVyQWdlbnQtPmlz
UmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdTb29uKCkKK1N0cmluZyBJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGJvb2wgaW5j
cmVtZW50UHJvZmlsZU51bWJlcikKIHsKLSAgICBtX3N0YXJ0UHJvZmlsaW5nLnN0YXJ0T25lU2hv
dCgwKTsKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBtX3Byb2Zp
bGVyQWdlbnQtPmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoaW5jcmVtZW50UHJv
ZmlsZU51bWJlcik7CisgICAgcmV0dXJuICIiOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyhUaW1lcjxJbnNwZWN0b3JDb250cm9sbGVy
PiopCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
cHJvZmlsZXJFbmFibGVkKCkpIHsKLSAgICAgICAgZW5hYmxlUHJvZmlsZXIoZmFsc2UsIHRydWUp
OwotICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoKTsKLSAgICB9Ci0KLSAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0g
dHJ1ZTsKLQotICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmls
ZU5hbWUodHJ1ZSk7Ci0KLSNpZiBVU0UoSlNDKQotICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRT
dGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSwgZGVidWdn
ZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotI2Vsc2UKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUgPSAwOwotI2VuZGlmCi0gICAgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0KHNjcmlwdFN0YXRl
LCB0aXRsZSk7Ci0KLSAgICBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUodGl0bGUs
IDAsIFN0cmluZygpKTsKLQotICAgIHRvZ2dsZVJlY29yZEJ1dHRvbih0cnVlKTsKKyAgICBpZiAo
cHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RhcnRVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0gZmFsc2U7Ci0K
LSAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKCk7
Ci0KLSNpZiBVU0UoSlNDKQotICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNE
T01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSwgZGVidWdnZXJXb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotI2Vsc2UKLSAgICAvLyBVc2UgbnVsbCBzY3JpcHQgc3RhdGUgdG8gYXZv
aWQgZmlsdGVyaW5nIGJ5IGNvbnRleHQgc2VjdXJpdHkgdG9rZW4uCi0gICAgLy8gQWxsIGZ1bmN0
aW9ucyBmcm9tIGFsbCBpZnJhbWVzIHNob3VsZCBiZSB2aXNpYmxlIGZyb20gSW5zcGVjdG9yIFVJ
LgotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7Ci0jZW5kaWYKLSAgICBSZWZQdHI8
U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IFNjcmlwdFByb2ZpbGVyOjpzdG9wKHNjcmlwdFN0YXRl
LCB0aXRsZSk7Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAgIGFkZFByb2ZpbGUocHJvZmlsZSwg
MCwgU3RyaW5nKCkpOwotCi0gICAgdG9nZ2xlUmVjb3JkQnV0dG9uKGZhbHNlKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGlu
ZykKLXsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3JlbW90ZUZyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKKyAgICBp
ZiAocHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmcoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFi
bGVQcm9maWxlcihib29sIGFsd2F5cywgYm9vbCBza2lwUmVjb21waWxlKQpAQCAtMTYwMiwxNCAr
MTUwMCwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wg
YWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCiAgICAgaWYgKGFsd2F5cykKICAgICAgICAgc2V0
U2V0dGluZyhwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKIAotICAgIGlmICht
X3Byb2ZpbGVyRW5hYmxlZCkKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fcHJvZmlsZXJFbmFibGVkID0gdHJ1ZTsKLQogICAgIGlmICghc2tpcFJl
Y29tcGlsZSkKICAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zU29vbigpOwogCisgICAgbV9wcm9maWxlckFnZW50ID0gSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1fcmVtb3RlRnJvbnRlbmQuZ2V0KCkpOworCiAgICAg
aWYgKG1fcmVtb3RlRnJvbnRlbmQpCiAgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPnByb2ZpbGVy
V2FzRW5hYmxlZCgpOwogfQpAQCAtMTYxOSwxMCArMTUxNywxMCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cykKICAgICBpZiAoYWx3YXlzKQog
ICAgICAgICBzZXRTZXR0aW5nKHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lLCAiZmFsc2UiKTsK
IAotICAgIGlmICghbV9wcm9maWxlckVuYWJsZWQpCisgICAgaWYgKCFwcm9maWxlckVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKKyAg
ICBtX3Byb2ZpbGVyQWdlbnQuY2xlYXIoKTsKIAogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDhkOTYwMDUuLjY3MmE3YzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTMzLDkgKzMzLDcgQEAKICNpbmNsdWRlICJD
b29raWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBA
IC02NSw2ICs2Myw3IEBAIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFzcyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBj
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xh
c3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwpAQCAtNzgsNiArNzcsNyBAQCBjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsK
IGNsYXNzIFNjcmlwdENhbGxTdGFjazsKK2NsYXNzIFNjcmlwdFByb2ZpbGU7CiBjbGFzcyBTY3Jp
cHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdG9yYWdlOwpAQCAtMjI4LDIw
ICsyMjgsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlw
dFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7
CiAgICAgdm9pZCBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8
U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMKTsKICAgICB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBT
dHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCk7Ci0gICAgdm9pZCByZW1vdmVQcm9maWxlKHVuc2lnbmVkKTsKLSAgICB2b2lkIGNsZWFyUHJv
ZmlsZXMoKTsKLQotICAgIGJvb2wgaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGU7IH0KLQotICAgIFN0
cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJv
ZmlsZU51bWJlcik7Ci0gICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoVGltZXI8
SW5zcGVjdG9yQ29udHJvbGxlcj4qID0gMCk7CisgICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0
aWF0ZWRQcm9maWxlKCkgY29uc3Q7CisgICAgU3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVk
UHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyID0gZmFsc2UpOworICAgIHZv
aWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiAgICAgdm9pZCBzdG9wVXNlckluaXRp
YXRlZFByb2ZpbGluZygpOwotICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlcklu
aXRpYXRlZFByb2ZpbGluZygpOyB9Ci0gICAgdm9pZCBzdG9wUHJvZmlsaW5nKCkgeyBzdG9wVXNl
ckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0KICAgICB2b2lkIGVuYWJsZVByb2ZpbGVyKGJvb2wg
YWx3YXlzID0gZmFsc2UsIGJvb2wgc2tpcFJlY29tcGlsZSA9IGZhbHNlKTsKICAgICB2b2lkIGRp
c2FibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZhbHNlKTsKLSAgICBib29sIHByb2ZpbGVyRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIGVuYWJsZWQoKSAmJiBtX3Byb2ZpbGVyRW5hYmxlZDsgfQor
ICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxlZCgpICYmIG1f
cHJvZmlsZXJBZ2VudDsgfQorICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdl
bnQoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVyQWdlbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQg
ZW5hYmxlRGVidWdnZXIoKTsKICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cyA9
IGZhbHNlKTsKQEAgLTI4MywxNCArMjc3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbGVhc2VG
cm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0UHJvZmls
ZT4gPiBQcm9maWxlc01hcDsKIAotICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
U29vbigpOwogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOwogICAgIHZvaWQgZW5h
YmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpOwotICAgIHZvaWQgZ2V0UHJvZmls
ZUhlYWRlcnMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycyk7Ci0gICAgdm9pZCBnZXRQ
cm9maWxlKHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmpl
Y3QpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVy
KGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQogICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKTsKQEAgLTM4
MCwxMiArMzY5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d247CiAgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IG1fZGVidWdnZXJBZ2VudDsK
IAotICAgIGJvb2wgbV9wcm9maWxlckVuYWJsZWQ7Ci0gICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJ
bml0aWF0ZWRQcm9maWxlOwotICAgIGludCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51
bWJlcjsKLSAgICB1bnNpZ25lZCBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKLSAg
ICBUaW1lcjxJbnNwZWN0b3JDb250cm9sbGVyPiBtX3N0YXJ0UHJvZmlsaW5nOwotICAgIFByb2Zp
bGVzTWFwIG1fcHJvZmlsZXM7CisgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1f
cHJvZmlsZXJBZ2VudDsKICNlbmRpZgogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnRwdHJfdCwgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiA+IFdvcmtl
cnNNYXA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTgzZTEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMCww
ICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oIgorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKKyNpbmNsdWRl
ICJDb25zb2xlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJTY3JpcHRQ
cm9maWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisKKyNpZiBVU0UoSlNDKQorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVXNlcklu
aXRpYXRlZFByb2ZpbGVOYW1lID0gIm9yZy53ZWJraXQucHJvZmlsZXMudXNlci1pbml0aWF0ZWQi
Oworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENQVVByb2ZpbGVUeXBlID0gIkNQVSI7CisKK1Bh
c3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Y3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFJlbW90ZUlu
c3BlY3RvckZyb250ZW5kKiByZW1vdGVGcm9udGVuZCkKK3sKKyAgICBPd25QdHI8SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudD4gYWdlbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dChpbnNwZWN0b3JDb250cm9sbGVyLCByZW1vdGVGcm9udGVuZCkpOworICAgIHJldHVybiBhZ2Vu
dC5yZWxlYXNlKCk7Cit9CisKK0luc3BlY3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUmVtb3Rl
SW5zcGVjdG9yRnJvbnRlbmQqIHJlbW90ZUZyb250ZW5kKQorICAgICAgICA6IG1faW5zcGVjdG9y
Q29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICAsIG1fcmVtb3RlRnJvbnRl
bmQocmVtb3RlRnJvbnRlbmQpCisgICAgICAgICwgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJv
ZmlsZShmYWxzZSkKKyAgICAgICAgLCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJl
cigtMSkKKyAgICAgICAgLCBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigxKQorewor
fQorCitJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp+SW5zcGVjdG9yUHJvZmlsZXJBZ2VudCgpCit7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkUHJvZmlsZShQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKQoreworICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0g
cHJwUHJvZmlsZTsKKyAgICBtX3Byb2ZpbGVzLmFkZChwcm9maWxlLT51aWQoKSwgcHJvZmlsZSk7
CisgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJvZmlsZUhlYWRlcihjcmVhdGVQcm9maWxlSGVh
ZGVyKCpwcm9maWxlKSk7CisgICAgYWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShw
cm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxT
Y3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBy
cFByb2ZpbGU7CisKKyAgICBTdHJpbmcgdGl0bGUgPSBwcm9maWxlLT50aXRsZSgpOworICAgIFN0
cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTov
LyVzLyVzIyVkXCIgZmluaXNoZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2Nh
cGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCksIHByb2ZpbGUtPnVpZCgpKTsKKyAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBz
b3VyY2VVUkwpOworfQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmFkZFN0YXJ0UHJv
ZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBTdHJpbmcgbWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwid2Via2l0LXByb2ZpbGU6Ly8lcy8lcyMwXCIgc3Rh
cnRlZC4iLCBDUFVQcm9maWxlVHlwZSwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRs
ZSkudXRmOCgpLmRhdGEoKSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hZGRNZXNzYWdl
VG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZl
bCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKK30KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVByb2ZpbGVIZWFkZXIo
Y29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmlsZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBoZWFkZXIgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGhlYWRlci0+c2V0
U3RyaW5nKCJ0aXRsZSIsIHByb2ZpbGUudGl0bGUoKSk7CisgICAgaGVhZGVyLT5zZXROdW1iZXIo
InVpZCIsIHByb2ZpbGUudWlkKCkpOworICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0eXBlSWQiLCBT
dHJpbmcoQ1BVUHJvZmlsZVR5cGUpKTsKKyAgICByZXR1cm4gaGVhZGVyOworfQorCitTdHJpbmcg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCit7CisgICAgaWYgKGluY3JlbWVudFByb2Zp
bGVOdW1iZXIpCisgICAgICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0g
bV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIrKzsKKworICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiJXMuJWQiLCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJ
bml0aWF0ZWRQcm9maWxlTnVtYmVyKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQorewor
ICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7
CisgICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7
IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQorICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0
KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjpnZXRQcm9maWxlKHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIHByb2ZpbGVPYmplY3QpCit7CisgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wcm9maWxlcy5maW5kKHVpZCk7CisgICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsK
KyAgICAgICAgKnByb2ZpbGVPYmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25k
KTsKKyAgICAgICAgKCpwcm9maWxlT2JqZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29u
ZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgIH0KK30KKwordm9pZCBJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpyZW1vdmVQcm9maWxlKHVuc2lnbmVkIHVpZCkKK3sKKyAgICBp
ZiAobV9wcm9maWxlcy5jb250YWlucyh1aWQpKQorICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1
aWQpOworfQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlc2V0U3RhdGUoKQorewor
ICAgIG1fcHJvZmlsZXMuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmls
ZU51bWJlciA9IDE7CisgICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwor
fQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0YXJ0VXNlckluaXRpYXRlZFByb2Zp
bGluZygpCit7CisgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IHRydWU7Cisg
ICAgU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSh0cnVl
KTsKKyNpZiBVU0UoSlNDKQorICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNE
T01XaW5kb3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFt
ZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisjZWxzZQorICAgIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSA9IDA7CisjZW5kaWYKKyAgICBTY3JpcHRQcm9maWxlcjo6c3RhcnQo
c2NyaXB0U3RhdGUsIHRpdGxlKTsKKyAgICBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNv
bGUodGl0bGUsIDAsIFN0cmluZygpKTsKKyAgICB0b2dnbGVSZWNvcmRCdXR0b24odHJ1ZSk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxp
bmcoKQoreworICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUgPSBmYWxzZTsKKyAg
ICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKCk7Cisj
aWYgVVNFKEpTQykKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2lu
ZG93KG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKSwg
ZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworI2Vsc2UKKyAgICAvLyBVc2UgbnVsbCBz
Y3JpcHQgc3RhdGUgdG8gYXZvaWQgZmlsdGVyaW5nIGJ5IGNvbnRleHQgc2VjdXJpdHkgdG9rZW4u
CisgICAgLy8gQWxsIGZ1bmN0aW9ucyBmcm9tIGFsbCBpZnJhbWVzIHNob3VsZCBiZSB2aXNpYmxl
IGZyb20gSW5zcGVjdG9yIFVJLgorICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7Cisj
ZW5kaWYKKyAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IFNjcmlwdFByb2ZpbGVy
OjpzdG9wKHNjcmlwdFN0YXRlLCB0aXRsZSk7CisgICAgaWYgKHByb2ZpbGUpCisgICAgICAgIGFk
ZFByb2ZpbGUocHJvZmlsZSwgMCwgU3RyaW5nKCkpOworICAgIHRvZ2dsZVJlY29yZEJ1dHRvbihm
YWxzZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dG9nZ2xlUmVjb3JkQnV0
dG9uKGJvb2wgaXNQcm9maWxpbmcpCit7CisgICAgbV9yZW1vdGVGcm9udGVuZC0+c2V0UmVjb3Jk
aW5nUHJvZmlsZShpc1Byb2ZpbGluZyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQ2NzdkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclByb2Zp
bGVyQWdlbnRfaAorI2RlZmluZSBJbnNwZWN0b3JQcm9maWxlckFnZW50X2gKKworI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3Rv
ckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBTY3JpcHRQcm9maWxl
OworY2xhc3MgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ7CisKK2NsYXNzIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVy
KiwgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JQcm9m
aWxlckFnZW50KCk7CisKKyAgICB2b2lkIGFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9m
aWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCk7CisgICAgdm9pZCBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NS
ZWZQdHI8U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKKyAgICB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShj
b25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCk7CisgICAgdm9pZCBjbGVhclByb2ZpbGVzKCkgeyByZXNldFN0YXRlKCk7IH0KKyAg
ICBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVu
dFByb2ZpbGVOdW1iZXIgPSBmYWxzZSk7CisgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKKyAgICB2b2lkIGdldFByb2ZpbGUodW5zaWdu
ZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgYm9v
bCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgeyByZXR1cm4gbV9yZWNvcmRpbmdV
c2VySW5pdGlhdGVkUHJvZmlsZTsgfQorICAgIHZvaWQgcmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1
aWQpOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7
IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9CisgICAgdm9pZCBzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0b3BQcm9maWxpbmcoKSB7IHN0b3BVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7CisKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFBy
b2ZpbGU+ID4gUHJvZmlsZXNNYXA7CisKKyAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3Bl
Y3RvckNvbnRyb2xsZXIqLCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCopOworICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2Zp
bGUmIHByb2ZpbGUpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250
cm9sbGVyOworICAgIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiBtX3JlbW90ZUZyb250ZW5kOwor
ICAgIGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsKKyAgICBpbnQgbV9jdXJy
ZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXI7CisgICAgdW5zaWduZWQgbV9uZXh0VXNlcklu
aXRpYXRlZFByb2ZpbGVOdW1iZXI7CisgICAgUHJvZmlsZXNNYXAgbV9wcm9maWxlczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudF9oKQo=
</data>
<flag name="review"
          id="53332"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64836</attachid>
            <date>2010-08-19 05:56:54 -0700</date>
            <delta_ts>2010-08-19 08:46:17 -0700</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>44174-patch</filename>
            <type>text/plain</type>
            <size>41978</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDNmZTZjMmMuLjRlZmQ4NWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3NCw2ICsxMDc0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggOTkzNGZiZi4uYmE3MDRkNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAx
MC0wOC0xOSAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgcHJvZmls
ZXItcmVsYXRlZCBjb2RlIGFuZCBkYXRhIGZyb20gSW5zcGVjdG9yQ29udHJvbGxlciBpbnRvCisg
ICAgICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTc0CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFByb2Zp
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3
YXlzRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3Jp
cHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJv
ZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRQcm9maWxl
RmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6fkluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkUHJvZmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRQcm9maWxlRmluaXNo
ZWRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldEN1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDo6Z2V0UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpyZW1vdmVQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OnJlc2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRv
bik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjbGVhclByb2ZpbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmlzUmVjb3JkaW5n
VXNlckluaXRpYXRlZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6c2V0UmVtb3RlRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6c3RvcFByb2ZpbGluZyk6CisKIDIwMTAtMDgtMTkgIEFuZHJlYXMg
S2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDIwYmFmMGYuLmU0YjY2MGUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTYyNyw2ICsxNjI3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogCVdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbiBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMTM2OTI5Ni4uNTdiODQ0MCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCkBAIC0xMTg5LDEwICsxMTg5LDExIEBAIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjIwc3RvcFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxp
bmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNlckluaXRpYXRl
ZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZ0VQTlNfNVRpbWVySVMwX0VFCiBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgogX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzRpbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNl
dHRpbmdOYW1lRXYKK19fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3Jk
aW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyNHNob3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNWNsb3NlRXYKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNwZWN0RVBOU180Tm9kZUUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
M2RmZjI1ZC4uMzg1MDRhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3NjksNiArMTc2OSw4IEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclBy
b2ZpbGVyQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDM3ZDRi
ZDcuLjQ1NTU3MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtNzUzLDYgKzc1Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5jcHAgXApAQCAtMTUyMiw2ICsxNTIzLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JTdG9yYWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
aCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxOGQ0ODUxLi5lNDgz
MWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUxODUzLDYgKzUx
ODUzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclJlc291cmNlLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDI0MzVjNjEuLjY3MTI1ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0yNzQyLDYgKzI3NDIsOCBAQAogCQk5N0VGNTYxMDExRTQwNzgzMDA3RTAyNkYg
LyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdFRjU2MEUxMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcCAqLzsgfTsKIAkJOTdFRjU2MTExMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUu
aCAqLzsgfTsKIAkJOTdFRjdERkUxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJC
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi87IH07
CisJCTlGMEQ2QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJD
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKKwkJ
OUYwRDZCMkYxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZF
QkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi87IH07CiAJCTlGNkZDMTk2
MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjZGQzE5NDExMjJFODJBMDBFODAxOTYg
LyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovOyB9OwogCQk5RjZGQzE5NzExMjJFODJBMDBFODAx
OTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1Nl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTlGNzIzMDRGMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjcyMzA0QzExMTg0QjQxMDBBRDAx
MjYgLyogU2NyaXB0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC04NTk3LDYgKzg1OTksOCBAQAogCQk5N0VGNTYwRTExRTQwNzgzMDA3
RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlv
blNpdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbnN0cnVjdGlv
blNpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdFRjdERkQxMDdFNTVCNzAw
RDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGMEQ2
QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMxOTQxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlw
dERlYnVnU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNj
cmlwdERlYnVnU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMx
OTUxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdERlYnVnU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlGNzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNzg3LDYgKzExNzkxLDggQEAKIAkJCQk3QTBFNzcw
QjEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywKIAkJCQk3
QTBFNzcwQzEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggKi8sCiAJ
CQkJN0EwRTc3MEQxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5pZGwg
Ki8sCisJCQkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuY3BwICovLAorCQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9m
aWxlckFnZW50LmggKi8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3Rv
clJlc291cmNlLmNwcCAqLywKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVj
dG9yUmVzb3VyY2UuaCAqLywKIAkJCQk3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmNwcCAqLywKQEAgLTIwMzI5LDYgKzIwMzM1LDcgQEAKIAkJCQkyRURF
RjFGODEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUYxQkZFQjEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDZBMjY5MDYxMjFCNkI0MzAwQzQxRjNBIC8qIEZpbGVXcml0ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyNzgwLDYgKzIyNzg3LDcgQEAKIAkJCQkyRURF
RjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRUYxQkZFQTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0NkEyNjkwNTEyMUI2QjQzMDBDNDFGM0EgLyogRmlsZVdyaXRlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5RjBENkIyRTEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQ
cm9maWxlci5jcHAKaW5kZXggZjM3MmMzYy4uNjJhZTliYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRQcm9maWxlci5jcHAKQEAgLTQ2LDYgKzQ2LDExIEBAIFBhc3NSZWZQdHI8U2NyaXB0UHJv
ZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJp
bmcmCiAgICAgcmV0dXJuIFNjcmlwdFByb2ZpbGU6OmNyZWF0ZShwcm9maWxlKTsKIH0KIAorYm9v
bCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdFByb2ZpbGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKaW5k
ZXggNGZhMzMxYy4uMTgwYzQ5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRQcm9maWxlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApA
QCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJv
ZmlsZT4gc3RvcChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAg
IHN0YXRpYyB2b2lkIHRha2VIZWFwU25hcHNob3QoKSB7IH0KICAgICBzdGF0aWMgbG9uZyBnZXRQ
cm9maWxlckxvZ0xpbmVzKGxvbmcsIFN0cmluZyopIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCA5MjEzNzc0Li4w
ZGU0YTI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtNjksNCAr
NjksOSBAQCBsb25nIFNjcmlwdFByb2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9z
aXRpb24sIFN0cmluZyogZGF0YSkKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKK2Jvb2wgU2Ny
aXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRQcm9maWxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9m
aWxlci5oCmluZGV4IDVjMTA1NGIuLmIxYWIzYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFBy
b2ZpbGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKICAgICBzdGF0aWMgdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7CiAgICAgc3RhdGljIGxv
bmcgZ2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIHBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpOworICAg
IHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnBtIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
bQppbmRleCBjZDkwNTJhLi5lNjQ3YzkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KQEAgLTM4LDYgKzM4LDExIEBAICR0eXBlVHJhbnNmb3JteyJBcHBs
aWNhdGlvbkNhY2hlIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIiwKICAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250
cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17IlBy
b2ZpbGVyIn0gPSB7CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQcm9maWxlckFnZW50IiwK
KyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIiwKKyAgICAiaGFuZGxl
ckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5wcm9maWxlckFnZW50KCkiLAor
fTsKICR0eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiUmVt
b3RlSW5zcGVjdG9yRnJvbnRlbmQiLAogICAgICJoZWFkZXIiID0+ICJSZW1vdGVJbnNwZWN0b3JG
cm9udGVuZC5oIiwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDFjNjZiNTkuLjQ4NjQ4NDIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMTQ1LDE0ICsxNDUsMTQgQEAgbW9kdWxlIGNv
cmUgewogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGVuYWJsZVByb2ZpbGVyKGlu
IGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkaXNh
YmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogCi0gICAgICAgIFtoYW5kbGVyPUNvbnRy
b2xsZXJdIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxl
cl0gdm9pZCBzdG9wUHJvZmlsaW5nKCk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lk
IHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIHN0b3BQ
cm9maWxpbmcoKTsKIAotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGdldFByb2Zp
bGVIZWFkZXJzKGluIGxvbmcgY2FsbElkLCBvdXQgQXJyYXkgaGVhZGVycyk7Ci0gICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0UHJvZmlsZShpbiBsb25nIGNhbGxJZCwgaW4gdW5z
aWduZWQgbG9uZyB1aWQsIG91dCBPYmplY3QgcHJvZmlsZSk7CisgICAgICAgIFtoYW5kbGVyPVBy
b2ZpbGVyXSB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGluIGxvbmcgY2FsbElkLCBvdXQgQXJyYXkg
aGVhZGVycyk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIGdldFByb2ZpbGUoaW4g
bG9uZyBjYWxsSWQsIGluIHVuc2lnbmVkIGxvbmcgdWlkLCBvdXQgT2JqZWN0IHByb2ZpbGUpOwog
Ci0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgcmVtb3ZlUHJvZmlsZShpbiB1bnNp
Z25lZCBsb25nIHVpZCk7Ci0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgY2xlYXJQ
cm9maWxlcygpOworICAgICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCByZW1vdmVQcm9maWxl
KGluIHVuc2lnbmVkIGxvbmcgdWlkKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQg
Y2xlYXJQcm9maWxlcygpOwogCiAgICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgdGFrZUhl
YXBTbmFwc2hvdCgpOwogICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVy
TG9nTGluZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0
UG9zaXRpb24sIG91dCBTdHJpbmcgbG9nKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKaW5kZXggYWM2NzBjYi4uZDZhMzYzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCIKQEAgLTExNSw4ICsxMTYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2Vy
SW5pdGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRl
ZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZFNldHRpbmdOYW1l
ID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBk
ZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5h
YmxlZCI7CkBAIC0xNzAsMTEgKzE2OSw2IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3Rv
ckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBt
X2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVu
U2hvd24oZmFsc2UpCi0gICAgLCBtX3Byb2ZpbGVyRW5hYmxlZCghV1RGX1VTRV9KU0MpCi0gICAg
LCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQotICAgICwgbV9jdXJyZW50
VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIoLTEpCi0gICAgLCBtX25leHRVc2VySW5pdGlhdGVk
UHJvZmlsZU51bWJlcigxKQotICAgICwgbV9zdGFydFByb2ZpbGluZyh0aGlzLCAmSW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKQogI2VuZGlmCiB7CiAgICAg
QVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKQEAgLTIwOSw2ICsyMDMsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQogCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFyKCk7CisgICAgbV9wcm9m
aWxlckFnZW50LmNsZWFyKCk7CiAjZW5kaWYKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsK
ICAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwpAQCAtNTA0LDEwICs0OTksMTYgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgICAgICBTdHJpbmcgZGVidWdn
ZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgICAg
IGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOworICAgIH0KKyAgICBpZiAoU2NyaXB0
UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkpCisgICAgICAgIGVuYWJsZVByb2Zp
bGVyKHRydWUsIGZhbHNlKTsKKyAgICBlbHNlIHsKICAgICAgICAgU3RyaW5nIHByb2ZpbGVyRW5h
YmxlZCA9IHNldHRpbmcocHJvZmlsZXJFbmFibGVkU2V0dGluZ05hbWUpOwogICAgICAgICBpZiAo
cHJvZmlsZXJFbmFibGVkID09ICJ0cnVlIikKICAgICAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7
CiAgICAgfQorICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFn
ZW50LT5zZXRSZW1vdGVGcm9udGVuZChtX3JlbW90ZUZyb250ZW5kLmdldCgpKTsKICNlbmRpZgog
CiAgICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBsYXN0QWN0aXZlUGFuZWwpCkBAIC01OTQs
NyArNTk1LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5k
KCkKICAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLSAgICBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIGlmIChwcm9maWxlckVu
YWJsZWQoKSkgeworICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldFJlbW90ZUZyb250ZW5kKDAp
OworICAgICAgICBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIH0KICNlbmRpZgog
CiAgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKQEAgLTYzOCw3ICs2NDIsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAg
ICAgIG1fcmVtb3RlRnJvbnRlbmQtPm1vbml0b3JpbmdYSFJXYXNFbmFibGVkKCk7CiAKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9wcm9maWxlckVuYWJsZWQpCisg
ICAgaWYgKHByb2ZpbGVyRW5hYmxlZCgpKQogICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5wcm9m
aWxlcldhc0VuYWJsZWQoKTsKICNlbmRpZgogCkBAIC03NDUsMTEgKzc0OSw4IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQog
ICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLSAgICAg
ICAgbV9wcm9maWxlcy5jbGVhcigpOwotICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJv
ZmlsZU51bWJlciA9IDE7Ci0gICAgICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVy
ID0gMTsKLSAgICAgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgICAgICBtX3JlbW90
ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKKyAgICAgICAgaWYgKG1fcHJvZmlsZXJB
Z2VudCkKKyAgICAgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+cmVzZXRTdGF0ZSgpOwogI2VuZGlm
CiAgICAgICAgIC8vIHVuYmluZEFsbFJlc291cmNlcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBk
YXRhYmFzZSBhbmQgRE9NIHN0b3JhZ2UKICAgICAgICAgLy8gcmVzb3VyY2VzIGFyZSBjbGVhcmVk
IHNvIHRoYXQgaXQgaGFzIGEgY2hhbmNlIHRvIHVuYmluZCB0aGVtLgpAQCAtMTQ1NiwxNDUgKzE0
NTcsNDggQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChsb24KICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZShQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKQogewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Ci0gICAg
bV9wcm9maWxlcy5hZGQocHJvZmlsZS0+dWlkKCksIHByb2ZpbGUpOwotCi0gICAgaWYgKG1fcmVt
b3RlRnJvbnRlbmQpIHsKLSAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJvZmlsZUhlYWRl
cihjcmVhdGVQcm9maWxlSGVhZGVyKCpwcm9maWxlKSk7Ci0gICAgfQotCi0gICAgYWRkUHJvZmls
ZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShwcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OworICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5h
ZGRQcm9maWxlKHBycFByb2ZpbGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQ
YXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBw
cm9maWxlID0gcHJwUHJvZmlsZTsKLQotICAgIFN0cmluZyB0aXRsZSA9IHByb2ZpbGUtPnRpdGxl
KCk7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmlsZSBcIndlYmtp
dC1wcm9maWxlOi8vJXMvJXMjJWRcIiBmaW5pc2hlZC4iLCBDUFVQcm9maWxlVHlwZSwgZW5jb2Rl
V2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRsZSkudXRmOCgpLmRhdGEoKSwgcHJvZmlsZS0+dWlk
KCkpOwotICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdl
VHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwor
ICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5hZGRQ
cm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKHBycFByb2ZpbGUsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU3RhcnRQcm9maWxp
bmdNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIFN0cmluZyBtZXNzYWdlID0gU3Ry
aW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIzBcIiBzdGFydGVk
LiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHRpdGxlKS51
dGY4KCkuZGF0YSgpKTsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwg
TG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVQcm9maWxlKHVu
c2lnbmVkIHVpZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fcHJvZmlsZXMuY29udGFpbnModWlkKSkKLSAgICAgICAgbV9wcm9maWxlcy5yZW1v
dmUodWlkKTsKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIG1fcHJvZmlsZXJB
Z2VudC0+YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxlLCBsaW5lTnVtYmVy
LCBzb3VyY2VVUkwpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyUHJvZmls
ZXMoKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3By
b2ZpbGVzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIg
PSAxOwotICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKLX0KIAotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBoZWFkZXJzKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppc1JlY29yZGluZ1Vz
ZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3QKIHsKLSAgICBQcm9maWxlc01hcDo6aXRlcmF0b3Ig
cHJvZmlsZXNFbmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwotICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkK
LSAgICAgICAgKCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+
c2Vjb25kKSk7CisgICAgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudCAmJiBtX3Byb2ZpbGVyQWdlbnQt
PmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpnZXRQcm9maWxlKHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIHByb2ZpbGVPYmplY3QpCitTdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0Q3VycmVu
dFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCiB7
Ci0gICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7Ci0g
ICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKLSAgICAgICAgKnByb2ZpbGVPYmplY3Qg
PSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKLSAgICAgICAgKCpwcm9maWxlT2Jq
ZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JIZWFkKCkpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYg
cHJvZmlsZSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0aXRsZSIsIHByb2Zp
bGUudGl0bGUoKSk7Ci0gICAgaGVhZGVyLT5zZXROdW1iZXIoInVpZCIsIHByb2ZpbGUudWlkKCkp
OwotICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0eXBlSWQiLCBTdHJpbmcoQ1BVUHJvZmlsZVR5cGUp
KTsKLSAgICByZXR1cm4gaGVhZGVyOworICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxl
TmFtZShpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKKyAgICByZXR1cm4gIiI7CiB9CiAKLVN0cmlu
ZyBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1l
KGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlciA9IGZhbHNlKQordm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogewotICAgIGlmIChpbmNyZW1l
bnRQcm9maWxlTnVtYmVyKQotICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51
bWJlciA9IG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKys7Ci0KLSAgICByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIiVzLiVkIiwgVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCBtX2N1cnJl
bnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nU29vbigpCi17Ci0gICAgbV9zdGFydFBy
b2ZpbGluZy5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+KikK
LXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFwcm9m
aWxlckVuYWJsZWQoKSkgewogICAgICAgICBlbmFibGVQcm9maWxlcihmYWxzZSwgdHJ1ZSk7CiAg
ICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cygpOwogICAgIH0KLQotICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUgPSB0cnVl
OwotCi0gICAgU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZSh0cnVlKTsKLQotI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRl
ID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldv
cmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0jZWxzZQotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSA9IDA7Ci0jZW5kaWYKLSAgICBTY3JpcHRQcm9maWxlcjo6c3RhcnQoc2NyaXB0U3RhdGUsIHRp
dGxlKTsKLQotICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgMCwg
U3RyaW5nKCkpOwotCi0gICAgdG9nZ2xlUmVjb3JkQnV0dG9uKHRydWUpOworICAgIG1fcHJvZmls
ZXJBZ2VudC0+c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogewotICAgIGlmICgh
ZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0
ZWRQcm9maWxlID0gZmFsc2U7Ci0KLSAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlcklu
aXRpYXRlZFByb2ZpbGVOYW1lKCk7Ci0KLSNpZiBVU0UoSlNDKQotICAgIEpTQzo6RXhlY1N0YXRl
KiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KSwgZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotI2Vsc2UKLSAgICAvLyBVc2UgbnVs
bCBzY3JpcHQgc3RhdGUgdG8gYXZvaWQgZmlsdGVyaW5nIGJ5IGNvbnRleHQgc2VjdXJpdHkgdG9r
ZW4uCi0gICAgLy8gQWxsIGZ1bmN0aW9ucyBmcm9tIGFsbCBpZnJhbWVzIHNob3VsZCBiZSB2aXNp
YmxlIGZyb20gSW5zcGVjdG9yIFVJLgotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7
Ci0jZW5kaWYKLSAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IFNjcmlwdFByb2Zp
bGVyOjpzdG9wKHNjcmlwdFN0YXRlLCB0aXRsZSk7Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAg
IGFkZFByb2ZpbGUocHJvZmlsZSwgMCwgU3RyaW5nKCkpOwotCi0gICAgdG9nZ2xlUmVjb3JkQnV0
dG9uKGZhbHNlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRC
dXR0b24oYm9vbCBpc1Byb2ZpbGluZykKLXsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3JlbW90ZUZyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxl
KGlzUHJvZmlsaW5nKTsKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIG1fcHJv
ZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29sIGFsd2F5cywgYm9vbCBza2lwUmVj
b21waWxlKQpAQCAtMTYwMiwxNCArMTUwNiwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCiAgICAgaWYg
KGFsd2F5cykKICAgICAgICAgc2V0U2V0dGluZyhwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSwg
InRydWUiKTsKIAotICAgIGlmIChtX3Byb2ZpbGVyRW5hYmxlZCkKKyAgICBpZiAocHJvZmlsZXJF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvZmlsZXJFbmFibGVkID0gdHJ1
ZTsKLQogICAgIGlmICghc2tpcFJlY29tcGlsZSkKICAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogCisgICAgbV9wcm9maWxl
ckFnZW50ID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1fcmVtb3RlRnJv
bnRlbmQuZ2V0KCkpOworCiAgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCiAgICAgICAgIG1fcmVt
b3RlRnJvbnRlbmQtPnByb2ZpbGVyV2FzRW5hYmxlZCgpOwogfQpAQCAtMTYxOSwxMCArMTUyMywx
MCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcihib29sIGFsd2F5
cykKICAgICBpZiAoYWx3YXlzKQogICAgICAgICBzZXRTZXR0aW5nKHByb2ZpbGVyRW5hYmxlZFNl
dHRpbmdOYW1lLCAiZmFsc2UiKTsKIAotICAgIGlmICghbV9wcm9maWxlckVuYWJsZWQpCisgICAg
aWYgKCFwcm9maWxlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9maWxl
ckVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQuY2xlYXIoKTsKIAogICAgIFNj
cmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDhkOTYwMDUuLjY3
MmE3YzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTMzLDkg
KzMzLDcgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2Vu
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC02NSw2ICs2Myw3IEBAIGNsYXNzIEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0
b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0
b3JTdG9yYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwpAQCAtNzgsNiAr
NzcsNyBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwog
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKK2NsYXNzIFNjcmlw
dFByb2ZpbGU7CiBjbGFzcyBTY3JpcHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFz
cyBTdG9yYWdlOwpAQCAtMjI4LDIwICsyMjgsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUHJv
ZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdm9pZCBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdl
VG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVz
c2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgdm9pZCByZW1vdmVQcm9maWxlKHVuc2lnbmVk
KTsKLSAgICB2b2lkIGNsZWFyUHJvZmlsZXMoKTsKLQotICAgIGJvb2wgaXNSZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGU7IH0KLQotICAgIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7Ci0gICAgdm9pZCBzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxlcj4qID0gMCk7CisgICAgYm9v
bCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3Q7CisgICAgU3RyaW5nIGdl
dEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVt
YmVyID0gZmFsc2UpOworICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiAg
ICAgdm9pZCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIHZvaWQgc3RhcnRQcm9m
aWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0gICAgdm9pZCBzdG9w
UHJvZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0KICAgICB2b2lk
IGVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UsIGJvb2wgc2tpcFJlY29tcGlsZSA9
IGZhbHNlKTsKICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZhbHNlKTsK
LSAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGVuYWJsZWQoKSAmJiBt
X3Byb2ZpbGVyRW5hYmxlZDsgfQorICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJBZ2VudDsgfQorICAgIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVyQWdlbnQu
Z2V0KCk7IH0KIAogICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoKTsKICAgICB2b2lkIGRpc2FibGVE
ZWJ1Z2dlcihib29sIGFsd2F5cyA9IGZhbHNlKTsKQEAgLTI4MywxNCArMjc3LDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50
LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKIAotICAgIHZvaWQgc3RhcnRV
c2VySW5pdGlhdGVkUHJvZmlsaW5nU29vbigpOwogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9u
KGJvb2wpOwogICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMp
OwotICAgIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVh
ZGVycyk7Ci0gICAgdm9pZCBnZXRQcm9maWxlKHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIHByb2ZpbGVPYmplY3QpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJh
c2UqIGRhdGFiYXNlKTsKQEAgLTM4MCwxMiArMzY5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
YXR0YWNoRGVidWdnZXJXaGVuU2hvd247CiAgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ+IG1fZGVidWdnZXJBZ2VudDsKIAotICAgIGJvb2wgbV9wcm9maWxlckVuYWJsZWQ7Ci0gICAg
Ym9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOwotICAgIGludCBtX2N1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKLSAgICB1bnNpZ25lZCBtX25leHRVc2VySW5pdGlh
dGVkUHJvZmlsZU51bWJlcjsKLSAgICBUaW1lcjxJbnNwZWN0b3JDb250cm9sbGVyPiBtX3N0YXJ0
UHJvZmlsaW5nOwotICAgIFByb2ZpbGVzTWFwIG1fcHJvZmlsZXM7CisgICAgT3duUHRyPEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgogI2lmIEVOQUJMRShX
T1JLRVJTKQogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgUmVmUHRyPEluc3BlY3Rvcldv
cmtlclJlc291cmNlPiA+IFdvcmtlcnNNYXA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5
NTQxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQu
aCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBVU0UoSlNDKQorI2luY2x1ZGUgIkpT
RE9NV2luZG93LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lID0gIm9yZy53ZWJraXQucHJv
ZmlsZXMudXNlci1pbml0aWF0ZWQiOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENQVVByb2Zp
bGVUeXBlID0gIkNQVSI7CisKK1Bhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIsIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiByZW1vdGVGcm9udGVuZCkKK3sK
KyAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gYWdlbnQgPSBhZG9wdFB0cihuZXcg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudChpbnNwZWN0b3JDb250cm9sbGVyLCByZW1vdGVGcm9udGVu
ZCkpOworICAgIHJldHVybiBhZ2VudC5yZWxlYXNlKCk7Cit9CisKK0luc3BlY3RvclByb2ZpbGVy
QWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciwgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqIHJlbW90ZUZyb250ZW5kKQor
ICAgICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorICAg
ICAgICAsIG1fcmVtb3RlRnJvbnRlbmQocmVtb3RlRnJvbnRlbmQpCisgICAgICAgICwgbV9yZWNv
cmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZShmYWxzZSkKKyAgICAgICAgLCBtX2N1cnJlbnRVc2Vy
SW5pdGlhdGVkUHJvZmlsZU51bWJlcigtMSkKKyAgICAgICAgLCBtX25leHRVc2VySW5pdGlhdGVk
UHJvZmlsZU51bWJlcigxKQoreworfQorCitJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp+SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
YWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIFJlZlB0cjxTY3Jp
cHRQcm9maWxlPiBwcm9maWxlID0gcHJwUHJvZmlsZTsKKyAgICBtX3Byb2ZpbGVzLmFkZChwcm9m
aWxlLT51aWQoKSwgcHJvZmlsZSk7CisgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCisgICAgICAg
IG1fcmVtb3RlRnJvbnRlbmQtPmFkZFByb2ZpbGVIZWFkZXIoY3JlYXRlUHJvZmlsZUhlYWRlcigq
cHJvZmlsZSkpOworICAgIGFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUocHJvZmls
ZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjphZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXB0
UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpCit7CisgICAgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBwcnBQcm9m
aWxlOworCisgICAgU3RyaW5nIHRpdGxlID0gcHJvZmlsZS0+dGl0bGUoKTsKKyAgICBTdHJpbmcg
bWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwid2Via2l0LXByb2ZpbGU6Ly8lcy8l
cyMlZFwiIGZpbmlzaGVkLiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2Vx
dWVuY2VzKHRpdGxlKS51dGY4KCkuZGF0YSgpLCBwcm9maWxlLT51aWQoKSk7CisgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9n
TWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNl
VVJMKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGlu
Z01lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJp
bmc6OmZvcm1hdCgiUHJvZmlsZSBcIndlYmtpdC1wcm9maWxlOi8vJXMvJXMjMFwiIHN0YXJ0ZWQu
IiwgQ1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0
ZjgoKS5kYXRhKCkpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+YWRkTWVzc2FnZVRvQ29u
c29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1l
c3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0
IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
aGVhZGVyID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBoZWFkZXItPnNldFN0cmlu
ZygidGl0bGUiLCBwcm9maWxlLnRpdGxlKCkpOworICAgIGhlYWRlci0+c2V0TnVtYmVyKCJ1aWQi
LCBwcm9maWxlLnVpZCgpKTsKKyAgICBoZWFkZXItPnNldFN0cmluZygidHlwZUlkIiwgU3RyaW5n
KENQVVByb2ZpbGVUeXBlKSk7CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKworU3RyaW5nIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9v
bCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQoreworICAgIGlmIChpbmNyZW1lbnRQcm9maWxlTnVt
YmVyKQorICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IG1fbmV4
dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKys7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIiVzLiVkIiwgVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCBtX2N1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU51bWJlcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0
UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycykKK3sKKyAgICBQ
cm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNFbmQgPSBtX3Byb2ZpbGVzLmVuZCgpOworICAg
IGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAh
PSBwcm9maWxlc0VuZDsgKytpdCkKKyAgICAgICAgKCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVh
dGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSh1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBwcm9maWxlT2JqZWN0KQoreworICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJv
ZmlsZXMuZmluZCh1aWQpOworICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKSB7CisgICAg
ICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Cisg
ICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpCit7CisgICAgaWYgKG1f
cHJvZmlsZXMuY29udGFpbnModWlkKSkKKyAgICAgICAgbV9wcm9maWxlcy5yZW1vdmUodWlkKTsK
K30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZXNldFN0YXRlKCkKK3sKKyAgICBt
X3Byb2ZpbGVzLmNsZWFyKCk7CisgICAgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1i
ZXIgPSAxOworICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKKyAgICBp
ZiAobV9yZW1vdGVGcm9udGVuZCkKKyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cmVzZXRQcm9m
aWxlc1BhbmVsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6c3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCkKK3sKKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlID0gdHJ1ZTsKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOYW1lKHRydWUpOworI2lmIFVTRShKU0MpCisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlw
dFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBh
Z2UoKS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyNlbHNl
CisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKKyNlbmRpZgorICAgIFNjcmlwdFBy
b2ZpbGVyOjpzdGFydChzY3JpcHRTdGF0ZSwgdGl0bGUpOworICAgIGFkZFN0YXJ0UHJvZmlsaW5n
TWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgMCwgU3RyaW5nKCkpOworICAgIHRvZ2dsZVJlY29yZEJ1
dHRvbih0cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlcklu
aXRpYXRlZFByb2ZpbGluZygpCit7CisgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmls
ZSA9IGZhbHNlOworICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJv
ZmlsZU5hbWUoKTsKKyNpZiBVU0UoSlNDKQorICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCkt
Pm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisjZWxzZQorICAg
IC8vIFVzZSBudWxsIHNjcmlwdCBzdGF0ZSB0byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBz
ZWN1cml0eSB0b2tlbi4KKyAgICAvLyBBbGwgZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hv
dWxkIGJlIHZpc2libGUgZnJvbSBJbnNwZWN0b3IgVUkuCisgICAgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlID0gMDsKKyNlbmRpZgorICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0g
U2NyaXB0UHJvZmlsZXI6OnN0b3Aoc2NyaXB0U3RhdGUsIHRpdGxlKTsKKyAgICBpZiAocHJvZmls
ZSkKKyAgICAgICAgYWRkUHJvZmlsZShwcm9maWxlLCAwLCBTdHJpbmcoKSk7CisgICAgdG9nZ2xl
UmVjb3JkQnV0dG9uKGZhbHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0
b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZykKK3sKKyAgICBpZiAobV9yZW1vdGVG
cm9udGVuZCkKKyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+c2V0UmVjb3JkaW5nUHJvZmlsZShp
c1Byb2ZpbGluZyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTY1NDkK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclByb2ZpbGVyQWdlbnRfaAor
I2RlZmluZSBJbnNwZWN0b3JQcm9maWxlckFnZW50X2gKKworI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7
CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBTY3JpcHRQcm9maWxlOworY2xhc3MgUmVt
b3RlSW5zcGVjdG9yRnJvbnRlbmQ7CisKK2NsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQgOiBw
dWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiwgUmVtb3RlSW5z
cGVjdG9yRnJvbnRlbmQqKTsKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JQcm9maWxlckFnZW50KCk7
CisKKyAgICB2b2lkIGFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9m
aWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAg
dm9pZCBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXB0
UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsK
KyAgICB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcm
IHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7Cisg
ICAgdm9pZCBjbGVhclByb2ZpbGVzKCkgeyByZXNldFN0YXRlKCk7IH0KKyAgICBTdHJpbmcgZ2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1i
ZXIgPSBmYWxzZSk7CisgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBoZWFkZXJzKTsKKyAgICB2b2lkIGdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgYm9vbCBpc1JlY29yZGlu
Z1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVk
UHJvZmlsZTsgfQorICAgIHZvaWQgcmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpOworICAgIHZv
aWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgc2V0UmVtb3RlRnJvbnRlbmQoUmVtb3RlSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kKSB7IG1fcmVtb3RlRnJvbnRlbmQgPSBmcm9udGVuZDsgfQor
ICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygp
OyB9CisgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0
b3BQcm9maWxpbmcoKSB7IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2b2lk
IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0
b24oYm9vbCBpc1Byb2ZpbGluZyk7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CisKKyAgICBJ
bnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqLCBSZW1vdGVJbnNwZWN0
b3JGcm9udGVuZCopOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9m
aWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOworCisgICAgSW5zcGVjdG9y
Q29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIFJlbW90ZUluc3BlY3RvckZy
b250ZW5kKiBtX3JlbW90ZUZyb250ZW5kOworICAgIGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZTsKKyAgICBpbnQgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXI7
CisgICAgdW5zaWduZWQgbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXI7CisgICAgUHJv
ZmlsZXNNYXAgbV9wcm9maWxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64857</attachid>
            <date>2010-08-19 08:46:17 -0700</date>
            <delta_ts>2010-08-23 01:23:25 -0700</delta_ts>
            <desc>This time, interactive_ui_tests pass</desc>
            <filename>44174-patch</filename>
            <type>text/plain</type>
            <size>42897</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDNmZTZjMmMuLjRlZmQ4NWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3NCw2ICsxMDc0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggOTkzNGZiZi4uYmE3MDRkNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAx
MC0wOC0xOSAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgcHJvZmls
ZXItcmVsYXRlZCBjb2RlIGFuZCBkYXRhIGZyb20gSW5zcGVjdG9yQ29udHJvbGxlciBpbnRvCisg
ICAgICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTc0CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFByb2Zp
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3
YXlzRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3Jp
cHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJv
ZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRQcm9maWxl
RmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6fkluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkUHJvZmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRQcm9maWxlRmluaXNo
ZWRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldEN1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDo6Z2V0UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpyZW1vdmVQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OnJlc2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRv
bik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjbGVhclByb2ZpbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmlzUmVjb3JkaW5n
VXNlckluaXRpYXRlZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6c2V0UmVtb3RlRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6c3RvcFByb2ZpbGluZyk6CisKIDIwMTAtMDgtMTkgIEFuZHJlYXMg
S2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDIwYmFmMGYuLmU0YjY2MGUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTYyNyw2ICsxNjI3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogCVdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbiBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMTM2OTI5Ni4uNTdiODQ0MCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCkBAIC0xMTg5LDEwICsxMTg5LDExIEBAIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjIwc3RvcFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxp
bmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNlckluaXRpYXRl
ZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZ0VQTlNfNVRpbWVySVMwX0VFCiBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgogX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzRpbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNl
dHRpbmdOYW1lRXYKK19fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3Jk
aW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyNHNob3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNWNsb3NlRXYKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNwZWN0RVBOU180Tm9kZUUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
M2RmZjI1ZC4uMzg1MDRhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3NjksNiArMTc2OSw4IEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclBy
b2ZpbGVyQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDM3ZDRi
ZDcuLjQ1NTU3MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtNzUzLDYgKzc1Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5jcHAgXApAQCAtMTUyMiw2ICsxNTIzLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JTdG9yYWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
aCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxOGQ0ODUxLi5lNDgz
MWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUxODUzLDYgKzUx
ODUzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclJlc291cmNlLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDI0MzVjNjEuLjY3MTI1ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0yNzQyLDYgKzI3NDIsOCBAQAogCQk5N0VGNTYxMDExRTQwNzgzMDA3RTAyNkYg
LyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdFRjU2MEUxMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcCAqLzsgfTsKIAkJOTdFRjU2MTExMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUu
aCAqLzsgfTsKIAkJOTdFRjdERkUxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJC
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi87IH07
CisJCTlGMEQ2QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJD
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKKwkJ
OUYwRDZCMkYxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZF
QkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi87IH07CiAJCTlGNkZDMTk2
MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjZGQzE5NDExMjJFODJBMDBFODAxOTYg
LyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovOyB9OwogCQk5RjZGQzE5NzExMjJFODJBMDBFODAx
OTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1Nl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTlGNzIzMDRGMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjcyMzA0QzExMTg0QjQxMDBBRDAx
MjYgLyogU2NyaXB0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC04NTk3LDYgKzg1OTksOCBAQAogCQk5N0VGNTYwRTExRTQwNzgzMDA3
RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlv
blNpdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbnN0cnVjdGlv
blNpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdFRjdERkQxMDdFNTVCNzAw
RDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGMEQ2
QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMxOTQxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlw
dERlYnVnU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNj
cmlwdERlYnVnU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMx
OTUxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdERlYnVnU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlGNzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNzg3LDYgKzExNzkxLDggQEAKIAkJCQk3QTBFNzcw
QjEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywKIAkJCQk3
QTBFNzcwQzEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggKi8sCiAJ
CQkJN0EwRTc3MEQxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5pZGwg
Ki8sCisJCQkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuY3BwICovLAorCQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9m
aWxlckFnZW50LmggKi8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3Rv
clJlc291cmNlLmNwcCAqLywKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVj
dG9yUmVzb3VyY2UuaCAqLywKIAkJCQk3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmNwcCAqLywKQEAgLTIwMzI5LDYgKzIwMzM1LDcgQEAKIAkJCQkyRURF
RjFGODEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUYxQkZFQjEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDZBMjY5MDYxMjFCNkI0MzAwQzQxRjNBIC8qIEZpbGVXcml0ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyNzgwLDYgKzIyNzg3LDcgQEAKIAkJCQkyRURF
RjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRUYxQkZFQTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0NkEyNjkwNTEyMUI2QjQzMDBDNDFGM0EgLyogRmlsZVdyaXRlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5RjBENkIyRTEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQ
cm9maWxlci5jcHAKaW5kZXggZjM3MmMzYy4uNjJhZTliYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRQcm9maWxlci5jcHAKQEAgLTQ2LDYgKzQ2LDExIEBAIFBhc3NSZWZQdHI8U2NyaXB0UHJv
ZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJp
bmcmCiAgICAgcmV0dXJuIFNjcmlwdFByb2ZpbGU6OmNyZWF0ZShwcm9maWxlKTsKIH0KIAorYm9v
bCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdFByb2ZpbGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKaW5k
ZXggNGZhMzMxYy4uMTgwYzQ5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRQcm9maWxlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApA
QCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJv
ZmlsZT4gc3RvcChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAg
IHN0YXRpYyB2b2lkIHRha2VIZWFwU25hcHNob3QoKSB7IH0KICAgICBzdGF0aWMgbG9uZyBnZXRQ
cm9maWxlckxvZ0xpbmVzKGxvbmcsIFN0cmluZyopIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCA5MjEzNzc0Li4w
ZGU0YTI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtNjksNCAr
NjksOSBAQCBsb25nIFNjcmlwdFByb2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9z
aXRpb24sIFN0cmluZyogZGF0YSkKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKK2Jvb2wgU2Ny
aXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRQcm9maWxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9m
aWxlci5oCmluZGV4IDVjMTA1NGIuLmIxYWIzYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFBy
b2ZpbGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKICAgICBzdGF0aWMgdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7CiAgICAgc3RhdGljIGxv
bmcgZ2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIHBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpOworICAg
IHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnBtIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
bQppbmRleCBjZDkwNTJhLi5lNjQ3YzkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KQEAgLTM4LDYgKzM4LDExIEBAICR0eXBlVHJhbnNmb3JteyJBcHBs
aWNhdGlvbkNhY2hlIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIiwKICAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250
cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17IlBy
b2ZpbGVyIn0gPSB7CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQcm9maWxlckFnZW50IiwK
KyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIiwKKyAgICAiaGFuZGxl
ckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5wcm9maWxlckFnZW50KCkiLAor
fTsKICR0eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiUmVt
b3RlSW5zcGVjdG9yRnJvbnRlbmQiLAogICAgICJoZWFkZXIiID0+ICJSZW1vdGVJbnNwZWN0b3JG
cm9udGVuZC5oIiwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDFjNjZiNTkuLjQ4NjQ4NDIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMTQ1LDE0ICsxNDUsMTQgQEAgbW9kdWxlIGNv
cmUgewogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGVuYWJsZVByb2ZpbGVyKGlu
IGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkaXNh
YmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogCi0gICAgICAgIFtoYW5kbGVyPUNvbnRy
b2xsZXJdIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxl
cl0gdm9pZCBzdG9wUHJvZmlsaW5nKCk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lk
IHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIHN0b3BQ
cm9maWxpbmcoKTsKIAotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGdldFByb2Zp
bGVIZWFkZXJzKGluIGxvbmcgY2FsbElkLCBvdXQgQXJyYXkgaGVhZGVycyk7Ci0gICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0UHJvZmlsZShpbiBsb25nIGNhbGxJZCwgaW4gdW5z
aWduZWQgbG9uZyB1aWQsIG91dCBPYmplY3QgcHJvZmlsZSk7CisgICAgICAgIFtoYW5kbGVyPVBy
b2ZpbGVyXSB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGluIGxvbmcgY2FsbElkLCBvdXQgQXJyYXkg
aGVhZGVycyk7CisgICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIGdldFByb2ZpbGUoaW4g
bG9uZyBjYWxsSWQsIGluIHVuc2lnbmVkIGxvbmcgdWlkLCBvdXQgT2JqZWN0IHByb2ZpbGUpOwog
Ci0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgcmVtb3ZlUHJvZmlsZShpbiB1bnNp
Z25lZCBsb25nIHVpZCk7Ci0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgY2xlYXJQ
cm9maWxlcygpOworICAgICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCByZW1vdmVQcm9maWxl
KGluIHVuc2lnbmVkIGxvbmcgdWlkKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQg
Y2xlYXJQcm9maWxlcygpOwogCiAgICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgdGFrZUhl
YXBTbmFwc2hvdCgpOwogICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVy
TG9nTGluZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0
UG9zaXRpb24sIG91dCBTdHJpbmcgbG9nKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKaW5kZXggYWM2NzBjYi4uZjMwOGE1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCIKQEAgLTExNSw4ICsxMTYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2Vy
SW5pdGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRl
ZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZFNldHRpbmdOYW1l
ID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBk
ZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5h
YmxlZCI7CkBAIC0xNzAsMTYgKzE2OSwxNCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwg
bV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hl
blNob3duKGZhbHNlKQotICAgICwgbV9wcm9maWxlckVuYWJsZWQoIVdURl9VU0VfSlNDKQotICAg
ICwgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZShmYWxzZSkKLSAgICAsIG1fY3VycmVu
dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKC0xKQotICAgICwgbV9uZXh0VXNlckluaXRpYXRl
ZFByb2ZpbGVOdW1iZXIoMSkKLSAgICAsIG1fc3RhcnRQcm9maWxpbmcodGhpcywgJkluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZykKICNlbmRpZgogewogICAg
IEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAgICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7
CiAgICAgKytzX2luc3BlY3RvckNvbnRyb2xsZXJDb3VudDsKKyAgICAvLyBOZWVkZWQgZm9yICdj
b25zb2xlLnByb2ZpbGUnIHRvIHdvcmsuCisgICAgaWYgKFNjcmlwdFByb2ZpbGVyOjppc1Byb2Zp
bGVyQWx3YXlzRW5hYmxlZCgpKQorICAgICAgICBtX3Byb2ZpbGVyQWdlbnQgPSBJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjpjcmVhdGUodGhpcywgMCk7CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXI6
On5JbnNwZWN0b3JDb250cm9sbGVyKCkKQEAgLTIwOSw2ICsyMDYsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQogCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFyKCk7CisgICAgbV9wcm9m
aWxlckFnZW50LmNsZWFyKCk7CiAjZW5kaWYKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsK
ICAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwpAQCAtNTA0LDEwICs1MDIsMTIgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgICAgICBTdHJpbmcgZGVidWdn
ZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgICAg
IGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwotICAgICAgICBTdHJpbmcgcHJvZmls
ZXJFbmFibGVkID0gc2V0dGluZyhwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAg
IGlmIChwcm9maWxlckVuYWJsZWQgPT0gInRydWUiKQotICAgICAgICAgICAgZW5hYmxlUHJvZmls
ZXIoKTsKICAgICB9CisgICAgU3RyaW5nIHByb2ZpbGVyRW5hYmxlZFNldHRpbmcgPSBzZXR0aW5n
KHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lKTsKKyAgICBpZiAocHJvZmlsZXJFbmFibGVkU2V0
dGluZyA9PSAidHJ1ZSIpCisgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CisgICAgaWYgKHByb2Zp
bGVyRW5hYmxlZCgpKQorICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldFJlbW90ZUZyb250ZW5k
KG1fcmVtb3RlRnJvbnRlbmQuZ2V0KCkpOwogI2VuZGlmCiAKICAgICBpZiAobV9zaG93QWZ0ZXJW
aXNpYmxlID09IGxhc3RBY3RpdmVQYW5lbCkKQEAgLTU5NCw3ICs1OTQsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQogICAgIGhpZGVIaWdobGlnaHQo
KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHN0b3BVc2VySW5pdGlh
dGVkUHJvZmlsaW5nKCk7CisgICAgaWYgKHByb2ZpbGVyRW5hYmxlZCgpKSB7CisgICAgICAgIG1f
cHJvZmlsZXJBZ2VudC0+c2V0UmVtb3RlRnJvbnRlbmQoMCk7CisgICAgICAgIHN0b3BVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCk7CisgICAgfQogI2VuZGlmCiAKICAgICByZWxlYXNlRnJvbnRlbmRM
aWZldGltZUFnZW50cygpOwpAQCAtNjM4LDcgKzY0MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+
bW9uaXRvcmluZ1hIUldhc0VuYWJsZWQoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQotICAgIGlmIChtX3Byb2ZpbGVyRW5hYmxlZCkKKyAgICBpZiAocHJvZmlsZXJFbmFibGVk
KCkpCiAgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPnByb2ZpbGVyV2FzRW5hYmxlZCgpOwogI2Vu
ZGlmCiAKQEAgLTc0NSwxMSArNzQ4LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKICNlbmRpZgogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQotICAgICAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7
Ci0gICAgICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKLSAgICAg
ICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwotICAgICAgICBpZiAobV9y
ZW1vdGVGcm9udGVuZCkKLSAgICAgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPnJlc2V0UHJvZmls
ZXNQYW5lbCgpOworICAgICAgICBpZiAobV9wcm9maWxlckFnZW50KQorICAgICAgICAgICAgbV9w
cm9maWxlckFnZW50LT5yZXNldFN0YXRlKCk7CiAjZW5kaWYKICAgICAgICAgLy8gdW5iaW5kQWxs
UmVzb3VyY2VzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFn
ZQogICAgICAgICAvLyByZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFu
Y2UgdG8gdW5iaW5kIHRoZW0uCkBAIC0xNDU2LDE0NSArMTQ1Niw0OCBAQCBJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJj
ZUZvcklkKGxvbgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJv
ZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7Ci0g
ICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTY3JpcHRQ
cm9maWxlPiBwcm9maWxlID0gcHJwUHJvZmlsZTsKLSAgICBtX3Byb2ZpbGVzLmFkZChwcm9maWxl
LT51aWQoKSwgcHJvZmlsZSk7Ci0KLSAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkgewotICAgICAg
ICBtX3JlbW90ZUZyb250ZW5kLT5hZGRQcm9maWxlSGVhZGVyKGNyZWF0ZVByb2ZpbGVIZWFkZXIo
KnByb2ZpbGUpKTsKLSAgICB9Ci0KLSAgICBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25z
b2xlKHByb2ZpbGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgaWYgKHByb2ZpbGVyRW5h
YmxlZCgpKQorICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmFkZFByb2ZpbGUocHJwUHJvZmlsZSwg
bGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjph
ZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmls
ZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpCiB7Ci0gICAgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBwcnBQcm9maWxlOwot
Ci0gICAgU3RyaW5nIHRpdGxlID0gcHJvZmlsZS0+dGl0bGUoKTsKLSAgICBTdHJpbmcgbWVzc2Fn
ZSA9IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwid2Via2l0LXByb2ZpbGU6Ly8lcy8lcyMlZFwi
IGZpbmlzaGVkLiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KHRpdGxlKS51dGY4KCkuZGF0YSgpLCBwcm9maWxlLT51aWQoKSk7Ci0gICAgYWRkTWVzc2FnZVRv
Q29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWws
IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgaWYgKHByb2ZpbGVyRW5hYmxl
ZCgpKQorICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VU
b0NvbnNvbGUocHJwUHJvZmlsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoY29u
c3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCiB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmlsZSBc
IndlYmtpdC1wcm9maWxlOi8vJXMvJXMjMFwiIHN0YXJ0ZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVu
Y29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVz
c2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIGlmIChwcm9m
aWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5hZGRTdGFydFByb2ZpbGlu
Z01lc3NhZ2VUb0NvbnNvbGUodGl0bGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpCi17Ci0g
ICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Byb2ZpbGVz
LmNvbnRhaW5zKHVpZCkpCi0gICAgICAgIG1fcHJvZmlsZXMucmVtb3ZlKHVpZCk7Ci19CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJQcm9maWxlcygpCitib29sIEluc3BlY3RvckNv
bnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdAogewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb2ZpbGVzLmNsZWFy
KCk7Ci0gICAgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwotICAgIG1f
bmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFk
ZXJzKQotewotICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmls
ZXMuZW5kKCk7Ci0gICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVz
LmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAgICAgICAoKmhlYWRlcnMpLT5w
dXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCi17Ci0gICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7Ci0gICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5k
KCkpIHsKLSAgICAgICAgKnByb2ZpbGVPYmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+
c2Vjb25kKTsKLSAgICAgICAgKCpwcm9maWxlT2JqZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQt
PnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOwotICAgIH0KKyAgICByZXR1
cm4gbV9wcm9maWxlckFnZW50ICYmIG1fcHJvZmlsZXJBZ2VudC0+aXNSZWNvcmRpbmdVc2VySW5p
dGlhdGVkUHJvZmlsZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yQ29udHJvbGxlcjo6Y3JlYXRlUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRQcm9maWxlJiBw
cm9maWxlKQorU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEN1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgaGVhZGVyLT5zZXRTdHJpbmcoInRpdGxlIiwgcHJvZmlsZS50aXRsZSgpKTsKLSAgICBoZWFk
ZXItPnNldE51bWJlcigidWlkIiwgcHJvZmlsZS51aWQoKSk7Ci0gICAgaGVhZGVyLT5zZXRTdHJp
bmcoInR5cGVJZCIsIFN0cmluZyhDUFVQcm9maWxlVHlwZSkpOwotICAgIHJldHVybiBoZWFkZXI7
Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDdXJyZW50VXNlckluaXRpYXRl
ZFByb2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlciA9IGZhbHNlKQotewotICAg
IGlmIChpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQotICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU51bWJlciA9IG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKys7Ci0K
LSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzLiVkIiwgVXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lLCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcik7CisgICAgaWYgKHByb2Zp
bGVyRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbV9wcm9maWxlckFnZW50LT5nZXRDdXJyZW50
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOworICAgIHJl
dHVybiAiIjsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0
ZWRQcm9maWxpbmdTb29uKCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCkKIHsKLSAgICBtX3N0YXJ0UHJvZmlsaW5nLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxlcj4qKQotewotICAgIGlmICghZW5hYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXByb2ZpbGVyRW5hYmxlZCgpKSB7CiAgICAg
ICAgIGVuYWJsZVByb2ZpbGVyKGZhbHNlLCB0cnVlKTsKICAgICAgICAgU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7CiAgICAgfQotCi0gICAgbV9y
ZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IHRydWU7Ci0KLSAgICBTdHJpbmcgdGl0bGUg
PSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKHRydWUpOwotCi0jaWYgVVNFKEpT
QykKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsK
LSNlbHNlCi0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKLSNlbmRpZgotICAgIFNj
cmlwdFByb2ZpbGVyOjpzdGFydChzY3JpcHRTdGF0ZSwgdGl0bGUpOwotCi0gICAgYWRkU3RhcnRQ
cm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxlLCAwLCBTdHJpbmcoKSk7Ci0KLSAgICB0b2dn
bGVSZWNvcmRCdXR0b24odHJ1ZSk7CisgICAgbV9wcm9maWxlckFnZW50LT5zdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNl
ckluaXRpYXRlZFByb2ZpbGluZygpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUgPSBmYWxzZTsKLQot
ICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoKTsK
LQotI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RP
TVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7Ci0jZWxzZQotICAgIC8vIFVzZSBudWxsIHNjcmlwdCBzdGF0ZSB0byBhdm9p
ZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0b2tlbi4KLSAgICAvLyBBbGwgZnVuY3Rp
b25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBJbnNwZWN0b3IgVUku
Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKLSNlbmRpZgotICAgIFJlZlB0cjxT
Y3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJvZmlsZXI6OnN0b3Aoc2NyaXB0U3RhdGUs
IHRpdGxlKTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgYWRkUHJvZmlsZShwcm9maWxlLCAw
LCBTdHJpbmcoKSk7Ci0KLSAgICB0b2dnbGVSZWNvcmRCdXR0b24oZmFsc2UpOwotfQotCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5n
KQotewotICAgIGlmICghbV9yZW1vdGVGcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
cmVtb3RlRnJvbnRlbmQtPnNldFJlY29yZGluZ1Byb2ZpbGUoaXNQcm9maWxpbmcpOworICAgIGlm
IChwcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgbV9wcm9maWxlckFnZW50LT5zdG9wVXNlcklu
aXRpYXRlZFByb2ZpbGluZygpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJs
ZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCkBAIC0xNjAyLDE0ICsx
NTA1LDE0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIoYm9vbCBh
bHdheXMsIGJvb2wgc2tpcFJlY29tcGlsZSkKICAgICBpZiAoYWx3YXlzKQogICAgICAgICBzZXRT
ZXR0aW5nKHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lLCAidHJ1ZSIpOwogCi0gICAgaWYgKG1f
cHJvZmlsZXJFbmFibGVkKQorICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSB0cnVlOwotCiAgICAgaWYgKCFza2lwUmVj
b21waWxlKQogICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxs
SlNGdW5jdGlvbnNTb29uKCk7CiAKKyAgICBtX3Byb2ZpbGVyQWdlbnQgPSBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpjcmVhdGUodGhpcywgbV9yZW1vdGVGcm9udGVuZC5nZXQoKSk7CisKICAgICBp
ZiAobV9yZW1vdGVGcm9udGVuZCkKICAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cHJvZmlsZXJX
YXNFbmFibGVkKCk7CiB9CkBAIC0xNjE5LDEwICsxNTIyLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQogICAgIGlmIChhbHdheXMpCiAg
ICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJFbmFibGVkU2V0dGluZ05hbWUsICJmYWxzZSIpOwog
Ci0gICAgaWYgKCFtX3Byb2ZpbGVyRW5hYmxlZCkKKyAgICBpZiAoIXByb2ZpbGVyRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2ZpbGVyRW5hYmxlZCA9IGZhbHNlOworICAg
IG1fcHJvZmlsZXJBZ2VudC5jbGVhcigpOwogCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKaW5kZXggOGQ5NjAwNS4uNjcyYTdjMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzMsOSArMzMsNyBAQAogI2luY2x1ZGUgIkNv
b2tpZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KQEAg
LTY1LDYgKzYzLDcgQEAgY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIGNsYXNzIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNs
YXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNz
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CkBAIC03OCw2ICs3Nyw3IEBAIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwog
Y2xhc3MgU2NyaXB0Q2FsbFN0YWNrOworY2xhc3MgU2NyaXB0UHJvZmlsZTsKIGNsYXNzIFNjcmlw
dFN0cmluZzsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN0b3JhZ2U7CkBAIC0yMjgsMjAg
KzIyOCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0
UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsK
ICAgICB2b2lkIGFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxT
Y3JpcHRQcm9maWxlPiwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpOwogICAgIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0
cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KTsKLSAgICB2b2lkIHJlbW92ZVByb2ZpbGUodW5zaWduZWQpOwotICAgIHZvaWQgY2xlYXJQcm9m
aWxlcygpOwotCi0gICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29u
c3QgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsgfQotCi0gICAgU3Ry
aW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9m
aWxlTnVtYmVyKTsKLSAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyhUaW1lcjxJ
bnNwZWN0b3JDb250cm9sbGVyPiogPSAwKTsKKyAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRp
YXRlZFByb2ZpbGUoKSBjb25zdDsKKyAgICBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIgPSBmYWxzZSk7CisgICAgdm9p
ZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICAgICB2b2lkIHN0b3BVc2VySW5pdGlh
dGVkUHJvZmlsaW5nKCk7Ci0gICAgdm9pZCBzdGFydFByb2ZpbGluZygpIHsgc3RhcnRVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCk7IH0KLSAgICB2b2lkIHN0b3BQcm9maWxpbmcoKSB7IHN0b3BVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KLQogICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoYm9vbCBh
bHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVjb21waWxlID0gZmFsc2UpOwogICAgIHZvaWQgZGlz
YWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwotICAgIGJvb2wgcHJvZmlsZXJFbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJFbmFibGVkOyB9Cisg
ICAgYm9vbCBwcm9maWxlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBlbmFibGVkKCkgJiYgbV9w
cm9maWxlckFnZW50OyB9CisgICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudC5nZXQoKTsgfQogCiAgICAgdm9pZCBl
bmFibGVEZWJ1Z2dlcigpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0g
ZmFsc2UpOwpAQCAtMjgzLDE0ICsyNzcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZUZy
b250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQcm9maWxl
PiA+IFByb2ZpbGVzTWFwOwogCi0gICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdT
b29uKCk7CiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CiAgICAgdm9pZCBlbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cyk7Ci0gICAgdm9pZCBnZXRQcm9maWxl
SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFBy
b2ZpbGUodW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVj
dCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVIZWFkZXIo
Y29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmlsZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgdm9pZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwpAQCAtMzgw
LDEyICszNjksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93
bjsKICAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1Z2dlckFnZW50Owog
Ci0gICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKLSAgICBib29sIG1fcmVjb3JkaW5nVXNlcklu
aXRpYXRlZFByb2ZpbGU7Ci0gICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVt
YmVyOwotICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwotICAg
IFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1fc3RhcnRQcm9maWxpbmc7Ci0gICAgUHJvZmls
ZXNNYXAgbV9wcm9maWxlczsKKyAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9w
cm9maWxlckFnZW50OwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlwZWRlZiBI
YXNoTWFwPGludHB0cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vy
c01hcDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1NDE5NAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0wLDAg
KzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmgiCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUg
IkNvbnNvbGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIlNjcmlwdFBy
b2ZpbGUuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKworI2lmIFVTRShKU0MpCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7
CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKKworUGFz
c093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojpj
cmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUmVtb3RlSW5z
cGVjdG9yRnJvbnRlbmQqIHJlbW90ZUZyb250ZW5kKQoreworICAgIE93blB0cjxJbnNwZWN0b3JQ
cm9maWxlckFnZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50
KGluc3BlY3RvckNvbnRyb2xsZXIsIHJlbW90ZUZyb250ZW5kKSk7CisgICAgcmV0dXJuIGFnZW50
LnJlbGVhc2UoKTsKK30KKworSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBSZW1vdGVJ
bnNwZWN0b3JGcm9udGVuZCogcmVtb3RlRnJvbnRlbmQpCisgICAgICAgIDogbV9pbnNwZWN0b3JD
b250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgICwgbV9yZW1vdGVGcm9udGVu
ZChyZW1vdGVGcm9udGVuZCkKKyAgICAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlKGZhbHNlKQorICAgICAgICAsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVy
KC0xKQorICAgICAgICAsIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCit7Cit9
CisKK0luc3BlY3RvclByb2ZpbGVyQWdlbnQ6On5JbnNwZWN0b3JQcm9maWxlckFnZW50KCkKK3sK
K30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRQcm9maWxlKFBhc3NSZWZQdHI8
U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpCit7CisgICAgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBw
cnBQcm9maWxlOworICAgIG1fcHJvZmlsZXMuYWRkKHByb2ZpbGUtPnVpZCgpLCBwcm9maWxlKTsK
KyAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkKKyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRk
UHJvZmlsZUhlYWRlcihjcmVhdGVQcm9maWxlSGVhZGVyKCpwcm9maWxlKSk7CisgICAgYWRkUHJv
ZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShwcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VV
UkwpOworfQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hl
ZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWZQ
dHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7CisKKyAgICBTdHJpbmcgdGl0
bGUgPSBwcm9maWxlLT50aXRsZSgpOworICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3Jt
YXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIyVkXCIgZmluaXNoZWQuIiwgQ1BV
UHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5k
YXRhKCksIHByb2ZpbGUtPnVpZCgpKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmFkZE1l
c3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25z
dCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkKK3sKKyAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwi
d2Via2l0LXByb2ZpbGU6Ly8lcy8lcyMwXCIgc3RhcnRlZC4iLCBDUFVQcm9maWxlVHlwZSwgZW5j
b2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRsZSkudXRmOCgpLmRhdGEoKSk7CisgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwg
TG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmls
ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0aXRsZSIsIHByb2ZpbGUudGl0
bGUoKSk7CisgICAgaGVhZGVyLT5zZXROdW1iZXIoInVpZCIsIHByb2ZpbGUudWlkKCkpOworICAg
IGhlYWRlci0+c2V0U3RyaW5nKCJ0eXBlSWQiLCBTdHJpbmcoQ1BVUHJvZmlsZVR5cGUpKTsKKyAg
ICByZXR1cm4gaGVhZGVyOworfQorCitTdHJpbmcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1i
ZXIpCit7CisgICAgaWYgKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCisgICAgICAgIG1fY3VycmVu
dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVO
dW1iZXIrKzsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMuJWQiLCBVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQoreworICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBw
cm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CisgICAgZm9yIChQcm9maWxlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQor
ICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5z
ZWNvbmQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKHVu
c2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCit7Cisg
ICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7CisgICAg
aWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKKyAgICAgICAgKnByb2ZpbGVPYmplY3QgPSBj
cmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKKyAgICAgICAgKCpwcm9maWxlT2JqZWN0
KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JI
ZWFkKCkpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZW1vdmVQ
cm9maWxlKHVuc2lnbmVkIHVpZCkKK3sKKyAgICBpZiAobV9wcm9maWxlcy5jb250YWlucyh1aWQp
KQorICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworfQorCit2b2lkIEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ6OnJlc2V0U3RhdGUoKQoreworICAgIG1fcHJvZmlsZXMuY2xlYXIoKTsKKyAg
ICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IDE7CisgICAgbV9uZXh0VXNl
ckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOworICAgIGlmIChtX3JlbW90ZUZyb250ZW5kKQor
ICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQor
eworICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUgPSB0cnVlOworICAgIFN0cmlu
ZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUodHJ1ZSk7CisjaWYg
VVNFKEpTQykKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93
KG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKSwgZGVi
dWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworI2Vsc2UKKyAgICBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUgPSAwOworI2VuZGlmCisgICAgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0KHNjcmlwdFN0
YXRlLCB0aXRsZSk7CisgICAgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxl
LCAwLCBTdHJpbmcoKSk7CisgICAgdG9nZ2xlUmVjb3JkQnV0dG9uKHRydWUpOworfQorCit2b2lk
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKK3sK
KyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0gZmFsc2U7CisgICAgU3RyaW5n
IHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSgpOworI2lmIFVTRShK
U0MpCisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCksIGRlYnVnZ2Vy
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyNlbHNlCisgICAgLy8gVXNlIG51bGwgc2NyaXB0IHN0
YXRlIHRvIGF2b2lkIGZpbHRlcmluZyBieSBjb250ZXh0IHNlY3VyaXR5IHRva2VuLgorICAgIC8v
IEFsbCBmdW5jdGlvbnMgZnJvbSBhbGwgaWZyYW1lcyBzaG91bGQgYmUgdmlzaWJsZSBmcm9tIElu
c3BlY3RvciBVSS4KKyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSAwOworI2VuZGlmCisg
ICAgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBTY3JpcHRQcm9maWxlcjo6c3RvcChz
Y3JpcHRTdGF0ZSwgdGl0bGUpOworICAgIGlmIChwcm9maWxlKQorICAgICAgICBhZGRQcm9maWxl
KHByb2ZpbGUsIDAsIFN0cmluZygpKTsKKyAgICB0b2dnbGVSZWNvcmRCdXR0b24oZmFsc2UpOwor
fQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29s
IGlzUHJvZmlsaW5nKQoreworICAgIGlmIChtX3JlbW90ZUZyb250ZW5kKQorICAgICAgICBtX3Jl
bW90ZUZyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlNjU0OQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudF9oCisjZGVmaW5lIEluc3BlY3RvclByb2Zp
bGVyQWdlbnRfaAorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3Rv
ckFycmF5OworY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3Rvck9iamVj
dDsKK2NsYXNzIFNjcmlwdFByb2ZpbGU7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDsK
KworY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gY3Jl
YXRlKEluc3BlY3RvckNvbnRyb2xsZXIqLCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCopOworICAg
IHZpcnR1YWwgfkluc3BlY3RvclByb2ZpbGVyQWdlbnQoKTsKKworICAgIHZvaWQgYWRkUHJvZmls
ZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2b2lkIGFkZFByb2ZpbGVGaW5pc2hl
ZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHZvaWQgYWRkU3RhcnRQcm9m
aWxpbmdNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2b2lkIGNsZWFyUHJvZmlsZXMo
KSB7IHJlc2V0U3RhdGUoKTsgfQorICAgIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlciA9IGZhbHNlKTsKKyAgICB2b2lk
IGdldFByb2ZpbGVIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpOworICAg
IHZvaWQgZ2V0UHJvZmlsZSh1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBw
cm9maWxlT2JqZWN0KTsKKyAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUo
KSB7IHJldHVybiBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOyB9CisgICAgdm9pZCBy
ZW1vdmVQcm9maWxlKHVuc2lnbmVkIHVpZCk7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisgICAg
dm9pZCBzZXRSZW1vdGVGcm9udGVuZChSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
IHsgbV9yZW1vdGVGcm9udGVuZCA9IGZyb250ZW5kOyB9CisgICAgdm9pZCBzdGFydFByb2ZpbGlu
ZygpIHsgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2b2lkIHN0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIHZvaWQgc3RvcFByb2ZpbGluZygpIHsgc3RvcFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQorICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoKTsKKyAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKTsK
KworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKKworICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQo
SW5zcGVjdG9yQ29udHJvbGxlciosIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKik7CisgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0
UHJvZmlsZSYgcHJvZmlsZSk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXI7CisgICAgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqIG1fcmVtb3RlRnJvbnRl
bmQ7CisgICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOworICAgIGludCBt
X2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKKyAgICB1bnNpZ25lZCBtX25leHRV
c2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKKyAgICBQcm9maWxlc01hcCBtX3Byb2ZpbGVzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JQcm9maWxlckFnZW50
X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5l
bC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4
IGU1ODc3ZDkuLjNiNzFkZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlc1BhbmVsLmpzCkBAIC01MTUsNiArNTE1LDkgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwucHJvdG90eXBlID0gewogCiAgICAgX3BvcHVsYXRlUHJvZmlsZXM6IGZ1bmN0aW9uKCkKICAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fcHJvZmlsZXJFbmFibGVkKQorICAgICAgICAgICAgcmV0
dXJuOworCiAgICAgICAgIHZhciBzaWRlYmFyVHJlZUNoaWxkcmVuQ291bnQgPSB0aGlzLnNpZGVi
YXJUcmVlLmNoaWxkcmVuLmxlbmd0aDsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWRl
YmFyVHJlZUNoaWxkcmVuQ291bnQ7ICsraSkgewogICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50
ID0gdGhpcy5zaWRlYmFyVHJlZS5jaGlsZHJlbltpXTsK
</data>
<flag name="review"
          id="53499"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65086</attachid>
            <date>2010-08-23 01:23:25 -0700</date>
            <delta_ts>2010-08-23 01:24:59 -0700</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>44174-patch</filename>
            <type>application/octet-stream</type>
            <size>42204</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGViNDJjNWMuLjIwOWY2YjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3NSw2ICsxMDc1LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZTNlYzM5ZC4uODEyNGQyNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAx
MC0wOC0yMyAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIEV4dHJhY3QgcHJvZmlsZXItcmVsYXRlZCBjb2RlIGFuZCBkYXRhIGZyb20gSW5zcGVjdG9y
Q29udHJvbGxlciBpbnRvCisgICAgICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTc0CisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2Vi
Q29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2Zp
bGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJs
ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0
RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29u
bmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBv
cHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5p
dGlhdGVkUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJBZ2VudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6On5JbnNwZWN0b3JQcm9maWxl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmFkZFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkUHJv
ZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlUHJvZmlsZUhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpkaXNhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmVuYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRDdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6OmdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNvcmRCdXR0
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y2xlYXJQcm9maWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjplbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmlzUmVjb3JkaW5nVXNl
ckluaXRpYXRlZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6c2V0UmVtb3RlRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6c3RvcFByb2ZpbGluZyk6CisKIDIwMTAtMDgtMjMgIEFyaXlhIEhpZGF5
YXQgIDxhcml5YUBzZW5jaGEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZjFlYzQ0NS4uODRjNmZmMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0x
NjI4LDYgKzE2MjgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
Y3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3Rv
cmFnZUFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAyNDljM2Y3Li5lYWNmNDcxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEx
ODksMTAgKzExODksMTIgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9w
VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0
YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
NWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudEVOM1dURjEw
UGFzc093blB0cklOU18yM0luc3BlY3RvckZyb250ZW5kQ2xpZW50RUVFCitfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI3c3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nRVBOU181VGltZXJJUzBfRUUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVF
dgorX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2VySW5p
dGlhdGVkUHJvZmlsZUV2CitfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9m
aWxlckVuYWJsZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgog
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNWNsb3NlRXYKIF9fWk43V2ViQ29yZTE5
SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNwZWN0RVBOU180Tm9kZUUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjQ3MzhhNS4uOGFk
NDUwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTE3NzAsNiArMTc3MCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDEzYWEwNzMuLjgwMzQ4ZGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtNzYyLDYgKzc2Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JT
dG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAgXApAQCAtMTUzMiw2ICsxNTMzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBc
CisgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3NDg2MDMzLi4zZWE0YjVmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUxODczLDYgKzUxODczLDE0IEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvclJlc291cmNlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgwNTlhYTIuLjVk
ZjQ5NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
NzQ1LDYgKzI3NDUsOCBAQAogCQk5N0VGNTYxMDExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTdFRjU2MEUxMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cCAqLzsgfTsKIAkJOTdFRjU2MTExMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0VG
NTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCAqLzsgfTsKIAkJ
OTdFRjdERkUxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1
QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi87IH07CisJCTlGMEQ2QjJF
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJDMTIxQkZFQkEwMDZD
MDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKKwkJOUYwRDZCMkYxMjFC
RkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAv
KiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi87IH07CiAJCTlGNkZDMTk2MTEyMkU4MkEwMEU4
MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5RjZGQzE5NDExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwICovOyB9OwogCQk5RjZGQzE5NzExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0
RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlGNzIzMDRGMTEx
ODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjcyMzA0QzExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NjA1LDYgKzg2MDcsOCBAQAogCQk5N0VGNTYwRTExRTQwNzgzMDA3RTAyNkYgLyogSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbnN0cnVjdGlvblNpdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNj
cmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGMEQ2QjJEMTIxQkZFQkEw
MDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUY2RkMxOTQxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdERlYnVnU2Vy
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMxOTUxMTIyRTgyQTAw
RTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdERlYnVnU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlGNzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTExNzk5LDYgKzExODAzLDggQEAKIAkJCQk3QTBFNzcwQjEwQzAwQTg4MDBB
MDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywKIAkJCQk3QTBFNzcwQzEwQzAw
QTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggKi8sCiAJCQkJN0EwRTc3MEQx
MEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgKi8sCisJCQkJOUYw
RDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovLAor
CQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50Lmgg
Ki8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNw
cCAqLywKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2Uu
aCAqLywKIAkJCQk3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yU3RvcmFnZUFn
ZW50LmNwcCAqLywKQEAgLTIwMzQ3LDYgKzIwMzUzLDcgQEAKIAkJCQkyRUYxQkZGOTEyMUNCMENF
MDBDMjc2MjcgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODlDMERE
N0IxMjFGMEM2OTAwOUUxN0NBIC8qIEZpbGVTeXN0ZW1DYWxsYmFja3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNw
ZWN0b3JQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyODAwLDYgKzIyODA3LDcg
QEAKIAkJCQk0NkEyNjkwNTEyMUI2QjQzMDBDNDFGM0EgLyogRmlsZVdyaXRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4OUMwREQ3QTEyMUYwQzY5MDA5RTE3Q0EgLyogRmlsZVN5c3RlbUNhbGxi
YWNrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyog
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlGMEQ2QjJF
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCBmMzcyYzNjLi42
MmFlOWJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtNDYsNiAr
NDYsMTEgQEAgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBTY3JpcHRQcm9maWxlcjo6c3RvcChT
Y3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gU2NyaXB0UHJvZmls
ZTo6Y3JlYXRlKHByb2ZpbGUpOwogfQogCitib29sIFNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVy
QWx3YXlzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaAppbmRleCA0ZmEzMzFjLi4xODBjNDlmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0YXRlKiBzdGF0
ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIHZvaWQgdGFrZUhlYXBTbmFwc2hv
dCgpIHsgfQogICAgIHN0YXRpYyBsb25nIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZywgU3RyaW5n
KikgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFibGVk
KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
UHJvZmlsZXIuY3BwCmluZGV4IDkyMTM3NzQuLjBkZTRhMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuY3BwCkBAIC02OSw0ICs2OSw5IEBAIGxvbmcgU2NyaXB0UHJvZmlsZXI6
OmdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBwb3NpdGlvbiwgU3RyaW5nKiBkYXRhKQogICAgIHJl
dHVybiBwb3NpdGlvbjsKIH0KIAorYm9vbCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5
c0VuYWJsZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggNWMxMDU0Yi4uYjFhYjNi
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtNDUsNiArNDUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gc3RvcChTY3JpcHRT
dGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHRha2VI
ZWFwU25hcHNob3QoKTsKICAgICBzdGF0aWMgbG9uZyBnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcg
cG9zaXRpb24sIFN0cmluZyogZGF0YSk7CisgICAgc3RhdGljIGJvb2wgaXNQcm9maWxlckFsd2F5
c0VuYWJsZWQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IGNkOTA1MmEuLmU2NDdjOTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMzgsNiAr
MzgsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKICAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLAogICAgICJoYW5kbGVy
QWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCgpIiwKIH07CiskdHlwZVRyYW5zZm9ybXsiUHJvZmlsZXIifSA9IHsKKyAgICAiZm9yd2FyZCIg
PT4gIkluc3BlY3RvclByb2ZpbGVyQWdlbnQiLAorICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgiLAorICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPnByb2ZpbGVyQWdlbnQoKSIsCit9OwogJHR5cGVUcmFuc2Zvcm17IkZyb250ZW5k
In0gPSB7CiAgICAgImZvcndhcmQiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCIsCiAgICAg
ImhlYWRlciIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kLmgiLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKaW5kZXggOTJmZjM3Yi4uMzkyZDFkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBA
IC0xNDUsMTQgKzE0NSwxNCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPUNvbnRy
b2xsZXJdIHZvaWQgZW5hYmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogICAgICAgICBb
aGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29sZWFuIGFsd2F5
cyk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzdGFydFByb2ZpbGluZygp
OwotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHN0b3BQcm9maWxpbmcoKTsKKyAg
ICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsKKyAgICAgICAg
W2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCi0gICAgICAgIFtoYW5k
bGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoaW4gbG9uZyBjYWxsSWQsIG91
dCBBcnJheSBoZWFkZXJzKTsKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBnZXRQ
cm9maWxlKGluIGxvbmcgY2FsbElkLCBpbiB1bnNpZ25lZCBsb25nIHVpZCwgb3V0IE9iamVjdCBw
cm9maWxlKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZUhlYWRl
cnMoaW4gbG9uZyBjYWxsSWQsIG91dCBBcnJheSBoZWFkZXJzKTsKKyAgICAgICAgW2hhbmRsZXI9
UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZShpbiBsb25nIGNhbGxJZCwgaW4gdW5zaWduZWQgbG9u
ZyB1aWQsIG91dCBPYmplY3QgcHJvZmlsZSk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxl
cl0gdm9pZCByZW1vdmVQcm9maWxlKGluIHVuc2lnbmVkIGxvbmcgdWlkKTsKLSAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CisgICAgICAgIFtoYW5kbGVy
PVByb2ZpbGVyXSB2b2lkIHJlbW92ZVByb2ZpbGUoaW4gdW5zaWduZWQgbG9uZyB1aWQpOworICAg
ICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CiAKICAgICAgICAg
W2hhbmRsZXI9QmFja2VuZF0gdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7CiAgICAgICAgIFtoYW5k
bGVyPUJhY2tlbmRdIHZvaWQgZ2V0UHJvZmlsZXJMb2dMaW5lcyhpbiBsb25nIGNhbGxJZCwgaW4g
bG9uZyBpblBvc2l0aW9uLCBvdXQgbG9uZyBvdXRQb3NpdGlvbiwgb3V0IFN0cmluZyBsb2cpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhYzY3MGNiLi44
OWM5MTMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAt
NjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFn
ZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMTE1LDgg
KzExNiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcu
d2Via2l0LnByb2ZpbGVzLnVzZXItaW5pdGlhdGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBDUFVQcm9maWxlVHlwZSA9ICJDUFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291
cmNlVHJhY2tpbmdFbmFibGVkU2V0dGluZ05hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQi
Owogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlYnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1lID0g
ImRlYnVnZ2VyRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJFbmFi
bGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKQEAgLTE3MCwxMSArMTY5LDcgQEAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVk
U2NyaXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fcHJvZmls
ZXJFbmFibGVkKCFXVEZfVVNFX0pTQykKLSAgICAsIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigt
MSkKLSAgICAsIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCi0gICAgLCBtX3N0
YXJ0UHJvZmlsaW5nKHRoaXMsICZJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcpCisgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CiAgICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsK
QEAgLTUwNCw4ICs0OTksMTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJv
bnRlbmQoKQogICAgICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dl
ckVuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRy
dWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1
Z2dlcigpOwotICAgICAgICBTdHJpbmcgcHJvZmlsZXJFbmFibGVkID0gc2V0dGluZyhwcm9maWxl
ckVuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChwcm9maWxlckVuYWJsZWQgPT0gInRy
dWUiKQorICAgIH0KKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldFJlbW90ZUZyb250ZW5kKG1fcmVt
b3RlRnJvbnRlbmQuZ2V0KCkpOworICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJB
bHdheXNFbmFibGVkKCkpIHsKKyAgICAgICAgU3RyaW5nIHByb2ZpbGVyRW5hYmxlZFNldHRpbmcg
PSBzZXR0aW5nKHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lKTsKKyAgICAgICAgaWYgKHByb2Zp
bGVyRW5hYmxlZFNldHRpbmcgPT0gInRydWUiKQogICAgICAgICAgICAgZW5hYmxlUHJvZmlsZXIo
KTsKICAgICB9CiAjZW5kaWYKQEAgLTU5NCw3ICs1OTIsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxp
bmcoKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldFJlbW90ZUZyb250ZW5kKDApOworICAgIG1f
cHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICNlbmRpZgogCiAg
ICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKQEAgLTYzOCw3ICs2MzcsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgICAg
IG1fcmVtb3RlRnJvbnRlbmQtPm1vbml0b3JpbmdYSFJXYXNFbmFibGVkKCk7CiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9wcm9maWxlckVuYWJsZWQpCisgICAg
aWYgKG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICBtX3JlbW90ZUZyb250ZW5k
LT5wcm9maWxlcldhc0VuYWJsZWQoKTsKICNlbmRpZgogCkBAIC03NDUsMTEgKzc0NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9u
KCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykK
LSAgICAgICAgbV9wcm9maWxlcy5jbGVhcigpOwotICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU51bWJlciA9IDE7Ci0gICAgICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxl
TnVtYmVyID0gMTsKLSAgICAgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgICAgICBt
X3JlbW90ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKKyAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5yZXNldFN0YXRlKCk7CiAjZW5kaWYKICAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3Vy
Y2VzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQogICAg
ICAgICAvLyByZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8g
dW5iaW5kIHRoZW0uCkBAIC0xNDU4LDE3NiArMTQ1Myw2MSBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1
bnNpZwogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQ
dHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Ci0gICAgbV9wcm9maWxlcy5h
ZGQocHJvZmlsZS0+dWlkKCksIHByb2ZpbGUpOwotCi0gICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQp
IHsKLSAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJvZmlsZUhlYWRlcihjcmVhdGVQcm9m
aWxlSGVhZGVyKCpwcm9maWxlKSk7Ci0gICAgfQotCi0gICAgYWRkUHJvZmlsZUZpbmlzaGVkTWVz
c2FnZVRvQ29uc29sZShwcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIG1fcHJv
ZmlsZXJBZ2VudC0+YWRkUHJvZmlsZShwcnBQcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3Nh
Z2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Ci0KLSAgICBTdHJpbmcgdGl0bGUgPSBw
cm9maWxlLT50aXRsZSgpOwotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlBy
b2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIyVkXCIgZmluaXNoZWQuIiwgQ1BVUHJvZmls
ZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCks
IHByb2ZpbGUtPnVpZCgpKTsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPmFkZFByb2ZpbGVGaW5pc2hlZE1lc3Nh
Z2VUb0NvbnNvbGUocHJwUHJvZmlsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUo
Y29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpCiB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmls
ZSBcIndlYmtpdC1wcm9maWxlOi8vJXMvJXMjMFwiIHN0YXJ0ZWQuIiwgQ1BVUHJvZmlsZVR5cGUs
IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCkpOwotICAg
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9n
TWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotfQotCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZVByb2ZpbGUodW5zaWduZWQgdWlkKQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wcm9maWxlcy5j
b250YWlucyh1aWQpKQotICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOwotfQotCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyUHJvZmlsZXMoKQotewotICAgIGlmICghZW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7Ci0gICAgbV9j
dXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwotICAgIG1fbmV4dFVzZXJJbml0
aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPmFkZFN0YXJ0UHJv
ZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBoZWFkZXJzKQotewotICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9m
aWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAg
ICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNv
bmQpKTsKLX0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKHVuc2lnbmVk
IHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCitib29sIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdAog
ewotICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwot
ICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgICpwcm9maWxlT2JqZWN0
ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICgqcHJvZmlsZU9i
amVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9ySGVhZCgpKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUm
IHByb2ZpbGUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBoZWFkZXItPnNldFN0cmluZygidGl0bGUiLCBwcm9m
aWxlLnRpdGxlKCkpOwotICAgIGhlYWRlci0+c2V0TnVtYmVyKCJ1aWQiLCBwcm9maWxlLnVpZCgp
KTsKLSAgICBoZWFkZXItPnNldFN0cmluZygidHlwZUlkIiwgU3RyaW5nKENQVVByb2ZpbGVUeXBl
KSk7Ci0gICAgcmV0dXJuIGhlYWRlcjsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6
OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxl
TnVtYmVyID0gZmFsc2UpCi17Ci0gICAgaWYgKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCi0gICAg
ICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gbV9uZXh0VXNlckluaXRp
YXRlZFByb2ZpbGVOdW1iZXIrKzsKLQotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMuJWQi
LCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxl
TnVtYmVyKTsKKyAgICByZXR1cm4gbV9wcm9maWxlckFnZW50LT5pc1JlY29yZGluZ1VzZXJJbml0
aWF0ZWRQcm9maWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nU29vbigpCitTdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1i
ZXIpCiB7Ci0gICAgbV9zdGFydFByb2ZpbGluZy5zdGFydE9uZVNob3QoMCk7CisgICAgcmV0dXJu
IG1fcHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShpbmNy
ZW1lbnRQcm9maWxlTnVtYmVyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxlcj4qKQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogewog
ICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXByb2ZpbGVy
RW5hYmxlZCgpKSB7Ci0gICAgICAgIGVuYWJsZVByb2ZpbGVyKGZhbHNlLCB0cnVlKTsKLSAgICAg
ICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7
Ci0gICAgfQotCi0gICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IHRydWU7Ci0K
LSAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKHRy
dWUpOwotCi0jaWYgVVNFKEpTQykKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0
b0pTRE9NV2luZG93KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSNlbHNlCi0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0g
MDsKLSNlbmRpZgotICAgIFNjcmlwdFByb2ZpbGVyOjpzdGFydChzY3JpcHRTdGF0ZSwgdGl0bGUp
OwotCi0gICAgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxlLCAwLCBTdHJp
bmcoKSk7Ci0KLSAgICB0b2dnbGVSZWNvcmRCdXR0b24odHJ1ZSk7CisgICAgbV9wcm9maWxlckFn
ZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCiB7CiAgICAgaWYgKCFlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUgPSBmYWxzZTsKLQotICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUoKTsKLQotI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNj
cmlwdFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBk
ZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0jZWxzZQotICAgIC8vIFVzZSBudWxsIHNj
cmlwdCBzdGF0ZSB0byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0b2tlbi4K
LSAgICAvLyBBbGwgZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZpc2libGUg
ZnJvbSBJbnNwZWN0b3IgVUkuCi0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKLSNl
bmRpZgotICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJvZmlsZXI6
OnN0b3Aoc2NyaXB0U3RhdGUsIHRpdGxlKTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgYWRk
UHJvZmlsZShwcm9maWxlLCAwLCBTdHJpbmcoKSk7Ci0KLSAgICB0b2dnbGVSZWNvcmRCdXR0b24o
ZmFsc2UpOworICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRCdXR0b24oYm9v
bCBpc1Byb2ZpbGluZykKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVk
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3JlbW90ZUZyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsK
KyAgICByZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpOwogfQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBi
b29sIHNraXBSZWNvbXBpbGUpCiB7CiAgICAgaWYgKGFsd2F5cykKICAgICAgICAgc2V0U2V0dGlu
Zyhwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKLQotICAgIGlmIChtX3Byb2Zp
bGVyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSB0
cnVlOwotCi0gICAgaWYgKCFza2lwUmVjb21waWxlKQotICAgICAgICBTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7Ci0KLSAgICBpZiAobV9y
ZW1vdGVGcm9udGVuZCkKLSAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cHJvZmlsZXJXYXNFbmFi
bGVkKCk7CisgICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUoc2tpcFJlY29tcGlsZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQog
ewogICAgIGlmIChhbHdheXMpCiAgICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJFbmFibGVkU2V0
dGluZ05hbWUsICJmYWxzZSIpOwotCi0gICAgaWYgKCFtX3Byb2ZpbGVyRW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKLQotICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKLQot
ICAgIGlmIChtX3JlbW90ZUZyb250ZW5kKQotICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5wcm9m
aWxlcldhc0Rpc2FibGVkKCk7CisgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDhkOTYw
MDUuLjRmZTY3Y2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAg
LTMzLDkgKzMzLDcgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JE
T01BZ2VudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0
UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC02NSw2ICs2Myw3IEBAIGNsYXNzIEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwpAQCAt
NzgsNiArNzcsNyBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKK2NsYXNz
IFNjcmlwdFByb2ZpbGU7CiBjbGFzcyBTY3JpcHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiBjbGFzcyBTdG9yYWdlOwpAQCAtMjI4LDIwICsyMjgsMTQgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdm9pZCBhZGRQcm9maWxlRmluaXNoZWRN
ZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIGFkZFN0YXJ0UHJvZmls
aW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgdm9pZCByZW1vdmVQcm9maWxlKHVu
c2lnbmVkKTsKLSAgICB2b2lkIGNsZWFyUHJvZmlsZXMoKTsKLQotICAgIGJvb2wgaXNSZWNvcmRp
bmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkaW5nVXNlcklu
aXRpYXRlZFByb2ZpbGU7IH0KLQotICAgIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7Ci0gICAgdm9pZCBzdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxlcj4qID0gMCk7Cisg
ICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3Q7CisgICAgU3Ry
aW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9m
aWxlTnVtYmVyID0gZmFsc2UpOworICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7CiAgICAgdm9pZCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIHZvaWQgc3Rh
cnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0gICAgdm9p
ZCBzdG9wUHJvZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0KICAg
ICB2b2lkIGVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UsIGJvb2wgc2tpcFJlY29t
cGlsZSA9IGZhbHNlKTsKICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZh
bHNlKTsKLSAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGVuYWJsZWQo
KSAmJiBtX3Byb2ZpbGVyRW5hYmxlZDsgfQorICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29u
c3Q7CisgICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvZmlsZXJBZ2VudC5nZXQoKTsgfQogCiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dl
cigpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwpAQCAt
MjgzLDE0ICsyNzcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRp
bWVBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHR5cGVk
ZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVz
TWFwOwogCi0gICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdTb29uKCk7CiAgICAg
dm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZy
b21Gcm9udGVuZChib29sIGFsd2F5cyk7Ci0gICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFByb2ZpbGUodW5zaWdu
ZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7Ci0gICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0
UHJvZmlsZSYgcHJvZmlsZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9p
ZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwpAQCAtMzgwLDEyICszNjksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKICAgICBPd25Q
dHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1Z2dlckFnZW50OwogCi0gICAgYm9vbCBt
X3Byb2ZpbGVyRW5hYmxlZDsKLSAgICBib29sIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2Zp
bGU7Ci0gICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwotICAgIHVu
c2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwotICAgIFRpbWVyPEluc3Bl
Y3RvckNvbnRyb2xsZXI+IG1fc3RhcnRQcm9maWxpbmc7Ci0gICAgUHJvZmlsZXNNYXAgbV9wcm9m
aWxlczsKKyAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9wcm9maWxlckFnZW50
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlwZWRlZiBIYXNoTWFwPGludHB0
cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vyc01hcDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlYzcyMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0wLDAgKzEsMjEwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCisK
KyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJS
ZW1vdGVJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgi
CisjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgorI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEpTQykKKyNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2Zp
bGVzLnVzZXItaW5pdGlhdGVkIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDUFVQcm9maWxl
VHlwZSA9ICJDUFUiOworCitQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyKQoreworICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBhZ2VudCA9
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIp
KTsKKyAgICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOworfQorCitJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNv
bnRyb2xsZXIpCisgICAgICAgICwgbV9yZW1vdGVGcm9udGVuZCgwKQorICAgICAgICAsIG1fZW5h
YmxlZChTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKSkKKyAgICAgICAg
LCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQorICAgICAgICAsIG1fY3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKC0xKQorICAgICAgICAsIG1fbmV4dFVzZXJJ
bml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCit7Cit9CisKK0luc3BlY3RvclByb2ZpbGVyQWdlbnQ6
On5JbnNwZWN0b3JQcm9maWxlckFnZW50KCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjphZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgUmVm
UHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBwcnBQcm9maWxlOworICAgIG1fcHJvZmlsZXMu
YWRkKHByb2ZpbGUtPnVpZCgpLCBwcm9maWxlKTsKKyAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkK
KyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJvZmlsZUhlYWRlcihjcmVhdGVQcm9maWxl
SGVhZGVyKCpwcm9maWxlKSk7CisgICAgYWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29s
ZShwcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0
cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9
IHBycFByb2ZpbGU7CisgICAgU3RyaW5nIHRpdGxlID0gcHJvZmlsZS0+dGl0bGUoKTsKKyAgICBT
dHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwid2Via2l0LXByb2ZpbGU6
Ly8lcy8lcyMlZFwiIGZpbmlzaGVkLiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNj
YXBlU2VxdWVuY2VzKHRpdGxlKS51dGY4KCkuZGF0YSgpLCBwcm9maWxlLT51aWQoKSk7CisgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFBy
b2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgU3RyaW5nIG1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiUHJvZmlsZSBcIndlYmtpdC1wcm9maWxlOi8vJXMvJXMjMFwiIHN0
YXJ0ZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0
bGUpLnV0ZjgoKS5kYXRhKCkpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+YWRkTWVzc2Fn
ZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2
ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVy
KGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gaGVhZGVyID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBoZWFkZXItPnNl
dFN0cmluZygidGl0bGUiLCBwcm9maWxlLnRpdGxlKCkpOworICAgIGhlYWRlci0+c2V0TnVtYmVy
KCJ1aWQiLCBwcm9maWxlLnVpZCgpKTsKKyAgICBoZWFkZXItPnNldFN0cmluZygidHlwZUlkIiwg
U3RyaW5nKENQVVByb2ZpbGVUeXBlKSk7CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwordm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpkaXNhYmxlKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fZW5hYmxlZCA9IGZhbHNlOworICAgIFNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKKyAgICBpZiAo
bV9yZW1vdGVGcm9udGVuZCkKKyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cHJvZmlsZXJXYXNE
aXNhYmxlZCgpOworfQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmVuYWJsZShib29s
IHNraXBSZWNvbXBpbGUpCit7CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZW5hYmxlZCA9IHRydWU7CisgICAgaWYgKCFza2lwUmVjb21waWxlKQorICAgICAgICBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7
CisgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCisgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPnBy
b2ZpbGVyV2FzRW5hYmxlZCgpOworfQorCitTdHJpbmcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVO
dW1iZXIpCit7CisgICAgaWYgKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCisgICAgICAgIG1fY3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gbV9uZXh0VXNlckluaXRpYXRlZFByb2Zp
bGVOdW1iZXIrKzsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMuJWQiLCBVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKTsK
K30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQoreworICAgIFByb2ZpbGVzTWFwOjppdGVyYXRv
ciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CisgICAgZm9yIChQcm9maWxlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0
KQorICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0
LT5zZWNvbmQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxl
KHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCit7
CisgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7Cisg
ICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKKyAgICAgICAgKnByb2ZpbGVPYmplY3Qg
PSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKKyAgICAgICAgKCpwcm9maWxlT2Jq
ZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JIZWFkKCkpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZW1v
dmVQcm9maWxlKHVuc2lnbmVkIHVpZCkKK3sKKyAgICBpZiAobV9wcm9maWxlcy5jb250YWlucyh1
aWQpKQorICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworfQorCit2b2lkIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OnJlc2V0U3RhdGUoKQoreworICAgIG1fcHJvZmlsZXMuY2xlYXIoKTsK
KyAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IDE7CisgICAgbV9uZXh0
VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOworICAgIGlmIChtX3JlbW90ZUZyb250ZW5k
KQorICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KQoreworICAgIGlmICghZW5hYmxlZCgpKSB7CisgICAgICAgIGVuYWJsZShmYWxzZSk7CisgICAg
ICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygp
OworICAgIH0KKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0gdHJ1ZTsKKyAg
ICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKHRydWUp
OworI2lmIFVTRShKU0MpCisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RP
TVdpbmRvdyhtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1l
KCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyNlbHNlCisgICAgU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlID0gMDsKKyNlbmRpZgorICAgIFNjcmlwdFByb2ZpbGVyOjpzdGFydChz
Y3JpcHRTdGF0ZSwgdGl0bGUpOworICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29s
ZSh0aXRsZSwgMCwgU3RyaW5nKCkpOworICAgIHRvZ2dsZVJlY29yZEJ1dHRvbih0cnVlKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpCit7CisgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IGZhbHNlOworICAg
IFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoKTsKKyNp
ZiBVU0UoSlNDKQorICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5k
b3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLCBk
ZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisjZWxzZQorICAgIC8vIFVzZSBudWxsIHNj
cmlwdCBzdGF0ZSB0byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0b2tlbi4K
KyAgICAvLyBBbGwgZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZpc2libGUg
ZnJvbSBJbnNwZWN0b3IgVUkuCisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKKyNl
bmRpZgorICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJvZmlsZXI6
OnN0b3Aoc2NyaXB0U3RhdGUsIHRpdGxlKTsKKyAgICBpZiAocHJvZmlsZSkKKyAgICAgICAgYWRk
UHJvZmlsZShwcm9maWxlLCAwLCBTdHJpbmcoKSk7CisgICAgdG9nZ2xlUmVjb3JkQnV0dG9uKGZh
bHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNvcmRCdXR0
b24oYm9vbCBpc1Byb2ZpbGluZykKK3sKKyAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkKKyAgICAg
ICAgbV9yZW1vdGVGcm9udGVuZC0+c2V0UmVjb3JkaW5nUHJvZmlsZShpc1Byb2ZpbGluZyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODM3N2UKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEluc3BlY3RvclByb2ZpbGVyQWdlbnRfaAorI2RlZmluZSBJbnNwZWN0
b3JQcm9maWxlckFnZW50X2gKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0
b3JPYmplY3Q7CitjbGFzcyBTY3JpcHRQcm9maWxlOworY2xhc3MgUmVtb3RlSW5zcGVjdG9yRnJv
bnRlbmQ7CisKK2NsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQgOiBwdWJsaWMgTm9uY29weWFi
bGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdl
bnQ+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB+SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCgpOworCisgICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0
UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpOworICAgIHZvaWQgYWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQ
YXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7CisgICAgdm9pZCBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNv
bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpOworICAgIHZvaWQgY2xlYXJQcm9maWxlcygpIHsgcmVzZXRTdGF0ZSgpOyB9
CisgICAgdm9pZCBkaXNhYmxlKCk7CisgICAgdm9pZCBlbmFibGUoYm9vbCBza2lwUmVjb21waWxl
KTsKKyAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KKyAgICBTdHJpbmcg
Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVO
dW1iZXIgPSBmYWxzZSk7CisgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBoZWFkZXJzKTsKKyAgICB2b2lkIGdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgYm9vbCBpc1JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZTsgfQorICAgIHZvaWQgcmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpOworICAg
IHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgc2V0UmVtb3RlRnJvbnRlbmQoUmVtb3RlSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKSB7IG1fcmVtb3RlRnJvbnRlbmQgPSBmcm9udGVuZDsg
fQorICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpOyB9CisgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lk
IHN0b3BQcm9maWxpbmcoKSB7IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2
b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRC
dXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFw
PHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CisKKyAg
ICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKyAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRQ
cm9maWxlJiBwcm9maWxlKTsKKworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9y
Q29udHJvbGxlcjsKKyAgICBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogbV9yZW1vdGVGcm9udGVu
ZDsKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBib29sIG1fcmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGU7CisgICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwor
ICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOworICAgIFByb2Zp
bGVzTWFwIG1fcHJvZmlsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvclByb2ZpbGVyQWdlbnRfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65087</attachid>
            <date>2010-08-23 01:24:59 -0700</date>
            <delta_ts>2010-08-23 01:49:07 -0700</delta_ts>
            <desc>Comments addressed (forgot to mark the previous attachment as a patch.)</desc>
            <filename>44174-patch</filename>
            <type>text/plain</type>
            <size>42204</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGViNDJjNWMuLjIwOWY2YjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3NSw2ICsxMDc1LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZTNlYzM5ZC4uODEyNGQyNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAx
MC0wOC0yMyAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIEV4dHJhY3QgcHJvZmlsZXItcmVsYXRlZCBjb2RlIGFuZCBkYXRhIGZyb20gSW5zcGVjdG9y
Q29udHJvbGxlciBpbnRvCisgICAgICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTc0CisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2Vi
Q29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2Zp
bGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJs
ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0
RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29u
bmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBv
cHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5p
dGlhdGVkUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJBZ2VudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6On5JbnNwZWN0b3JQcm9maWxl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmFkZFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkUHJv
ZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlUHJvZmlsZUhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpkaXNhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmVuYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRDdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6OmdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNvcmRCdXR0
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y2xlYXJQcm9maWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjplbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmlzUmVjb3JkaW5nVXNl
ckluaXRpYXRlZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6c2V0UmVtb3RlRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6c3RvcFByb2ZpbGluZyk6CisKIDIwMTAtMDgtMjMgIEFyaXlhIEhpZGF5
YXQgIDxhcml5YUBzZW5jaGEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZjFlYzQ0NS4uODRjNmZmMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0x
NjI4LDYgKzE2MjgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
Y3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3Rv
cmFnZUFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAyNDljM2Y3Li5lYWNmNDcxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEx
ODksMTAgKzExODksMTIgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9w
VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0
YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
NWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudEVOM1dURjEw
UGFzc093blB0cklOU18yM0luc3BlY3RvckZyb250ZW5kQ2xpZW50RUVFCitfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI3c3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nRVBOU181VGltZXJJUzBfRUUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVF
dgorX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2VySW5p
dGlhdGVkUHJvZmlsZUV2CitfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9m
aWxlckVuYWJsZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgog
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNWNsb3NlRXYKIF9fWk43V2ViQ29yZTE5
SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNwZWN0RVBOU180Tm9kZUUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjQ3MzhhNS4uOGFk
NDUwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTE3NzAsNiArMTc3MCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDEzYWEwNzMuLjgwMzQ4ZGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtNzYyLDYgKzc2Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JT
dG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAgXApAQCAtMTUzMiw2ICsxNTMzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBc
CisgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3NDg2MDMzLi4zZWE0YjVmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUxODczLDYgKzUxODczLDE0IEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvclJlc291cmNlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgwNTlhYTIuLjVk
ZjQ5NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
NzQ1LDYgKzI3NDUsOCBAQAogCQk5N0VGNTYxMDExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTdFRjU2MEUxMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cCAqLzsgfTsKIAkJOTdFRjU2MTExMUU0MDc4MzAwN0UwMjZGIC8qIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0VG
NTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCAqLzsgfTsKIAkJ
OTdFRjdERkUxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1
QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi87IH07CisJCTlGMEQ2QjJF
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJDMTIxQkZFQkEwMDZD
MDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKKwkJOUYwRDZCMkYxMjFC
RkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAv
KiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi87IH07CiAJCTlGNkZDMTk2MTEyMkU4MkEwMEU4
MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5RjZGQzE5NDExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwICovOyB9OwogCQk5RjZGQzE5NzExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0
RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlGNzIzMDRGMTEx
ODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjcyMzA0QzExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NjA1LDYgKzg2MDcsOCBAQAogCQk5N0VGNTYwRTExRTQwNzgzMDA3RTAyNkYgLyogSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5N0VGNTYwRjExRTQwNzgzMDA3RTAyNkYgLyogSFRNTENvbnN0cnVjdGlvblNpdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbnN0cnVjdGlvblNpdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNj
cmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGMEQ2QjJEMTIxQkZFQkEw
MDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUY2RkMxOTQxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdERlYnVnU2Vy
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY2RkMxOTUxMTIyRTgyQTAw
RTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdERlYnVnU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlGNzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTExNzk5LDYgKzExODAzLDggQEAKIAkJCQk3QTBFNzcwQjEwQzAwQTg4MDBB
MDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywKIAkJCQk3QTBFNzcwQzEwQzAw
QTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggKi8sCiAJCQkJN0EwRTc3MEQx
MEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgKi8sCisJCQkJOUYw
RDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovLAor
CQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50Lmgg
Ki8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNw
cCAqLywKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2Uu
aCAqLywKIAkJCQk3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yU3RvcmFnZUFn
ZW50LmNwcCAqLywKQEAgLTIwMzQ3LDYgKzIwMzUzLDcgQEAKIAkJCQkyRUYxQkZGOTEyMUNCMENF
MDBDMjc2MjcgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODlDMERE
N0IxMjFGMEM2OTAwOUUxN0NBIC8qIEZpbGVTeXN0ZW1DYWxsYmFja3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNw
ZWN0b3JQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyODAwLDYgKzIyODA3LDcg
QEAKIAkJCQk0NkEyNjkwNTEyMUI2QjQzMDBDNDFGM0EgLyogRmlsZVdyaXRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4OUMwREQ3QTEyMUYwQzY5MDA5RTE3Q0EgLyogRmlsZVN5c3RlbUNhbGxi
YWNrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyog
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlGMEQ2QjJF
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCBmMzcyYzNjLi42
MmFlOWJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtNDYsNiAr
NDYsMTEgQEAgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBTY3JpcHRQcm9maWxlcjo6c3RvcChT
Y3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gU2NyaXB0UHJvZmls
ZTo6Y3JlYXRlKHByb2ZpbGUpOwogfQogCitib29sIFNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVy
QWx3YXlzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaAppbmRleCA0ZmEzMzFjLi4xODBjNDlmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0YXRlKiBzdGF0
ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIHZvaWQgdGFrZUhlYXBTbmFwc2hv
dCgpIHsgfQogICAgIHN0YXRpYyBsb25nIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZywgU3RyaW5n
KikgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFibGVk
KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
UHJvZmlsZXIuY3BwCmluZGV4IDkyMTM3NzQuLjBkZTRhMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuY3BwCkBAIC02OSw0ICs2OSw5IEBAIGxvbmcgU2NyaXB0UHJvZmlsZXI6
OmdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBwb3NpdGlvbiwgU3RyaW5nKiBkYXRhKQogICAgIHJl
dHVybiBwb3NpdGlvbjsKIH0KIAorYm9vbCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5
c0VuYWJsZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggNWMxMDU0Yi4uYjFhYjNi
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtNDUsNiArNDUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gc3RvcChTY3JpcHRT
dGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHRha2VI
ZWFwU25hcHNob3QoKTsKICAgICBzdGF0aWMgbG9uZyBnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcg
cG9zaXRpb24sIFN0cmluZyogZGF0YSk7CisgICAgc3RhdGljIGJvb2wgaXNQcm9maWxlckFsd2F5
c0VuYWJsZWQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IGNkOTA1MmEuLmU2NDdjOTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMzgsNiAr
MzgsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKICAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLAogICAgICJoYW5kbGVy
QWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCgpIiwKIH07CiskdHlwZVRyYW5zZm9ybXsiUHJvZmlsZXIifSA9IHsKKyAgICAiZm9yd2FyZCIg
PT4gIkluc3BlY3RvclByb2ZpbGVyQWdlbnQiLAorICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgiLAorICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPnByb2ZpbGVyQWdlbnQoKSIsCit9OwogJHR5cGVUcmFuc2Zvcm17IkZyb250ZW5k
In0gPSB7CiAgICAgImZvcndhcmQiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCIsCiAgICAg
ImhlYWRlciIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kLmgiLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKaW5kZXggOTJmZjM3Yi4uMzkyZDFkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBA
IC0xNDUsMTQgKzE0NSwxNCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPUNvbnRy
b2xsZXJdIHZvaWQgZW5hYmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogICAgICAgICBb
aGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29sZWFuIGFsd2F5
cyk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzdGFydFByb2ZpbGluZygp
OwotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHN0b3BQcm9maWxpbmcoKTsKKyAg
ICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsKKyAgICAgICAg
W2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCi0gICAgICAgIFtoYW5k
bGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoaW4gbG9uZyBjYWxsSWQsIG91
dCBBcnJheSBoZWFkZXJzKTsKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBnZXRQ
cm9maWxlKGluIGxvbmcgY2FsbElkLCBpbiB1bnNpZ25lZCBsb25nIHVpZCwgb3V0IE9iamVjdCBw
cm9maWxlKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZUhlYWRl
cnMoaW4gbG9uZyBjYWxsSWQsIG91dCBBcnJheSBoZWFkZXJzKTsKKyAgICAgICAgW2hhbmRsZXI9
UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZShpbiBsb25nIGNhbGxJZCwgaW4gdW5zaWduZWQgbG9u
ZyB1aWQsIG91dCBPYmplY3QgcHJvZmlsZSk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxl
cl0gdm9pZCByZW1vdmVQcm9maWxlKGluIHVuc2lnbmVkIGxvbmcgdWlkKTsKLSAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CisgICAgICAgIFtoYW5kbGVy
PVByb2ZpbGVyXSB2b2lkIHJlbW92ZVByb2ZpbGUoaW4gdW5zaWduZWQgbG9uZyB1aWQpOworICAg
ICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CiAKICAgICAgICAg
W2hhbmRsZXI9QmFja2VuZF0gdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7CiAgICAgICAgIFtoYW5k
bGVyPUJhY2tlbmRdIHZvaWQgZ2V0UHJvZmlsZXJMb2dMaW5lcyhpbiBsb25nIGNhbGxJZCwgaW4g
bG9uZyBpblBvc2l0aW9uLCBvdXQgbG9uZyBvdXRQb3NpdGlvbiwgb3V0IFN0cmluZyBsb2cpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhYzY3MGNiLi44
OWM5MTMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAt
NjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFn
ZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMTE1LDgg
KzExNiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcu
d2Via2l0LnByb2ZpbGVzLnVzZXItaW5pdGlhdGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBDUFVQcm9maWxlVHlwZSA9ICJDUFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291
cmNlVHJhY2tpbmdFbmFibGVkU2V0dGluZ05hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQi
Owogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlYnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1lID0g
ImRlYnVnZ2VyRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJFbmFi
bGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKQEAgLTE3MCwxMSArMTY5LDcgQEAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVk
U2NyaXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fcHJvZmls
ZXJFbmFibGVkKCFXVEZfVVNFX0pTQykKLSAgICAsIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigt
MSkKLSAgICAsIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCi0gICAgLCBtX3N0
YXJ0UHJvZmlsaW5nKHRoaXMsICZJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcpCisgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CiAgICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsK
QEAgLTUwNCw4ICs0OTksMTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJv
bnRlbmQoKQogICAgICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dl
ckVuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRy
dWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1
Z2dlcigpOwotICAgICAgICBTdHJpbmcgcHJvZmlsZXJFbmFibGVkID0gc2V0dGluZyhwcm9maWxl
ckVuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChwcm9maWxlckVuYWJsZWQgPT0gInRy
dWUiKQorICAgIH0KKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldFJlbW90ZUZyb250ZW5kKG1fcmVt
b3RlRnJvbnRlbmQuZ2V0KCkpOworICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJB
bHdheXNFbmFibGVkKCkpIHsKKyAgICAgICAgU3RyaW5nIHByb2ZpbGVyRW5hYmxlZFNldHRpbmcg
PSBzZXR0aW5nKHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lKTsKKyAgICAgICAgaWYgKHByb2Zp
bGVyRW5hYmxlZFNldHRpbmcgPT0gInRydWUiKQogICAgICAgICAgICAgZW5hYmxlUHJvZmlsZXIo
KTsKICAgICB9CiAjZW5kaWYKQEAgLTU5NCw3ICs1OTIsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxp
bmcoKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldFJlbW90ZUZyb250ZW5kKDApOworICAgIG1f
cHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICNlbmRpZgogCiAg
ICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKQEAgLTYzOCw3ICs2MzcsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgICAg
IG1fcmVtb3RlRnJvbnRlbmQtPm1vbml0b3JpbmdYSFJXYXNFbmFibGVkKCk7CiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9wcm9maWxlckVuYWJsZWQpCisgICAg
aWYgKG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICBtX3JlbW90ZUZyb250ZW5k
LT5wcm9maWxlcldhc0VuYWJsZWQoKTsKICNlbmRpZgogCkBAIC03NDUsMTEgKzc0NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9u
KCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykK
LSAgICAgICAgbV9wcm9maWxlcy5jbGVhcigpOwotICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU51bWJlciA9IDE7Ci0gICAgICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxl
TnVtYmVyID0gMTsKLSAgICAgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgICAgICBt
X3JlbW90ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKKyAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5yZXNldFN0YXRlKCk7CiAjZW5kaWYKICAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3Vy
Y2VzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQogICAg
ICAgICAvLyByZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8g
dW5iaW5kIHRoZW0uCkBAIC0xNDU4LDE3NiArMTQ1Myw2MSBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1
bnNpZwogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQ
dHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Ci0gICAgbV9wcm9maWxlcy5h
ZGQocHJvZmlsZS0+dWlkKCksIHByb2ZpbGUpOwotCi0gICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQp
IHsKLSAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJvZmlsZUhlYWRlcihjcmVhdGVQcm9m
aWxlSGVhZGVyKCpwcm9maWxlKSk7Ci0gICAgfQotCi0gICAgYWRkUHJvZmlsZUZpbmlzaGVkTWVz
c2FnZVRvQ29uc29sZShwcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIG1fcHJv
ZmlsZXJBZ2VudC0+YWRkUHJvZmlsZShwcnBQcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3Nh
Z2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Ci0KLSAgICBTdHJpbmcgdGl0bGUgPSBw
cm9maWxlLT50aXRsZSgpOwotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlBy
b2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIyVkXCIgZmluaXNoZWQuIiwgQ1BVUHJvZmls
ZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCks
IHByb2ZpbGUtPnVpZCgpKTsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPmFkZFByb2ZpbGVGaW5pc2hlZE1lc3Nh
Z2VUb0NvbnNvbGUocHJwUHJvZmlsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUo
Y29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpCiB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmls
ZSBcIndlYmtpdC1wcm9maWxlOi8vJXMvJXMjMFwiIHN0YXJ0ZWQuIiwgQ1BVUHJvZmlsZVR5cGUs
IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLnV0ZjgoKS5kYXRhKCkpOwotICAg
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9n
TWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotfQotCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZVByb2ZpbGUodW5zaWduZWQgdWlkKQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wcm9maWxlcy5j
b250YWlucyh1aWQpKQotICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOwotfQotCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyUHJvZmlsZXMoKQotewotICAgIGlmICghZW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7Ci0gICAgbV9j
dXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwotICAgIG1fbmV4dFVzZXJJbml0
aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPmFkZFN0YXJ0UHJv
ZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBoZWFkZXJzKQotewotICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9m
aWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAg
ICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNv
bmQpKTsKLX0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKHVuc2lnbmVk
IHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCitib29sIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdAog
ewotICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwot
ICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgICpwcm9maWxlT2JqZWN0
ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICgqcHJvZmlsZU9i
amVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9ySGVhZCgpKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUm
IHByb2ZpbGUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBoZWFkZXItPnNldFN0cmluZygidGl0bGUiLCBwcm9m
aWxlLnRpdGxlKCkpOwotICAgIGhlYWRlci0+c2V0TnVtYmVyKCJ1aWQiLCBwcm9maWxlLnVpZCgp
KTsKLSAgICBoZWFkZXItPnNldFN0cmluZygidHlwZUlkIiwgU3RyaW5nKENQVVByb2ZpbGVUeXBl
KSk7Ci0gICAgcmV0dXJuIGhlYWRlcjsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6
OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxl
TnVtYmVyID0gZmFsc2UpCi17Ci0gICAgaWYgKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCi0gICAg
ICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gbV9uZXh0VXNlckluaXRp
YXRlZFByb2ZpbGVOdW1iZXIrKzsKLQotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMuJWQi
LCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxl
TnVtYmVyKTsKKyAgICByZXR1cm4gbV9wcm9maWxlckFnZW50LT5pc1JlY29yZGluZ1VzZXJJbml0
aWF0ZWRQcm9maWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nU29vbigpCitTdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1i
ZXIpCiB7Ci0gICAgbV9zdGFydFByb2ZpbGluZy5zdGFydE9uZVNob3QoMCk7CisgICAgcmV0dXJu
IG1fcHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShpbmNy
ZW1lbnRQcm9maWxlTnVtYmVyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxlcj4qKQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogewog
ICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXByb2ZpbGVy
RW5hYmxlZCgpKSB7Ci0gICAgICAgIGVuYWJsZVByb2ZpbGVyKGZhbHNlLCB0cnVlKTsKLSAgICAg
ICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7
Ci0gICAgfQotCi0gICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IHRydWU7Ci0K
LSAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKHRy
dWUpOwotCi0jaWYgVVNFKEpTQykKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0
b0pTRE9NV2luZG93KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSNlbHNlCi0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0g
MDsKLSNlbmRpZgotICAgIFNjcmlwdFByb2ZpbGVyOjpzdGFydChzY3JpcHRTdGF0ZSwgdGl0bGUp
OwotCi0gICAgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxlLCAwLCBTdHJp
bmcoKSk7Ci0KLSAgICB0b2dnbGVSZWNvcmRCdXR0b24odHJ1ZSk7CisgICAgbV9wcm9maWxlckFn
ZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCiB7CiAgICAgaWYgKCFlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUgPSBmYWxzZTsKLQotICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUoKTsKLQotI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNj
cmlwdFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBk
ZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0jZWxzZQotICAgIC8vIFVzZSBudWxsIHNj
cmlwdCBzdGF0ZSB0byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0b2tlbi4K
LSAgICAvLyBBbGwgZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZpc2libGUg
ZnJvbSBJbnNwZWN0b3IgVUkuCi0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKLSNl
bmRpZgotICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJvZmlsZXI6
OnN0b3Aoc2NyaXB0U3RhdGUsIHRpdGxlKTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgYWRk
UHJvZmlsZShwcm9maWxlLCAwLCBTdHJpbmcoKSk7Ci0KLSAgICB0b2dnbGVSZWNvcmRCdXR0b24o
ZmFsc2UpOworICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRCdXR0b24oYm9v
bCBpc1Byb2ZpbGluZykKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVk
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3JlbW90ZUZyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsK
KyAgICByZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpOwogfQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBi
b29sIHNraXBSZWNvbXBpbGUpCiB7CiAgICAgaWYgKGFsd2F5cykKICAgICAgICAgc2V0U2V0dGlu
Zyhwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKLQotICAgIGlmIChtX3Byb2Zp
bGVyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSB0
cnVlOwotCi0gICAgaWYgKCFza2lwUmVjb21waWxlKQotICAgICAgICBTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7Ci0KLSAgICBpZiAobV9y
ZW1vdGVGcm9udGVuZCkKLSAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cHJvZmlsZXJXYXNFbmFi
bGVkKCk7CisgICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUoc2tpcFJlY29tcGlsZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQog
ewogICAgIGlmIChhbHdheXMpCiAgICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJFbmFibGVkU2V0
dGluZ05hbWUsICJmYWxzZSIpOwotCi0gICAgaWYgKCFtX3Byb2ZpbGVyRW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKLQotICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKLQot
ICAgIGlmIChtX3JlbW90ZUZyb250ZW5kKQotICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5wcm9m
aWxlcldhc0Rpc2FibGVkKCk7CisgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDhkOTYw
MDUuLjRmZTY3Y2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAg
LTMzLDkgKzMzLDcgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JE
T01BZ2VudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0
UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC02NSw2ICs2Myw3IEBAIGNsYXNzIEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwpAQCAt
NzgsNiArNzcsNyBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKK2NsYXNz
IFNjcmlwdFByb2ZpbGU7CiBjbGFzcyBTY3JpcHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiBjbGFzcyBTdG9yYWdlOwpAQCAtMjI4LDIwICsyMjgsMTQgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdm9pZCBhZGRQcm9maWxlRmluaXNoZWRN
ZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIGFkZFN0YXJ0UHJvZmls
aW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgdm9pZCByZW1vdmVQcm9maWxlKHVu
c2lnbmVkKTsKLSAgICB2b2lkIGNsZWFyUHJvZmlsZXMoKTsKLQotICAgIGJvb2wgaXNSZWNvcmRp
bmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkaW5nVXNlcklu
aXRpYXRlZFByb2ZpbGU7IH0KLQotICAgIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7Ci0gICAgdm9pZCBzdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxlcj4qID0gMCk7Cisg
ICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3Q7CisgICAgU3Ry
aW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9m
aWxlTnVtYmVyID0gZmFsc2UpOworICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7CiAgICAgdm9pZCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIHZvaWQgc3Rh
cnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0gICAgdm9p
ZCBzdG9wUHJvZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0KICAg
ICB2b2lkIGVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UsIGJvb2wgc2tpcFJlY29t
cGlsZSA9IGZhbHNlKTsKICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZh
bHNlKTsKLSAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGVuYWJsZWQo
KSAmJiBtX3Byb2ZpbGVyRW5hYmxlZDsgfQorICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29u
c3Q7CisgICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvZmlsZXJBZ2VudC5nZXQoKTsgfQogCiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dl
cigpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwpAQCAt
MjgzLDE0ICsyNzcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRp
bWVBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHR5cGVk
ZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVz
TWFwOwogCi0gICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdTb29uKCk7CiAgICAg
dm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZy
b21Gcm9udGVuZChib29sIGFsd2F5cyk7Ci0gICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFByb2ZpbGUodW5zaWdu
ZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7Ci0gICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0
UHJvZmlsZSYgcHJvZmlsZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9p
ZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwpAQCAtMzgwLDEyICszNjksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKICAgICBPd25Q
dHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1Z2dlckFnZW50OwogCi0gICAgYm9vbCBt
X3Byb2ZpbGVyRW5hYmxlZDsKLSAgICBib29sIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2Zp
bGU7Ci0gICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwotICAgIHVu
c2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwotICAgIFRpbWVyPEluc3Bl
Y3RvckNvbnRyb2xsZXI+IG1fc3RhcnRQcm9maWxpbmc7Ci0gICAgUHJvZmlsZXNNYXAgbV9wcm9m
aWxlczsKKyAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9wcm9maWxlckFnZW50
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlwZWRlZiBIYXNoTWFwPGludHB0
cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vyc01hcDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlYzcyMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0wLDAgKzEsMjEwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCisK
KyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJS
ZW1vdGVJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgi
CisjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgorI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEpTQykKKyNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2Zp
bGVzLnVzZXItaW5pdGlhdGVkIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDUFVQcm9maWxl
VHlwZSA9ICJDUFUiOworCitQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyKQoreworICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBhZ2VudCA9
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIp
KTsKKyAgICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOworfQorCitJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNv
bnRyb2xsZXIpCisgICAgICAgICwgbV9yZW1vdGVGcm9udGVuZCgwKQorICAgICAgICAsIG1fZW5h
YmxlZChTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKSkKKyAgICAgICAg
LCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQorICAgICAgICAsIG1fY3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKC0xKQorICAgICAgICAsIG1fbmV4dFVzZXJJ
bml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCit7Cit9CisKK0luc3BlY3RvclByb2ZpbGVyQWdlbnQ6
On5JbnNwZWN0b3JQcm9maWxlckFnZW50KCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjphZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgUmVm
UHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUgPSBwcnBQcm9maWxlOworICAgIG1fcHJvZmlsZXMu
YWRkKHByb2ZpbGUtPnVpZCgpLCBwcm9maWxlKTsKKyAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkK
KyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+YWRkUHJvZmlsZUhlYWRlcihjcmVhdGVQcm9maWxl
SGVhZGVyKCpwcm9maWxlKSk7CisgICAgYWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29s
ZShwcm9maWxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0
cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9
IHBycFByb2ZpbGU7CisgICAgU3RyaW5nIHRpdGxlID0gcHJvZmlsZS0+dGl0bGUoKTsKKyAgICBT
dHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJQcm9maWxlIFwid2Via2l0LXByb2ZpbGU6
Ly8lcy8lcyMlZFwiIGZpbmlzaGVkLiIsIENQVVByb2ZpbGVUeXBlLCBlbmNvZGVXaXRoVVJMRXNj
YXBlU2VxdWVuY2VzKHRpdGxlKS51dGY4KCkuZGF0YSgpLCBwcm9maWxlLT51aWQoKSk7CisgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFBy
b2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgU3RyaW5nIG1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiUHJvZmlsZSBcIndlYmtpdC1wcm9maWxlOi8vJXMvJXMjMFwiIHN0
YXJ0ZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0
bGUpLnV0ZjgoKS5kYXRhKCkpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+YWRkTWVzc2Fn
ZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2
ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVy
KGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gaGVhZGVyID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBoZWFkZXItPnNl
dFN0cmluZygidGl0bGUiLCBwcm9maWxlLnRpdGxlKCkpOworICAgIGhlYWRlci0+c2V0TnVtYmVy
KCJ1aWQiLCBwcm9maWxlLnVpZCgpKTsKKyAgICBoZWFkZXItPnNldFN0cmluZygidHlwZUlkIiwg
U3RyaW5nKENQVVByb2ZpbGVUeXBlKSk7CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwordm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpkaXNhYmxlKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fZW5hYmxlZCA9IGZhbHNlOworICAgIFNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKKyAgICBpZiAo
bV9yZW1vdGVGcm9udGVuZCkKKyAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+cHJvZmlsZXJXYXNE
aXNhYmxlZCgpOworfQorCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmVuYWJsZShib29s
IHNraXBSZWNvbXBpbGUpCit7CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZW5hYmxlZCA9IHRydWU7CisgICAgaWYgKCFza2lwUmVjb21waWxlKQorICAgICAgICBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7
CisgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmQpCisgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQtPnBy
b2ZpbGVyV2FzRW5hYmxlZCgpOworfQorCitTdHJpbmcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVO
dW1iZXIpCit7CisgICAgaWYgKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCisgICAgICAgIG1fY3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gbV9uZXh0VXNlckluaXRpYXRlZFByb2Zp
bGVOdW1iZXIrKzsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMuJWQiLCBVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKTsK
K30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQoreworICAgIFByb2ZpbGVzTWFwOjppdGVyYXRv
ciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CisgICAgZm9yIChQcm9maWxlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0
KQorICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0
LT5zZWNvbmQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxl
KHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCit7
CisgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7Cisg
ICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKKyAgICAgICAgKnByb2ZpbGVPYmplY3Qg
PSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKKyAgICAgICAgKCpwcm9maWxlT2Jq
ZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JIZWFkKCkpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZW1v
dmVQcm9maWxlKHVuc2lnbmVkIHVpZCkKK3sKKyAgICBpZiAobV9wcm9maWxlcy5jb250YWlucyh1
aWQpKQorICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworfQorCit2b2lkIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OnJlc2V0U3RhdGUoKQoreworICAgIG1fcHJvZmlsZXMuY2xlYXIoKTsK
KyAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IDE7CisgICAgbV9uZXh0
VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOworICAgIGlmIChtX3JlbW90ZUZyb250ZW5k
KQorICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KQoreworICAgIGlmICghZW5hYmxlZCgpKSB7CisgICAgICAgIGVuYWJsZShmYWxzZSk7CisgICAg
ICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygp
OworICAgIH0KKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0gdHJ1ZTsKKyAg
ICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKHRydWUp
OworI2lmIFVTRShKU0MpCisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RP
TVdpbmRvdyhtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1l
KCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyNlbHNlCisgICAgU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlID0gMDsKKyNlbmRpZgorICAgIFNjcmlwdFByb2ZpbGVyOjpzdGFydChz
Y3JpcHRTdGF0ZSwgdGl0bGUpOworICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29s
ZSh0aXRsZSwgMCwgU3RyaW5nKCkpOworICAgIHRvZ2dsZVJlY29yZEJ1dHRvbih0cnVlKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpCit7CisgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IGZhbHNlOworICAg
IFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoKTsKKyNp
ZiBVU0UoSlNDKQorICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5k
b3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLCBk
ZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisjZWxzZQorICAgIC8vIFVzZSBudWxsIHNj
cmlwdCBzdGF0ZSB0byBhdm9pZCBmaWx0ZXJpbmcgYnkgY29udGV4dCBzZWN1cml0eSB0b2tlbi4K
KyAgICAvLyBBbGwgZnVuY3Rpb25zIGZyb20gYWxsIGlmcmFtZXMgc2hvdWxkIGJlIHZpc2libGUg
ZnJvbSBJbnNwZWN0b3IgVUkuCisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKKyNl
bmRpZgorICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gU2NyaXB0UHJvZmlsZXI6
OnN0b3Aoc2NyaXB0U3RhdGUsIHRpdGxlKTsKKyAgICBpZiAocHJvZmlsZSkKKyAgICAgICAgYWRk
UHJvZmlsZShwcm9maWxlLCAwLCBTdHJpbmcoKSk7CisgICAgdG9nZ2xlUmVjb3JkQnV0dG9uKGZh
bHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNvcmRCdXR0
b24oYm9vbCBpc1Byb2ZpbGluZykKK3sKKyAgICBpZiAobV9yZW1vdGVGcm9udGVuZCkKKyAgICAg
ICAgbV9yZW1vdGVGcm9udGVuZC0+c2V0UmVjb3JkaW5nUHJvZmlsZShpc1Byb2ZpbGluZyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODM3N2UKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEluc3BlY3RvclByb2ZpbGVyQWdlbnRfaAorI2RlZmluZSBJbnNwZWN0
b3JQcm9maWxlckFnZW50X2gKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0
b3JPYmplY3Q7CitjbGFzcyBTY3JpcHRQcm9maWxlOworY2xhc3MgUmVtb3RlSW5zcGVjdG9yRnJv
bnRlbmQ7CisKK2NsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQgOiBwdWJsaWMgTm9uY29weWFi
bGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdl
bnQ+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB+SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCgpOworCisgICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0
UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpOworICAgIHZvaWQgYWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQ
YXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7CisgICAgdm9pZCBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNv
bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpOworICAgIHZvaWQgY2xlYXJQcm9maWxlcygpIHsgcmVzZXRTdGF0ZSgpOyB9
CisgICAgdm9pZCBkaXNhYmxlKCk7CisgICAgdm9pZCBlbmFibGUoYm9vbCBza2lwUmVjb21waWxl
KTsKKyAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KKyAgICBTdHJpbmcg
Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVO
dW1iZXIgPSBmYWxzZSk7CisgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBoZWFkZXJzKTsKKyAgICB2b2lkIGdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgYm9vbCBpc1JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZTsgfQorICAgIHZvaWQgcmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpOworICAg
IHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgc2V0UmVtb3RlRnJvbnRlbmQoUmVtb3RlSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKSB7IG1fcmVtb3RlRnJvbnRlbmQgPSBmcm9udGVuZDsg
fQorICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpOyB9CisgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lk
IHN0b3BQcm9maWxpbmcoKSB7IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2
b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRC
dXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFw
PHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CisKKyAg
ICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKyAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRQ
cm9maWxlJiBwcm9maWxlKTsKKworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9y
Q29udHJvbGxlcjsKKyAgICBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogbV9yZW1vdGVGcm9udGVu
ZDsKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBib29sIG1fcmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGU7CisgICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwor
ICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOworICAgIFByb2Zp
bGVzTWFwIG1fcHJvZmlsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvclByb2ZpbGVyQWdlbnRfaCkK
</data>
<flag name="review"
          id="53764"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="53765"
          type_id="3"
          status="-"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>