<?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>119770</bug_id>
          
          <creation_ts>2013-08-13 14:35:14 -0700</creation_ts>
          <short_desc>Foo::s_info should be Foo::info(), so that you can change how the s_info is actually linked</short_desc>
          <delta_ts>2013-08-13 19:41:07 -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>JavaScriptCore</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>
          
          <blocked>119064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>916891</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 14:35:14 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916951</commentid>
    <comment_count>1</comment_count>
      <attachid>208691</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 17:05:54 -0700</bug_when>
    <thetext>Created attachment 208691
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916953</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-13 17:08:42 -0700</bug_when>
    <thetext>Attachment 208691 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackConstructor.h&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackFunction.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackFunction.h&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject.h&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObjectFunctions.h&apos;, u&apos;Source/JavaScriptCore/API/JSObjectRef.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSValueRef.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp&apos;, u&apos;Source/JavaScriptCore/API/ObjCCallbackFunction.h&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CallLinkStatus.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h&apos;, u&apos;Source/JavaScriptCore/debugger/Debugger.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerActivation.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerActivation.h&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGThunks.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/profiler/LegacyProfiler.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Arguments.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Arguments.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/BooleanConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/BooleanObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/BooleanObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/BooleanPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/BooleanPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/DateConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DateConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/DateInstance.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DateInstance.h&apos;, u&apos;Source/JavaScriptCore/runtime/DatePrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DatePrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/Error.h&apos;, u&apos;Source/JavaScriptCore/runtime/ErrorConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/ErrorInstance.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ErrorInstance.h&apos;, u&apos;Source/JavaScriptCore/runtime/ErrorPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ErrorPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExceptionHelpers.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ExceptionHelpers.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/GetterSetter.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/GetterSetter.h&apos;, u&apos;Source/JavaScriptCore/runtime/InternalFunction.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/InternalFunction.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSAPIValueWrapper.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSActivation.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSActivation.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSBoundFunction.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSBoundFunction.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCJSValue.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCJSValueInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCellInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFunction.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSFunction.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSNameScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSNameScope.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSNotAnObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSONObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSONObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSPropertyNameIterator.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSProxy.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSProxy.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSString.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSSymbolTableObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSVariableObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSWithScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSWithScope.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSWrapperObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSWrapperObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/MathObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/MathObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/NameConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/NameInstance.h&apos;, u&apos;Source/JavaScriptCore/runtime/NamePrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/NamePrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/NativeErrorConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/NumberConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/NumberConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/NumberObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/NumberObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/NumberPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/NumberPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/ObjectConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/ObjectPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ObjectPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyMapHashTable.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyTable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/RegExp.h&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpMatchesArray.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpMatchesArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/RegExpPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SparseArrayValueMap.h&apos;, u&apos;Source/JavaScriptCore/runtime/StrictEvalActivation.h&apos;, u&apos;Source/JavaScriptCore/runtime/StringConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/StringObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/StringObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/StringPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/StringPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureChain.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/StructureChain.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureRareData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/StructureRareData.h&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/WriteBarrier.h&apos;, u&apos;Source/JavaScriptCore/testRegExp.cpp&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/js/IDBBindingUtilities.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSAttrCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSAudioTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSAudioTrackListCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDOMFormDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMGlobalObject.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMGlobalObject.h&apos;, u&apos;Source/WebCore/bindings/js/JSDOMStringListCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMWindowBase.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMWindowBase.h&apos;, u&apos;Source/WebCore/bindings/js/JSDOMWindowCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMWindowShell.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMWindowShell.h&apos;, u&apos;Source/WebCore/bindings/js/JSEventTargetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHistoryCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageConstructor.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageConstructor.h&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSLocationCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageChannelCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSNodeCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSNodeFilterCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSPluginElementFunctions.h&apos;, u&apos;Source/WebCore/bindings/js/JSSVGElementInstanceCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSharedWorkerCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTextTrackCueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTextTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTextTrackListCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSVideoTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSVideoTrackListCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.h&apos;, u&apos;Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXPathResultCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptState.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/objc/DOM.mm&apos;, u&apos;Source/WebCore/bindings/objc/DOMUtility.mm&apos;, u&apos;Source/WebCore/bindings/objc/WebScriptObject.mm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestException.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestNode.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestObj.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h&apos;, u&apos;Source/WebCore/bridge/c/CRuntimeObject.cpp&apos;, u&apos;Source/WebCore/bridge/c/CRuntimeObject.h&apos;, u&apos;Source/WebCore/bridge/c/c_instance.cpp&apos;, u&apos;Source/WebCore/bridge/c/c_utility.cpp&apos;, u&apos;Source/WebCore/bridge/objc/ObjCRuntimeObject.h&apos;, u&apos;Source/WebCore/bridge/objc/objc_instance.mm&apos;, u&apos;Source/WebCore/bridge/objc/objc_runtime.h&apos;, u&apos;Source/WebCore/bridge/objc/objc_runtime.mm&apos;, u&apos;Source/WebCore/bridge/qt/qt_instance.cpp&apos;, u&apos;Source/WebCore/bridge/qt/qt_pixmapruntime.cpp&apos;, u&apos;Source/WebCore/bridge/qt/qt_runtime.cpp&apos;, u&apos;Source/WebCore/bridge/runtime_array.cpp&apos;, u&apos;Source/WebCore/bridge/runtime_array.h&apos;, u&apos;Source/WebCore/bridge/runtime_method.cpp&apos;, u&apos;Source/WebCore/bridge/runtime_method.h&apos;, u&apos;Source/WebCore/bridge/runtime_object.cpp&apos;, u&apos;Source/WebCore/bridge/runtime_object.h&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm&apos;, u&apos;Source/WebKit/mac/Plugins/Hosted/ProxyInstance.mm&apos;, u&apos;Source/WebKit/mac/Plugins/Hosted/ProxyRuntimeObject.h&apos;, u&apos;Source/WebKit/mac/WebView/WebView.mm&apos;, u&apos;Source/WebKit/qt/Api/qwebelement.cpp&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;, u&apos;Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.h&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.h&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/WebFrame.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1590:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebKit/qt/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 2 in 265 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916955</commentid>
    <comment_count>3</comment_count>
      <attachid>208691</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-08-13 17:11:20 -0700</bug_when>
    <thetext>Comment on attachment 208691
the patch

r=me with qt stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916987</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 19:41:07 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/154038</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208691</attachid>
            <date>2013-08-13 17:05:54 -0700</date>
            <delta_ts>2013-08-13 17:11:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>511854</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxNyBA
QAorMjAxMy0wOC0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZvbzo6c19pbmZvIHNob3VsZCBiZSBGb286OmluZm8oKSwgc28gdGhhdCB5b3UgY2FuIGNoYW5n
ZSBob3cgdGhlIHNfaW5mbyBpcyBhY3R1YWxseSBsaW5rZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTc3MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6
SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBBUEkvSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6OmFzQ2FsbGJhY2tPYmplY3Qp
OgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBBUEkvSlNPYmpl
Y3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlKToKKyAgICAgICAgKEpTT2Jq
ZWN0U2V0UHJpdmF0ZSk6CisgICAgICAgIChKU09iamVjdEdldFByaXZhdGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU09iamVjdFNldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdERl
bGV0ZVByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAg
ICAgICAoSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyk6CisgICAgICAgICogQVBJL0pTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuY3BwOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBKU0NUeXBlZEFycmF5U3R1YnMuaDoKKyAgICAgICAgKiBieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0
YXR1cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpmdW5jdGlvbik6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjppbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxp
bmVDYWxsRnJhbWUpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKToKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgICog
ZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJB
Y3RpdmF0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckFj
dGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Ojpl
eGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Y2FuT3B0aW1pemVTdHJpbmdPYmplY3RBY2Nlc3MpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0ludGVy
bmFsRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6bG9hZFZh
cmFyZ3MpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgICogcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuY3BwOgorICAg
ICAgICAoSlNDOjpMZWdhY3lQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzQXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlDb25zdHJ1
Y3RvcklzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0NvbmNhdCk6
CisgICAgICAgIChKU0M6OmF0dGVtcHRGYXN0U29ydCk6CisgICAgICAgICogcnVudGltZS9BcnJh
eVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAo
SlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Qm9vbGVhbk9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjph
c0Jvb2xlYW5PYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OkJvb2xlYW5Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Ym9vbGVhblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6Ym9vbGVh
blByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0RGF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6RGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRp
bWUvRGF0ZUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0RhdGVJ
bnN0YW5jZSk6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6Zm9ybWF0ZURhdGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRV
VENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0RGF5KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNHZXRVVENIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAo
SlNDOjpkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRVVENTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vj
b25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpkYXRlUHJvdG9GdW5jU2V0VGltZSk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJv
bVRpbWVBcmdzKToKKyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuaDoKKyAgICAg
ICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50
aW1lL0Vycm9yLmg6CisgICAgICAgIChKU0M6OlN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoK
KyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3Rh
bmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6
CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9yUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjppc1Rlcm1p
bmF0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpQcm9ncmFt
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpoYXNo
Rm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y3V0YWJsZUJhc2U6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1
dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9y
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1Rv
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jQmluZCk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRlci5jcHA6CisgICAgICAgIChK
U0M6OkdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9HZXR0
ZXJTZXR0ZXIuaDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0lu
dGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNJbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAgICAgIChKU0M6OkpTQVBJVmFsdWVX
cmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6YXNBcnJheSk6CisgICAgICAgIChKU0M6OmlzSlNBcnJheSk6CisgICAgICAg
ICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVu
Y3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oOgorICAg
ICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEluQ29u
dGV4dCk6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjppc0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDOjpqc0Nhc3QpOgorICAgICAgICAoSlNDOjpqc0R5bmFtaWNDYXN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6YWxsb2NhdGVD
ZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpK
U0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpza2lwT3ZlckJvdW5kRnVuY3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpzbG93VmFsaWRh
dGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNOYW1lU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogcnVudGltZS9KU05hbWVTY29wZS5oOgorICAgICAgICAoSlNDOjpKU05h
bWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6
U3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJp
bmdpZmllcjo6SG9sZGVyOjpIb2xkZXIpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgor
ICAgICAgICAoSlNDOjpKU09OUHJvdG9GdW5jU3RyaW5naWZ5KToKKyAgICAgICAgKiBydW50aW1l
L0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0Q2Fs
bGFibGVPYmplY3RTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChK
U0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZW5zdXJlSW50MzJTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZURvdWJs
ZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6SlNOb25GaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6aXNKU0Zp
bmFsT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAg
ICAoSlNDOjpKU1Njb3BlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
Ojppc0pTU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
V2l0aFNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNXaXRoU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6SlNXaXRo
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNXcmFwcGVyT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTV3Jh
cHBlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaDoKKyAg
ICAgICAgKEpTQzo6TmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAq
IHJ1bnRpbWUvTmFtZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6Ok5hbWVJbnN0YW5jZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgICogcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
TmFtZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpwcml2YXRlTmFt
ZVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL05hbWVQcm90b3R5cGUuaDoK
KyAgICAgICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOYXRp
dmVFcnJvckNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6
TnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9O
dW1iZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5oOgorICAgICAgICAoSlNDOjpO
dW1iZXJPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAoSlND
OjpOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpPYmplY3RDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRh
YmxlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNSZWdFeHBDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwOgorICAgICAgICAoSlND
OjpSZWdFeHBNYXRjaGVzQXJyYXk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6YXNSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jVGVzdCk6CisgICAg
ICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0V4ZWMpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90
b0Z1bmNDb21waWxlKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OlJlZ0V4
cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6
U3RyaWN0RXZhbEFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNTdHJpbmdPYmplY3QpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2Up
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2Vh
cmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dHlwZUluZm8pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Om91dE9mTGluZVNpemUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvdGFsU3Rv
cmFnZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFy
ZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuaDoKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlNo
YXJlZFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
Y3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpTdGFja1ByZXNlcnZp
bmdSZWNvbXBpbGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6Vk06OnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAg
ICAoSlNDOjp2YWxpZGF0ZUNlbGwpOgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAg
ICAoR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDEzLTA4LTEzICBKdWxpZW4g
QnJpYW5jZWF1ICA8amJyaWFuY2VhdUBuZHMuY29tPgogCiAgICAgICAgIFtzaDRdIFByZXBhcmUg
TExJTlQgZm9yIERGR19KSVQgaW1wbGVtZW50YXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDExICs1OSwxMSBAQCBwdWJsaWM6IFwKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6
SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcCiAgICAgc3RhdGljIHZvaWQg
cHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvO1wKKyAgICBERUNMQVJFX0lORk87XAogXAogICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAogICAgIHtcCi0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7XAorICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7XAogICAgIH1cCiBcCiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVt
UHJvcGVydGllcyk7XApAQCAtOTcsMTMgKzk3LDEzIEBAIHZvaWQgSlMjI25hbWUjI0FycmF5Ojpm
aW5pc2hDcmVhdGlvbihWTSYKICAgICBtX3N0b3JhZ2UgPSBtX2ltcGwtPmRhdGEoKTtcCiAgICAg
bV9zdG9yYWdlTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTtcCiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgXAotICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7XAorICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcCiB9XAogXAogYm9vbCBKUyMj
bmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClc
CiB7XAogICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMj
QXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pO1wKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XAogICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtc
CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAogICAgICAg
ICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCkBAIC0xMTYsNyAr
MTE2LDcgQEAgYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdAogYm9vbCBK
UyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcilcCiB7XAogICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAogICAgIHVuc2lnbmVkIGluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTtcCiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9y
YWdlTGVuZ3RoKSB7XAogICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KTtcCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93
blByb3BlcnR5RGVzYwogYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCiB7XAogICAgIEpTIyNuYW1lIyNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCiAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCiAgICAgICAg
IHJldHVybiB0cnVlO1wKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIEpTIyNuYW1lIyNBcnJheTo6
Z2V0T3duUHJvcGVydHlTbG90CiB2b2lkIEpTIyNuYW1lIyNBcnJheTo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXAoge1wKICAgICBKUyMjbmFtZSMjQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4oY2VsbCk7XAotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAorICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcCiAgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKICAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KSB7XAogICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBp
bmRleCwgdmFsdWUpO1wKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEpTIyNuYW1lIyNBcnJheTo6
aW5kZXhTZXR0ZXIoSlNDOjpFCiB2b2lkIEpTIyNuYW1lIyNBcnJheTo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBib29sKVwKIHtcCiAgICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7XAogICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUpO1wKICAgICByZXR1cm47XAogfVwKQEAgLTE2NSw3ICsxNjUs
NyBAQCB2b2lkIEpTIyNuYW1lIyNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqCiB2b2lkIEpTIyNu
YW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSlcCiB7XAogICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
UyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsICZzX2luZm8pO1wKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7XAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2VMZW5ndGg7ICsraSlcCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSkpO1wKICAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpO1wKQEAgLTE3Myw3ICsxNzMs
NyBAQCB2b2lkIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lCiBcCiBKU1ZhbHVl
IEpTIyNuYW1lIyNBcnJheTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClc
CiB7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7XAorICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgaW5mbygpKTtcCiAgICAgdHlwZSByZXN1
bHQgPSBtX2ltcGwtPml0ZW0oaW5kZXgpO1wKICAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJl
c3VsdCkpXAogICAgICAgICByZXR1cm4ganNOYU4oKTtcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKIAotICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKICAgICBzdGF0aWMgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUgc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZTsKIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5
cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQog
CiAgICAgc3RhdGljIGJvb2wgamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZChjb25zdCBKU0ds
b2JhbE9iamVjdCopIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dFJlZ0V4cC5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEzICsxMjIsMTMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHN0YXRpYyBjb25z
dCBib29sIG5lZWRzRGVzdHJ1Y3RvciA9IGZhbHNlOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xv
YmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1CiB2b2lkIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDbGFzc1JlZiBqc0NsYXNzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgaWYgKG1fY2xhc3MpCiAgICAgICAgIEpTQ2xhc3NS
ZXRhaW4oanNDbGFzcyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDExICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBKU0NsYXNzUmVmIGNsYXNzUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzczsg
fQogICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKKyAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KSAKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAg
fQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgSlNDYWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxiYWNrRnVuY3Rpb24oSgogdm9p
ZCBKU0NhbGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKLSAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0K
IAogSlNDYWxsYmFja0Z1bmN0aW9uKiBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1lKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAx
NTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IEpTQ2FsbGJhY2tGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0g
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAg
IAogICAgIC8vIEludGVybmFsRnVuY3Rpb24gbWlzaC1tYXNoZXMgY29uc3RydWN0b3IgYW5kIGZ1
bmN0aW9uIGJlaGF2aW9yIC0tIHdlIHNob3VsZCAKICAgICAvLyByZWZhY3RvciB0aGUgY29kZSBz
byB0aGlzIG92ZXJyaWRlIGlzbid0IG5lY2Vzc2FyeQogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG8pIAogICAgIHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOyAKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDEzICs1MiwxMyBAQCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiogSlNDYWxs
CiB0ZW1wbGF0ZSA8PgogU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKIHsgCi0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOyAKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsgCiB9CiAgICAgCiB0ZW1wbGF0ZSA8PgogU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsgCi0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsgCiB9CiAKIHZvaWQgSlNDYWxsYmFja09iamVjdERhdGE6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMTU0
MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcml2
YXRlKHZvaWQqIGRhdGEpOwogICAgIHZvaWQqIGdldFByaXZhdGUoKTsKIAotICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIEpTQ2xhc3NS
ZWYgY2xhc3NSZWYoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrT2JqZWN0RGF0YS0+anNDbGFz
czsgfQogICAgIGJvb2wgaW5oZXJpdHMoSlNDbGFzc1JlZikgY29uc3Q7CkBAIC0xOTYsNyArMTk2
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBKU0NhbGxiYWNrT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVj
dCkpLCAmSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpzX2luZm8pOworICAgICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPlBh
cmVudDo6c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsK
ICAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGlubGluZSBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD4qIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6YXNDYWxs
YmFja09iamVjdChKU1ZhbHVlIHZhbHVlKQogewotICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSkt
PmluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0
cyhpbmZvKCkpKTsKICAgICByZXR1cm4ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihhc09iamVj
dCh2YWx1ZSkpOwogfQogCkBAIC02OSw3ICs2OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+
CiB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwotICAgIEFT
U0VSVChQYXJlbnQ6OmluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NFUlQoUGFyZW50Ojppbmhl
cml0cyhpbmZvKCkpKTsKICAgICBpbml0KGV4ZWMpOwogfQogCkBAIC03Nyw3ICs3Nyw3IEBAIHZv
aWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpmaW5pc2hDcmUKIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+CiB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewotICAgIEFTU0VSVChQYXJlbnQ6OmluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NF
UlQoUGFyZW50Ojppbmhlcml0cyhpbmZvKCkpKTsKICAgICBBU1NFUlQoUGFyZW50Ojppc0dsb2Jh
bE9iamVjdCgpKTsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgaW5pdChqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzKS0+Z2xvYmFsRXhlYygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2LDEyICs0MDYsMTIgQEAgdm9pZCogSlNPYmplY3RHZXRQcml2YXRlKEpTT2JqZWN0UmVm
IG9iagogewogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHVuY2hlY2tlZFRvSlMob2JqZWN0KTsK
ICAgICAKLSAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTR2xv
YmFsT2JqZWN0Pjo6c19pbmZvKSkKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNDYXN0
PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2YXRl
KCk7Ci0gICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0Rlc3Ry
dWN0aWJsZU9iamVjdD46OnNfaW5mbykpCisgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cyhKU0Nh
bGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6aW5mbygpKSkKICAgICAgICAgcmV0
dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2Jq
ZWN0KS0+Z2V0UHJpdmF0ZSgpOwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgaWYgKGpz
T2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpz
X2luZm8pKQorICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+Z2V0UHJpdmF0ZSgpOwog
I2VuZGlmCiAgICAgCkBAIC00MjIsMTYgKzQyMiwxNiBAQCBib29sIEpTT2JqZWN0U2V0UHJpdmF0
ZShKU09iamVjdFJlZiBvYmplCiB7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdW5jaGVja2Vk
VG9KUyhvYmplY3QpOwogICAgIAotICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8pKSB7CisgICAgaWYgKGpzT2JqZWN0LT5p
bmhlcml0cyhKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKSkgewogICAg
ICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCkt
PnNldFByaXZhdGUoZGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAo
anNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
Pjo6c19pbmZvKSkgeworICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoSlNDYWxsYmFja09iamVj
dDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmluZm8oKSkpIHsKICAgICAgICAganNDYXN0PEpTQ2Fs
bGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRl
KGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKLSAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTQVBJ
V3JhcHBlck9iamVjdD46OnNfaW5mbykpIHsKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6aW5mbygpKSkgewogICAgICAgICBq
c0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Kj4oanNPYmplY3QpLT5z
ZXRQcml2YXRlKGRhdGEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00NDcsMTIg
KzQ0NywxMiBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5KEpTCiAgICAg
SlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0Owog
ICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkp
KTsKLSAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFs
T2JqZWN0Pjo6c19pbmZvKSkKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpTQ2FsbGJhY2tP
YmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbmZvKCkpKQogICAgICAgICByZXN1bHQgPSBqc0Nhc3Q8
SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCktPmdldFByaXZhdGVQ
cm9wZXJ0eShuYW1lKTsKLSAgICBlbHNlIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJh
Y2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpzX2luZm8pKQorICAgIGVsc2UgaWYgKGpz
T2JqZWN0LT5pbmhlcml0cyhKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6
aW5mbygpKSkKICAgICAgICAgcmVzdWx0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0
cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlUHJvcGVydHkobmFtZSk7CiAj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBlbHNlIGlmIChqc09iamVjdC0+aW5oZXJpdHMo
JkpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvKSkKKyAgICBlbHNl
IGlmIChqc09iamVjdC0+aW5oZXJpdHMoSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmpl
Y3Q+OjppbmZvKCkpKQogICAgICAgICByZXN1bHQgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlUHJvcGVydHkobmFtZSk7
CiAjZW5kaWYKICAgICByZXR1cm4gdG9SZWYoZXhlYywgcmVzdWx0KTsKQEAgLTQ2NSwxNiArNDY1
LDE2IEBAIGJvb2wgSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkoSlNDb250ZXgKICAgICBKU09i
amVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWUgPyB0b0pTKGV4ZWMsIHZhbHVlKSA6IEpTVmFsdWUoKTsKICAgICBJZGVudGlmaWVyIG5hbWUo
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSk7Ci0gICAgaWYgKGpzT2JqZWN0
LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbykpIHsK
KyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmpl
Y3Q+OjppbmZvKCkpKSB7CiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFs
T2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPnZtKCksIG5hbWUs
IGpzVmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGpzT2JqZWN0
LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OnNfaW5m
bykpIHsKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0
cnVjdGlibGVPYmplY3Q+OjppbmZvKCkpKSB7CiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5
KGV4ZWMtPnZtKCksIG5hbWUsIGpzVmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5mbykpIHsKKyAgICBpZiAo
anNPYmplY3QtPmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6
aW5mbygpKSkgewogICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJP
YmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJvcGVydHkoZXhlYy0+dm0oKSwgbmFtZSwg
anNWYWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTQ4OCwxNiArNDg4LDE2
IEBAIGJvb2wgSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkoSlNDb24KICAgICBBUElFbnRy
eVNoaW0gZW50cnlTaGltKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2Jq
ZWN0KTsKICAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVj
LT52bSgpKSk7Ci0gICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxK
U0dsb2JhbE9iamVjdD46OnNfaW5mbykpIHsKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpT
Q2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbmZvKCkpKSB7CiAgICAgICAgIGpzQ2Fz
dDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pio+KGpzT2JqZWN0KS0+ZGVsZXRlUHJp
dmF0ZVByb3BlcnR5KG5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVj
dD46OnNfaW5mbykpIHsKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjppbmZvKCkpKSB7CiAgICAgICAgIGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+ZGVsZXRlUHJp
dmF0ZVByb3BlcnR5KG5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKLSAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNr
T2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5mbykpIHsKKyAgICBpZiAoanNPYmplY3Qt
PmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6aW5mbygpKSkg
ewogICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Kj4o
anNPYmplY3QpLT5kZWxldGVQcml2YXRlUHJvcGVydHkobmFtZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNw
cAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVl
UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEyICsxNzcsMTIgQEAgYm9vbCBKU1ZhbHVl
SXNPYmplY3RPZkNsYXNzKEpTQ29udGV4dFJlZgogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMo
ZXhlYywgdmFsdWUpOwogICAgIAogICAgIGlmIChKU09iamVjdCogbyA9IGpzVmFsdWUuZ2V0T2Jq
ZWN0KCkpIHsKLSAgICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTR2xv
YmFsT2JqZWN0Pjo6c19pbmZvKSkKKyAgICAgICAgaWYgKG8tPmluaGVyaXRzKEpTQ2FsbGJhY2tP
YmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbmZvKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pio+KG8pLT5pbmhlcml0cyhqc0NsYXNz
KTsKLSAgICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0Pjo6c19pbmZvKSkKKyAgICAgICAgaWYgKG8tPmluaGVyaXRzKEpTQ2FsbGJhY2tP
YmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjppbmZvKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KG8pLT5pbmhl
cml0cyhqc0NsYXNzKTsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICBpZiAoby0+
aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvKSkK
KyAgICAgICAgaWYgKG8tPmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6aW5mbygpKSkKICAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+Kj4obyktPmluaGVyaXRzKGpzQ2xhc3MpOwogI2VuZGlmCiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vh
a09iamVjdE1hcFJlZlByaXZhdGUuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNXZWFrT2JqZWN0TWFwU2V0KEpTQ29udGV4dFJl
ZiBjdHgKICAgICBKU09iamVjdCogb2JqID0gdG9KUyhvYmplY3QpOwogICAgIGlmICghb2JqKQog
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG9iai0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8pIHx8IG9iai0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tP
YmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpzX2luZm8pKTsKKyAgICBBU1NFUlQob2JqLT5p
bmhlcml0cyhKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKSB8fCBvYmot
PmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjppbmZvKCkp
KTsKICAgICBtYXAtPm1hcCgpLnNldChrZXksIG9iaik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE1
NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxP
YmplY3QpOwotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25J
bXBsKiBpbXBsKCkgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBDYWxsTGlua1N0YXR1czo6Q2Fs
bExpbmtTdGF0dXMoSlNWYWx1ZSB2CiAgICAgCiAgICAgbV9zdHJ1Y3R1cmUgPSB2YWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCk7CiAgICAgCi0gICAgaWYgKCF2YWx1ZS5hc0NlbGwoKS0+aW5oZXJp
dHMoJkpTRnVuY3Rpb246OnNfaW5mbykpCisgICAgaWYgKCF2YWx1ZS5hc0NlbGwoKS0+aW5oZXJp
dHMoSlNGdW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUuYXNDZWxsKCkpLT5leGVjdXRhYmxl
KCk7CkBAIC01Niw3ICs1Niw3IEBAIEpTRnVuY3Rpb24qIENhbGxMaW5rU3RhdHVzOjpmdW5jdGlv
bigpIGMKICAgICBpZiAoIW1fY2FsbFRhcmdldCB8fCAhbV9jYWxsVGFyZ2V0LmlzQ2VsbCgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBpZiAoIW1fY2FsbFRhcmdldC5hc0NlbGwoKS0+
aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpCisgICAgaWYgKCFtX2NhbGxUYXJnZXQuYXND
ZWxsKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAogICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KG1fY2FsbFRhcmdldC5hc0NlbGwo
KSk7CkBAIC02Nyw3ICs2Nyw3IEBAIEludGVybmFsRnVuY3Rpb24qIENhbGxMaW5rU3RhdHVzOjpp
bnRlcm4KICAgICBpZiAoIW1fY2FsbFRhcmdldCB8fCAhbV9jYWxsVGFyZ2V0LmlzQ2VsbCgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBpZiAoIW1fY2FsbFRhcmdldC5hc0NlbGwoKS0+
aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OnNfaW5mbykpCisgICAgaWYgKCFtX2NhbGxUYXJn
ZXQuYXNDZWxsKCktPmluaGVyaXRzKEludGVybmFsRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KG1f
Y2FsbFRhcmdldC5hc0NlbGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNTMsNyArMTI1Myw3
IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW4KIHsKICAgICBSRUxF
QVNFX0FTU0VSVChpbmxpbmVDYWxsRnJhbWUpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlID0gaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOwotICAgIFJFTEVBU0VfQVNT
RVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmRnVuY3Rpb25FeGVj
dXRhYmxlOjpzX2luZm8pOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVy
ZSgpLT5jbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29k
ZUZvckNvbnN0cnVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUxLDE5ICsyNTEsMTkgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb25BYmJyZXZpYXRlZChQ
cmludFN0cgogCiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNGaW5hbE9i
amVjdDo6c19pbmZvKQorICAgIGlmIChjbGFzc0luZm8gPT0gSlNGaW5hbE9iamVjdDo6aW5mbygp
KQogICAgICAgICByZXR1cm4gU3BlY0ZpbmFsT2JqZWN0OwogICAgIAotICAgIGlmIChjbGFzc0lu
Zm8gPT0gJkpTQXJyYXk6OnNfaW5mbykKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTQXJyYXk6Omlu
Zm8oKSkKICAgICAgICAgcmV0dXJuIFNwZWNBcnJheTsKICAgICAKLSAgICBpZiAoY2xhc3NJbmZv
ID09ICZBcmd1bWVudHM6OnNfaW5mbykKKyAgICBpZiAoY2xhc3NJbmZvID09IEFyZ3VtZW50czo6
aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY0FyZ3VtZW50czsKICAgICAKLSAgICBpZiAoY2xh
c3NJbmZvID09ICZTdHJpbmdPYmplY3Q6OnNfaW5mbykKKyAgICBpZiAoY2xhc3NJbmZvID09IFN0
cmluZ09iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1N0cmluZ09iamVjdDsKICAg
ICAKLSAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTRnVuY3Rpb246OnNfaW5mbykp
CisgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rpb246OmluZm8oKSkpCiAg
ICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7CkBAIC0yOTEsNyArMjkxLDcg
QEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKAogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZigmSlNPYmplY3Q6OnNf
aW5mbykpCisgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTT2JqZWN0OjppbmZvKCkp
KQogICAgICAgICByZXR1cm4gU3BlY09iamVjdE90aGVyOwogICAgIAogICAgIHJldHVybiBTcGVj
Q2VsbE90aGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgsNyArMTA4LDcgQEAgc2l6ZV90IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpw
YXJhbQogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxk
cmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NF
UlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpA
QCAtMjIxLDcgKzIyMSw3IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhW
TSoKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVj
dCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVy
ZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldp
dGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mCiB2b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAm
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0
dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSwxMiArMTc5LDEyIEBAIHByb3RlY3RlZDoKIHB1YmxpYzoKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CiAKLSAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiB9OwogCiBzdHJ1Y3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHByb3RlY3RlZDoK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJF
X0lORk87CiB9OwogCiBjbGFzcyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxp
bmtlZENvZGVCbG9jayB7CkBAIC01NjIsNyArNTYyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CisgICAgREVDTEFSRV9JTkZPOwogfTsKIAogY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKQEAgLTYwOSwxMiArNjA5
LDEyIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2tU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cisg
ICAgREVDTEFSRV9JTkZPOwogfTsKIAogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrIDogcHVi
bGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKQEAgLTY1MSwxMiArNjUxLDEyIEBAIHByaXZh
dGU6CiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwog
Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwog
fTsKIAogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENv
ZGVCbG9jayB7CkBAIC02ODAsMTIgKzY4MCwxMiBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZv
KFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCi0gICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogfTsKIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lv
biAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGlubGluZSBSZWNvbXBpbGVyOjp+UmVj
b21waWxlcigpCiAKIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBj
ZWxsKQogewotICAgIGlmICghY2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpCisg
ICAgaWYgKCFjZWxsLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAgdm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKAog
dm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEZWJ1Z2dlckFjdGl2YXRpb24qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8RGVidWdnZXJBY3RpdmF0aW9uKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJl
RmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkocmV2aXNp
b24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0
aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAg
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAot
ICAgICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAg
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKSAKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgU3RyaW5nIERlYnVnZ2VyQ2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBtX2NhbGxGcmFt
ZS0+Y2FsbGVlKCk7Ci0gICAgaWYgKCFmdW5jdGlvbiB8fCAhZnVuY3Rpb24tPmluaGVyaXRzKCZK
U0Z1bmN0aW9uOjpzX2luZm8pKQorICAgIGlmICghZnVuY3Rpb24gfHwgIWZ1bmN0aW9uLT5pbmhl
cml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAg
cmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLT5uYW1lKG1fY2FsbEZyYW1lKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6
IHsKLSAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmU3Ry
aW5nT2JqZWN0OjpzX2luZm8pOworICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IFN0cmluZ09iamVjdDo6aW5mbygpKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICAKICAgICBVTlVTRURf
UEFSQU0ocHJlZGljdGlvbik7IC8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgZG8gbW9yZSB0aGluZ3Mu
CiAgICAgCi0gICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSAmQXJyYXlDb25zdHJ1Y3Rv
cjo6c19pbmZvKSB7CisgICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSBBcnJheUNvbnN0
cnVjdG9yOjppbmZvKCkpIHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IDIpIHsKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLAogICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSkpOwpAQCAtMTU5OSw3
ICsxNTk5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAg
ICAgICBzZXQocmVzdWx0T3BlcmFuZCwKICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBOZXdBcnJheSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIE9wSW5mbygwKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8o
KSA9PSAmU3RyaW5nQ29uc3RydWN0b3I6OnNfaW5mbykgeworICAgIH0gZWxzZSBpZiAoZnVuY3Rp
b24tPmNsYXNzSW5mbygpID09IFN0cmluZ0NvbnN0cnVjdG9yOjppbmZvKCkpIHsKICAgICAgICAg
Tm9kZSogcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIDw9IDEpCkBAIC0xODIyLDcgKzE4MjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUtPm1fc2luZ2xl
dG9uVmFsdWVJc1RvcAogICAgICAgICAgICAgICAgICAgICB8fCAhcHJvZmlsZS0+bV9zaW5nbGV0
b25WYWx1ZQogICAgICAgICAgICAgICAgICAgICB8fCAhcHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1
ZS5pc0NlbGwoKQotICAgICAgICAgICAgICAgICAgICB8fCBwcm9maWxlLT5tX3NpbmdsZXRvblZh
bHVlLmFzQ2VsbCgpLT5jbGFzc0luZm8oKSAhPSAmU3RydWN0dXJlOjpzX2luZm8pCisgICAgICAg
ICAgICAgICAgICAgIHx8IHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUuYXNDZWxsKCktPmNsYXNz
SW5mbygpICE9IFN0cnVjdHVyZTo6aW5mbygpKQogICAgICAgICAgICAgICAgICAgICBzZXRUaGlz
KGFkZFRvR3JhcGgoVG9UaGlzLCBvcDEpKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaCgKQEAgLTE4NDAsNyArMTg0MCw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGJvb2wgYWxyZWFk
eUVtaXR0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pT
Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtD
b25zdGFudCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChjZWxsLT5pbmhlcml0cygmSlNGdW5j
dGlvbjo6c19pbmZvKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNlbGwtPmluaGVyaXRzKEpT
RnVuY3Rpb246OmluZm8oKSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICAgICAg
ICAgICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogYWxsb2NhdGlvblByb2ZpbGUgPSBmdW5j
dGlvbi0+dHJ5R2V0QWxsb2NhdGlvblByb2ZpbGUoKTsKQEAgLTE5MTksNyArMTkxOSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB8
fCAhcHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0KEpTU3RhY2s6OkNhbGxlZSkp
OwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1f
c2luZ2xldG9uVmFsdWUuYXNDZWxsKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5hc0NlbGwo
KS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7CiAgICAgICAgICAgICAgICAgTm9kZSog
YWN0dWFsQ2FsbGVlID0gZ2V0KEpTU3RhY2s6OkNhbGxlZSk7CiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8ocHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5h
c0NlbGwoKSksIGFjdHVhbENhbGxlZSk7CiAgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhw
cm9maWxlLT5tX3NpbmdsZXRvblZhbHVlLmFzQ2VsbCgpKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIXNwZWNpZmljVmFs
dWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIXNw
ZWNpZmljVmFsdWUtPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKQorICAgICAgICBpZiAo
IXNwZWNpZmljVmFsdWUtPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc3BlY2lmaWNWYWx1ZSk7CkBAIC0xMTUxLDcgKzExNTEsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1
Y3R1cmUgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+c3RyaW5nT2JqZWN0
U3RydWN0dXJlKCk7CiAgICAgICAgIEFTU0VSVChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3Jl
ZFByb3RvdHlwZSgpLmlzT2JqZWN0KCkpOwotICAgICAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCkgPT0gJlN0cmlu
Z1Byb3RvdHlwZTo6c19pbmZvKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPmNsYXNzSW5mbygpID09IFN0cmluZ1Byb3Rv
dHlwZTo6aW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5
cGVPYmplY3QgPSBhc09iamVjdChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJp
bmdQcm90b3R5cGVPYmplY3QtPnN0cnVjdHVyZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJp
bnQoY29tbWEsIGluQ29udGV4dCgqbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2
aW91c1N0cnVjdHVyZSwgY29udGV4dCksICIgLT4gIiwgaW5Db250ZXh0KCpub2RlLT5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgY29udGV4dCkpOwogICAgIGlmIChub2Rl
LT5oYXNGdW5jdGlvbigpKSB7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImZ1bmN0aW9uKCIs
IFJhd1BvaW50ZXIobm9kZS0+ZnVuY3Rpb24oKSksICIsICIpOwotICAgICAgICBpZiAobm9kZS0+
ZnVuY3Rpb24oKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpIHsKKyAgICAgICAgaWYg
KG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpIHsKICAgICAg
ICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5m
dW5jdGlvbigpKTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkK
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxob3N0IGZ1bmN0aW9uPiIpOwpAQCAtMjA5LDcg
KzIwOSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAg
ICAgb3V0LnByaW50KCIpIik7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNFeGVjdXRhYmxlKCkp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmV4ZWN1dGFibGUoKS0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6c19pbmZvKSkKKyAgICAgICAgaWYgKG5vZGUtPmV4ZWN1dGFibGUoKS0+aW5oZXJp
dHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKQogICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZXhlY3V0YWJsZSgiLCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihub2RlLT5leGVjdXRhYmxlKCkpKSwgIikiKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZXhlY3V0YWJsZShub3QgZnVuY3Rpb246ICIs
IFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0YWJsZSgpKSwgIikiKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OwotICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8p
KQorICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKEludGVybmFsRnVuY3Rpb246OmluZm8oKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU2LDcgKzc1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKLSAgICBpZiAoIWJh
c2UtPmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpCisgICAgaWYgKCFiYXNlLT5pbmhl
cml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwogCiAgICAgQVNTRVJUKGFyZ3VtZW50LT5pc1N0cmluZygpIHx8IGFyZ3VtZW50
LT5pc09iamVjdCgpKTsKQEAgLTc2OSw3ICs3NjksNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZWdFeHBUZXN0CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICBpZiAoIWJhc2UtPmluaGVy
aXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpIHsKKyAgICBpZiAoIWJhc2UtPmluaGVyaXRzKFJl
Z0V4cE9iamVjdDo6aW5mbygpKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE0MjgsNyArMTQyOCw3IEBAIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVu
Y3Rpb25FeGVjdXRhYmxlKQogewotICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVy
aXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpOworICAgIEFTU0VSVChmdW5jdGlvbkV4
ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKTsK
QEAgLTE0MzYsNyArMTQzNiw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
dW5jdGkKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQogewotICAgIEFT
U0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNf
aW5mbykpOworICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aW5mbygpKSk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkpOwpAQCAtMTQ0NCw3
ICsxNDQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZQogCiBK
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCiB7Ci0gICAgQVNT
RVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6c19pbmZvKSk7CisgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJp
dHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsNyArNzA1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICBleHBl
Y3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOworICAgICAgICBleHBlY3RlZENsYXNz
SW5mbyA9IEpTU3RyaW5nOjppbmZvKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXJyYXk6
OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICBleHBlY3RlZENsYXNzSW5m
byA9ICZBcmd1bWVudHM6OnNfaW5mbzsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBBcmd1
bWVudHM6OmluZm8oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgogICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CkBAIC00NDUxLDcgKzQ0NTEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqCiAgICAgICAgIHNsb3dQYXRoKTsK
ICAgICAKICAgICBtX2ppdC5zdG9yZVB0cigKLSAgICAgICAgVHJ1c3RlZEltbVB0cigmU3RyaW5n
T2JqZWN0OjpzX2luZm8pLAorICAgICAgICBUcnVzdGVkSW1tUHRyKFN0cmluZ09iamVjdDo6aW5m
bygpKSwKICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0Rlc3RydWN0
aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IG1faml0LnN0b3JlNjQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgICAgIGppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZKU0Z1bmN0aW9u
OjpzX2luZm8pKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNG
dW5jdGlvbjo6aW5mbygpKSkpOwogICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBK
U0Z1bmN0aW9uLgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODEsNyArMTgxLDcgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxG
cgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoYXNPYmplY3QoYXJndW1lbnRz
KS0+Y2xhc3NJbmZvKCkgPT0gJkFyZ3VtZW50czo6c19pbmZvKSB7CisgICAgaWYgKGFzT2JqZWN0
KGFyZ3VtZW50cyktPmNsYXNzSW5mbygpID09IEFyZ3VtZW50czo6aW5mbygpKSB7CiAgICAgICAg
IEFyZ3VtZW50cyogYXJnc09iamVjdCA9IGFzQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICAgICAg
IHVuc2lnbmVkIGFyZ0NvdW50ID0gYXJnc09iamVjdC0+bGVuZ3RoKGNhbGxGcmFtZSk7CiAgICAg
ICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3Io
YXJnQ291bnQgKyAxKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGVn
YWN5UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9MZWdhY3lQcm9maWxlci5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2OCw3ICsxNjgsNyBAQCBDYWxsSWRlbnRpZmllciBMZWdhY3lQcm9maWxlcjo6Y3JlYXRlQ2Fs
CiAgICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmllcihHbG9iYWxDb2RlRXhlY3V0aW9uLCBkZWZh
dWx0U291cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7CiAgICAgaWYgKCFmdW5jdGlvblZhbHVl
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmllcigiKHVua25vd24pIiwg
ZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwotICAgIGlmIChhc09iamVjdChm
dW5jdGlvblZhbHVlKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykgfHwgYXNPYmplY3Qo
ZnVuY3Rpb25WYWx1ZSktPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8pKQorICAg
IGlmIChhc09iamVjdChmdW5jdGlvblZhbHVlKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygp
KSB8fCBhc09iamVjdChmdW5jdGlvblZhbHVlKS0+aW5oZXJpdHMoSW50ZXJuYWxGdW5jdGlvbjo6
aW5mbygpKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0aW9u
SW1wKGV4ZWMsIGFzT2JqZWN0KGZ1bmN0aW9uVmFsdWUpLCBkZWZhdWx0U291cmNlVVJMLCBkZWZh
dWx0TGluZU51bWJlcik7CiAgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKG1ha2VTdHJpbmcoIigi
LCBhc09iamVjdChmdW5jdGlvblZhbHVlKS0+bWV0aG9kVGFibGUoKS0+Y2xhc3NOYW1lKGFzT2Jq
ZWN0KGZ1bmN0aW9uVmFsdWUpKSwgIiBvYmplY3QpIiksIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1
bHRMaW5lTnVtYmVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBj
b25zdCBDbGFzc0luZm8gQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBCiB2b2lkIEFyZ3VtZW50czo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxBcmd1bWVudHMqPihjZWxsKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FT
U0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE1NDAxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0ZWFyT2ZmRm9ySW5saW5lQ2Fs
bEZyYW1lKFZNJiB2bSwgUmVnaXN0ZXIqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIAogcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApA
QCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsgCiAgICAgfQogICAgICAgICAKIHByb3RlY3RlZDoKQEAgLTE0Myw3ICsxNDMs
NyBAQCBBcmd1bWVudHMqIGFzQXJndW1lbnRzKEpTVmFsdWUpOwogCiBpbmxpbmUgQXJndW1lbnRz
KiBhc0FyZ3VtZW50cyhKU1ZhbHVlIHZhbHVlKQogewotICAgIEFTU0VSVChhc09iamVjdCh2YWx1
ZSktPmluaGVyaXRzKCZBcmd1bWVudHM6OnNfaW5mbykpOworICAgIEFTU0VSVChhc09iamVjdCh2
YWx1ZSktPmluaGVyaXRzKEFyZ3VtZW50czo6aW5mbygpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFyZ3VtZW50cyo+KGFzT2JqZWN0KHZhbHVlKSk7CiB9CiAKQEAgLTIyOCw3ICsyMjgsNyBA
QCBpbmxpbmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgQXJndW1lCiBpbmxpbmUgdm9pZCBB
cmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZS0+dm0oKSk7Ci0gICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKICAgICBKU0Z1bmN0
aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwog
ICAgIG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CkBAIC0yNTcs
NyArMjU3LDcgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogaW5s
aW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oY2FsbEZyYW1lLT52bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwor
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgbV9u
dW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAg
Q2FsbFR5cGUgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSgogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3RydWN0b3JJc0FycmF5KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgw
KS5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDExICs0MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zdHJ1
Y3RvcjsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBE
RUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAg
ICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMyLDcgKzEzMiw3IEBAIHZvaWQgQXJyYXlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEpTR2wK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7
CiB9CiAKQEAgLTQyNyw3ICs0MjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKICAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoY3VyQXJnLmlu
aGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CisgICAgICAgIGlmIChjdXJBcmcuaW5oZXJpdHMo
SlNBcnJheTo6aW5mbygpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY3VyQXJn
LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiBjdXJPYmplY3QgPSBjdXJBcmcudG9PYmplY3QoZXhlYyk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spIHsKQEAg
LTYxMCw3ICs2MTAsNyBAQCBpbmxpbmUgSlNWYWx1ZSBnZXRPckhvbGUoSlNPYmplY3QqIG9iaiwg
CiAKIHN0YXRpYyBib29sIGF0dGVtcHRGYXN0U29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBKU1ZhbHVlIGZ1bmN0aW9uLCBDYWxsRGF0YSYgY2FsbERhdGEsIENhbGxUeXBl
JiBjYWxsVHlwZSkKIHsKLSAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgIT0gJkpTQXJyYXk6
OnNfaW5mbworICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSAhPSBKU0FycmF5OjppbmZvKCkK
ICAgICAgICAgfHwgYXNBcnJheSh0aGlzT2JqKS0+aGFzU3BhcnNlTWFwKCkKICAgICAgICAgfHwg
c2hvdWxkVXNlU2xvd1B1dCh0aGlzT2JqLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDExICszOCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCi0gICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5Q2xhc3MpOworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgQXJyYXlDbGFzcyk7CiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDExICszOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAg
ICB9CiAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lO
Rk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgeyAKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAgQm9vbGVhbk9iamVjdDo6Qm9vbGVhbk9iamVjdChWTSYgdm0sIFN0cgogdm9pZCBCb29s
ZWFuT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDE1NDAx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJv
b2xlYW47CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBD
bGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgICAgIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIH07CiAKQEAgLTUyLDcg
KzUyLDcgQEAgQm9vbGVhbk9iamVjdCogYXNCb29sZWFuT2JqZWN0KEpTVmFsdWUpOwogCiBpbmxp
bmUgQm9vbGVhbk9iamVjdCogYXNCb29sZWFuT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykp
OworICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKEJvb2xlYW5PYmplY3Q6Omlu
Zm8oKSkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxCb29sZWFuT2JqZWN0Kj4oYXNPYmplY3Qo
dmFsdWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw3ICs2MCw3IEBAIHZvaWQgQm9vbGVhblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXgK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBzZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPnZtKCksIGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKIGJvb2wgQm9v
bGVhblByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90
KQpAQCAtODUsNyArODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Q
cm90CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4odHJ1ZSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCkpOwogCi0gICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCisgICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoQm9vbGVhbk9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBpZiAoYXNCb29sZWFuT2JqZWN0KHRo
aXNWYWx1ZSktPmludGVybmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQpAQCAtMTAxLDcg
KzEwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3QKICAgICBp
ZiAodGhpc1ZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNWYWx1ZSk7CiAKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmQm9vbGVhbk9iamVj
dDo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhCb29sZWFuT2JqZWN0Ojpp
bmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXNCb29sZWFuT2JqZWN0KHRoaXNWYWx1ZSktPmludGVybmFs
VmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICsz
NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwcm90b3R5cGU7CiAgICAgfQogICAgICAg
ICAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHByb3Rl
Y3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEw
Niw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywKICAgICBpZiAo
bnVtQXJncyA9PSAwKSAvLyBuZXcgRGF0ZSgpIEVDTUEgMTUuOS4zLjMKICAgICAgICAgdmFsdWUg
PSBqc0N1cnJlbnRUaW1lKCk7CiAgICAgZWxzZSBpZiAobnVtQXJncyA9PSAxKSB7Ci0gICAgICAg
IGlmIChhcmdzLmF0KDApLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbykpCisgICAgICAg
IGlmIChhcmdzLmF0KDApLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkKICAgICAgICAg
ICAgIHZhbHVlID0gYXNEYXRlSW5zdGFuY2UoYXJncy5hdCgwKSktPmludGVybmFsTnVtYmVyKCk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSBhcmdzLmF0
KDApLnRvUHJpbWl0aXZlKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCwxMSArMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY29u
c3RydWN0b3I7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKKyAgICAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5j
cHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE0ICs0MiwxNCBAQCBEYXRlSW5z
dGFuY2U6OkRhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiB2b2lkIERhdGVJbnN0YW5jZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTsKICAgICBzZXRJbnRlcm5hbFZhbHVlKHZtLCBqc05hTigpKTsKIH0KIAogdm9pZCBEYXRlSW5z
dGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgZG91YmxlIHRpbWUpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHNldEludGVybmFsVmFsdWUodm0sIGpzTnVt
YmVyKHRpbWVDbGlwKHRpbWUpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBkb3VibGUgaW50ZXJuYWxOdW1i
ZXIoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbFZhbHVlKCkuYXNOdW1iZXIoKTsgfQogCi0gICAg
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgewpAQCAt
NzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToK
QEAgLTg0LDcgKzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgRGF0ZUluc3Rh
bmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSk7CisgICAg
ICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygp
KSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihhc09iamVjdCh2
YWx1ZSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEs
NyArMzQxLDcgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBE
YXRlVGltZUZvcm1hdCBmb3JtYXQsIGJvb2wgYXNVVENWYXJpYW50KQogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJp
dHMoRGF0ZUluc3RhbmNlOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5j
ZSh0aGlzVmFsdWUpOwpAQCAtNTA5LDcgKzUwOSw3IEBAIERhdGVQcm90b3R5cGU6OkRhdGVQcm90
b3R5cGUoRXhlY1N0YXRlKiAKIHZvaWQgRGF0ZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBh
ZGRlZCBsYXRlciwgYWZ0ZXIgRGF0ZUNvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0LgogfQpAQCAt
NTQxLDcgKzU0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2lu
Zm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgCiAgICAgRGF0ZUlu
c3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtNTg3
LDcgKzU4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2lu
Zm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCkBAIC01OTcsNyAr
NTk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2lu
Zm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCkBAIC02MDcsNyAr
NjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2lu
Zm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCkBAIC02MTcsNyAr
NjE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGltZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0g
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkpOwpAQCAtNjI2LDcg
KzYyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pKQor
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRo
aXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCkBAIC02NDAsNyArNjQwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwot
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbykpCisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoRGF0ZUluc3RhbmNlOjppbmZvKCkpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0Rh
dGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKQEAgLTY2MCw3ICs2NjAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFz
RGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtNjc0LDcgKzY3NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5z
dGFuY2UodGhpc1ZhbHVlKTsgCkBAIC02ODgsNyArNjg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhEYXRl
SW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNW
YWx1ZSk7IApAQCAtNzAyLDcgKzcwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnUKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5z
dGFuY2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoRGF0ZUluc3RhbmNl
OjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAg
IERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAK
QEAgLTcxNiw3ICs3MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5m
bykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoRGF0ZUluc3RhbmNlOjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIERhdGVJbnN0YW5j
ZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKQEAgLTczMCw3ICs3
MzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwot
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbykpCisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoRGF0ZUluc3RhbmNlOjppbmZvKCkpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0Rh
dGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKQEAgLTc0NCw3ICs3NDQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFz
RGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtNzU4LDcgKzc1OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5z
dGFuY2UodGhpc1ZhbHVlKTsgCkBAIC03NzIsNyArNzcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhE
YXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRo
aXNWYWx1ZSk7IApAQCAtNzg2LDcgKzc4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnUKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZE
YXRlSW5zdGFuY2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoRGF0ZUlu
c3RhbmNlOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
IAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFs
dWUpOyAKQEAgLTgwMCw3ICs4MDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRT
ZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3Rh
bmNlOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6
aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCkBA
IC04MTQsNyArODE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25k
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6
c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8o
KSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRGF0ZUlu
c3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtODI4
LDcgKzgyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19p
bmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtODQ0LDcg
Kzg0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19p
bmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtODYwLDcg
Kzg2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2lu
Zm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCkBAIC04NzQsNyAr
ODc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0g
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0
ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IApAQCAtODg4LDcgKzg4OCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBudW1Bcmdz
VG9Vc2UsIGJvb2wgaW5wdXRJc1VUQykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3Rh
bmNlOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6
aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsKQEAg
LTkyNSw3ICs5MjUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGlt
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRl
KiBleGVjLCBpbnQgbnVtQXJnc1RvVXNlLCBib29sIGlucHV0SXNVVEMpCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUu
aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3Rh
bmNlKHRoaXNWYWx1ZSk7CkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
RGF0ZUluc3RhbmNlOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJ
bnN0YW5jZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1Zh
bHVlKTsKQEAgLTEwOTAsNyArMTA5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnUKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dFllYXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFu
Y2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoRGF0ZUluc3RhbmNlOjpp
bmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIERh
dGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKLSAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5G
TzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTEgKzExNywxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVD
TEFSRV9JTkZPOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAK
ICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOyAKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5GTzsKIAogICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsgCi0gICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCiAg
ICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKFZNJiB2bSwg
U3RyCiB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgaWYgKCFtZXNzYWdlLmlzTnVsbCgpKQog
ICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5n
KCZ2bSwgbWVzc2FnZSksIERvbnRFbnVtKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTEgKzMxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5GTzsKIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFZlY3RvcjxTdGFj
a0ZyYW1lPiBzdGFja1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+KCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgRXJyb3JQcm90b3R5cGU6OkVy
cm9yUHJvdG90eXBlKEV4ZWNTdGF0ZQogdm9pZCBFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSwgIiIpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdChleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0
cmluZyhBU0NJSUxpdGVyYWwoIkVycm9yIikpKSwgRG9udEVudW0pOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBwcm90b3R5cGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlz
aW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMiArNTksMTIgQEAgSlNPYmplY3QqIGNy
ZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcAogCiBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihKU09iamVjdCogb2JqZWN0KQogewotICAgIHJldHVybiBvYmplY3QtPmluaGVy
aXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbyk7CisgICAgcmV0dXJuIG9iamVj
dC0+aW5oZXJpdHMoVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjppbmZvKCkpOwogfQogCiBib29s
IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU1ZhbHVlIHZhbHVlKQogewotICAgIHJl
dHVybiB2YWx1ZS5pbmhlcml0cygmVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pOwor
ICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8o
KSk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCAr
NzYsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEV2YWxFeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1
dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FT
U0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIFNj
cmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CkBAIC00
MzYsNyArNDM2LDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwog
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxh
Z3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91
dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBTY3JpcHRFeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpAQCAtNjI0LDcgKzYyNCw3IEBAIHZv
aWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXoKIHZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7
CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKQEAgLTY5MCw3ICs2OTAsNyBAQCBTdHJpbmcgRnVuY3Rpb25F
eGVjdXRhYmxlOjpwYXJhbVN0cmluZygpCiAKIENvZGVCbG9ja0hhc2ggRXhlY3V0YWJsZUJhc2U6
Omhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKSBjb25zdAogewotICAgIGlmICh0
aGlzLT5jbGFzc0luZm8oKSA9PSAmTmF0aXZlRXhlY3V0YWJsZTo6c19pbmZvKQorICAgIGlmICh0
aGlzLT5jbGFzc0luZm8oKSA9PSBOYXRpdmVFeGVjdXRhYmxlOjppbmZvKCkpCiAgICAgICAgIHJl
dHVybiBqc0Nhc3Q8Y29uc3QgTmF0aXZlRXhlY3V0YWJsZSo+KHRoaXMpLT5oYXNoRm9yKGtpbmQp
OwogICAgIAogICAgIHJldHVybiBqc0Nhc3Q8Y29uc3QgU2NyaXB0RXhlY3V0YWJsZSo+KHRoaXMp
LT5oYXNoRm9yKGtpbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTEgKzEwNCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX251bVBhcmFtZXRlcnNGb3JDYWxs
ID09IE5VTV9QQVJBTUVURVJTX0lTX0hPU1Q7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhD
b21wb3VuZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgfQogICAgICAgICAKICAgICAg
ICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25z
dCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
cHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSAwOwpAQCAtMzEyLDkgKzMxMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2NvbnN0cnVjdG9yKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhMZWFm
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsg
fQogICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
ICAgIERFQ0xBUkVfSU5GTzsKIAogICAgICAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Q7
CiAKQEAgLTM5MSw3ICszOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBE
RUNMQVJFX0lORk87CiAKICAgICAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0
TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4pCiAgICAgICAgIHsKQEAgLTQ2NiwxMCArNDY2LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRXZhbEV4ZWN1dGFibGVUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhFdmFsRXhlY3V0YWJsZVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5GTzsK
IAogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKQEAgLTU0NSwxMCArNTQ1LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90bykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhQcm9ncmFtRXhlY3V0YWJsZVR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFByb2dyYW1FeGVjdXRhYmxl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9JTkZP
OwogICAgICAgICAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCkBAIC02NzEsNyArNjcx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yKEV4ZWNT
dGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykp
OworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0cyhKU0Z1bmN0aW9u
OjppbmZvKCkpKTsKICAgICAgICAgICAgIEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMt
PmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CiAKICAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQpAQCAtNjg0LDcgKzY4NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2Fs
bGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAgIEFTU0VS
VChleGVjLT5jYWxsZWUoKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoanNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpID09IHRoaXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKQEAgLTc1NiwxMCArNzU2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9JTkZPOwogICAgICAgICAKICAgICAgICAgdm9pZCB1
bmxpbmtDYWxscygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDExICs0MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBjb25zdHJ1Y3RvcjsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAKICAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGluc2VydFNlbWljb2xvbklmTmVlZAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8p
KSB7CisgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKSB7CiAg
ICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih0aGlzVmFs
dWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgImZ1
bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lKGV4ZWMpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1c
bn0iKSk7CkBAIC0xMTEsNyArMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblBybwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lKGV4ZWMpLCAiKCIsIGV4
ZWN1dGFibGUtPnBhcmFtU3RyaW5nKCksICIpICIsIHNvdXJjZVN0cmluZykpOwogICAgIH0KIAot
ICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OnNfaW5mbykpIHsK
KyAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKEludGVybmFsRnVuY3Rpb246OmluZm8oKSkpIHsK
ICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24o
dGhpc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZShleGVjKSwgIigpIHtc
biAgICBbbmF0aXZlIGNvZGVdXG59IikpOwogICAgIH0KQEAgLTEzMyw3ICsxMzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgaWYgKCFhcnJheS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIGlmICghYXJyYXkuaXNPYmplY3QoKSkKICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgICAgICBpZiAoYXNPYmpl
Y3QoYXJyYXkpLT5jbGFzc0luZm8oKSA9PSAmQXJndW1lbnRzOjpzX2luZm8pIHsKKyAgICAgICAg
aWYgKGFzT2JqZWN0KGFycmF5KS0+Y2xhc3NJbmZvKCkgPT0gQXJndW1lbnRzOjppbmZvKCkpIHsK
ICAgICAgICAgICAgIGlmIChhc0FyZ3VtZW50cyhhcnJheSktPmxlbmd0aChleGVjKSA+IEFyZ3Vt
ZW50czo6TWF4QXJndW1lbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICAgICAgYXNBcmd1bWVu
dHMoYXJyYXkpLT5maWxsQXJnTGlzdChleGVjLCBhcHBseUFyZ3MpOwpAQCAtMTk3LDcgKzE5Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAvLyBJZiB0
aGUgW1tDbGFzc11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0
aGVuIC4uLgogICAgIC8vIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8g
MC4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIGlmICh0YXJnZXRPYmplY3QtPmluaGVy
aXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKSB7CisgICAgaWYgKHRhcmdldE9iamVjdC0+aW5oZXJp
dHMoSlNGdW5jdGlvbjo6aW5mbygpKSkgewogICAgICAgICBBU1NFUlQodGFyZ2V0LmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS5pc051bWJlcigpKTsKICAgICAgICAgLy8g
YS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0
aCBvZiBBLgogICAgICAgICAvLyBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0
byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMgbGFyZ2VyLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiAx
NTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBE
RUNMQVJFX0lORk87CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpz
X2luZm8gPSB7CiB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBKU0NlbGw6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsMTAgKzYxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldFNldHRl
cihWTSYgdm0sIEpTT2JqZWN0KiBzZXR0ZXIpIHsgbV9zZXR0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0
aGlzLCBzZXR0ZXIpOyB9CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHZXR0ZXJTZXR0ZXJUeXBlLCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHZXR0ZXJTZXR0
ZXJUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgaW5mbygpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERF
Q0xBUkVfSU5GTzsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVj
dD4gbV9nZXR0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDggKzQyLDggQEAgSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihKU0dsbwog
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLSAgICBBU1NFUlQobWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEg
IT0gSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLm1ldGhvZFRhYmxlLmdldENhbGxEYXRhKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgQVNTRVJUKG1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhICE9IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2Fs
bERhdGEpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJp
bmcoJnZtLCBuYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoRXhlY1N0YXRlKik7CiAgICAgICAgIGNvbnN0
IFN0cmluZyBkaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgCiAgICAg
ICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
IAogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgaW5saW5lIEludGVybmFsRnVuY3Rpb24qIGFzSW50ZXJuYWxGdW5jdGlv
bihKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+
aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OnNfaW5mbykpOworICAgICAgICBBU1NFUlQoYXNP
YmplY3QodmFsdWUpLT5pbmhlcml0cyhJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkpKTsKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rpb24qPihhc09iamVjdCh2YWx1ZSkp
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1
ZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FQSVZhbHVlV3JhcHBlci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwx
MCArMzksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEFQSVZhbHVlV3Jh
cHBlclR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhBUElWYWx1ZVdyYXBwZXJUeXBlLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyksIGluZm8o
KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpIAogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTQWN0aXZhdGlvbjo6c19p
bmZvID0gewogdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBY3RpdmF0aW9uKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBP
dmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRp
bmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCku
b3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIEpTVmFsdWUgSlNBY3RpdmF0aW9u
Ojphcmd1bWVudHNHZXR0ZXIoRXgKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRz
UmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFsQXJn
dW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIAotICAgIEFTU0VSVChjYWxsRnJhbWUt
PnVuY2hlY2tlZFIocmVhbEFyZ3VtZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCkuaW5oZXJpdHMoJkFy
Z3VtZW50czo6c19pbmZvKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFs
QXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKS5pbmhlcml0cyhBcmd1bWVudHM6OmluZm8oKSkp
OwogICAgIHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocmVhbEFyZ3VtZW50c1JlZ2lzdGVy
KS5qc1ZhbHVlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHRlYXJPZmYoVk0mKTsKICAgICAgICAg
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJF
X0lORk87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEFjdGl2
YXRpb25PYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CisgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAKICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0OwogICAgICAgICBib29sIGlzVmFsaWRJbmRleChp
bnQpIGNvbnN0OwpAQCAtMTI3LDcgKzEyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5s
aW5lIEpTQWN0aXZhdGlvbiogYXNBY3RpdmF0aW9uKEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmSlNBY3RpdmF0aW9uOjpzX2lu
Zm8pKTsKKyAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoSlNBY3RpdmF0
aW9uOjppbmZvKCkpKTsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhc09i
amVjdCh2YWx1ZSkpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogCi0gICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgICAgICAKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAg
ICAgLy8gT0sgdG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBS
ZWdFeHBNYXRjaEFycmF5LgpAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
LCBpbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSwgaW5kZXhpbmdUeXBlKTsKICAgICB9CiAgICAgICAgIAogcHJvdGVjdGVkOgpA
QCAtMjcyLDcgKzI3Miw3IEBAIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSk7CiAKIGlubGluZSBK
U0FycmF5KiBhc0FycmF5KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoY2VsbC0+aW5oZXJp
dHMoJkpTQXJyYXk6OnNfaW5mbykpOworICAgIEFTU0VSVChjZWxsLT5pbmhlcml0cyhKU0FycmF5
OjppbmZvKCkpKTsKICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKIH0KIApAQCAt
MjgxLDcgKzI4MSw3IEBAIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUgdmFsdWUpCiAg
ICAgcmV0dXJuIGFzQXJyYXkodmFsdWUuYXNDZWxsKCkpOwogfQogCi1pbmxpbmUgYm9vbCBpc0pT
QXJyYXkoSlNDZWxsKiBjZWxsKSB7IHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJh
eTo6c19pbmZvOyB9CitpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNDZWxsKiBjZWxsKSB7IHJldHVy
biBjZWxsLT5jbGFzc0luZm8oKSA9PSBKU0FycmF5OjppbmZvKCk7IH0KIGlubGluZSBib29sIGlz
SlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXND
ZWxsKCkpOyB9CiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIEpT
Qm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGEKIHZvaWQgSlNCb3VuZEZ1bmN0
aW9uOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwotICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogCiAg
ICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
cywgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250
RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nv
cik7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0
aW9uKEV4ZQogdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJl
RmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCwxMCArNTAsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKSAKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwotICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAogICAg
IH0KIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5G
TzsKIAogcHJvdGVjdGVkOgogICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcg
QEAgdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJgogICAgICAgICBvdXQu
cHJpbnRmKCJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3
b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGlzQ2VsbCgp
KSB7Ci0gICAgICAgIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoJkpTU3RyaW5nOjpzX2luZm8pKSB7
CisgICAgICAgIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoSlNTdHJpbmc6OmluZm8oKSkpIHsKICAg
ICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7
CiAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOwogICAgICAgICAgICAgaWYgKHN0cmlu
Zy0+aXNSb3BlKCkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJgogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIgKHVucmVzb2x2ZWQpIik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1w
bCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCktPmluaGVyaXRzKCZTdHJ1Y3R1cmU6OnNf
aW5mbykpCisgICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCktPmluaGVyaXRzKFN0cnVjdHVyZTo6
aW5mbygpKSkKICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlOiAiLCBpbkNvbnRleHQo
KmpzQ2FzdDxTdHJ1Y3R1cmUqPihhc0NlbGwoKSksIGNvbnRleHQpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNlbGw6ICIsIFJhd1BvaW50ZXIoYXNDZWxsKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBA
IGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9PYmplY3QoRXhlY1MKIAogaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNGdW5jdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ2VsbCgpICYmIChh
c0NlbGwoKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykgfHwgYXNDZWxsKCktPmluaGVy
aXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8pKTsKKyAgICByZXR1cm4gaXNDZWxsKCkgJiYg
KGFzQ2VsbCgpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpIHx8IGFzQ2VsbCgpLT5pbmhl
cml0cyhJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkpKTsKIH0KIAogLy8gdGhpcyBtZXRob2QgaXMg
aGVyZSB0byBiZSBhZnRlciB0aGUgaW5saW5lIGRlY2xhcmF0aW9uIG9mIEpTQ2VsbDo6aW5oZXJp
dHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAx
NTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNiArNTIsMTggQEAgZW51bSBFbnVtZXJhdGlvbk1vZGUgewogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKIAorI2RlZmluZSBERUNM
QVJFX0VYUE9SVF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25z
dCA6OkpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBzdGF0aWMgY29uc3QgOjpKU0M6OkNsYXNzSW5mbyogaW5mbygpIHsgcmV0dXJu
ICZzX2luZm87IH0KKworI2RlZmluZSBERUNMQVJFX0lORk8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBzdGF0aWMgY29uc3QgOjpKU0M6OkNsYXNzSW5mbyBzX2luZm87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgY29uc3QgOjpKU0M6
OkNsYXNzSW5mbyogaW5mbygpIHsgcmV0dXJuICZzX2luZm87IH0KKwogY2xhc3MgSlNDZWxsIHsK
ICAgICBmcmllbmQgY2xhc3MgSlNWYWx1ZTsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7
CkBAIC0xNjUsMjcgKzE3NywyNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5
cGVuYW1lIEZyb20+CiBpbmxpbmUgVG8ganNDYXN0KEZyb20qIGZyb20pCiB7Ci0gICAgQVNTRVJU
KCFmcm9tIHx8IGZyb20tPkpTQ2VsbDo6aW5oZXJpdHMoJldURjo6UmVtb3ZlUG9pbnRlcjxUbz46
OlR5cGU6OnNfaW5mbykpOworICAgIEFTU0VSVCghZnJvbSB8fCBmcm9tLT5KU0NlbGw6OmluaGVy
aXRzKFdURjo6UmVtb3ZlUG9pbnRlcjxUbz46OlR5cGU6OmluZm8oKSkpOwogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUbz4oZnJvbSk7CiB9CiAgICAgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUbz4KIGlu
bGluZSBUbyBqc0Nhc3QoSlNWYWx1ZSBmcm9tKQogewotICAgIEFTU0VSVChmcm9tLmlzQ2VsbCgp
ICYmIGZyb20uYXNDZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMoJldURjo6UmVtb3ZlUG9pbnRlcjxU
bz46OlR5cGU6OnNfaW5mbykpOworICAgIEFTU0VSVChmcm9tLmlzQ2VsbCgpICYmIGZyb20uYXND
ZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMoV1RGOjpSZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6aW5m
bygpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvPihmcm9tLmFzQ2VsbCgpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CiBpbmxpbmUgVG8ganNEeW5hbWlj
Q2FzdChGcm9tKiBmcm9tKQogewotICAgIHJldHVybiBmcm9tLT5pbmhlcml0cygmV1RGOjpSZW1v
dmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSA/IHN0YXRpY19jYXN0PFRvPihmcm9tKSA6IDA7
CisgICAgcmV0dXJuIGZyb20tPmluaGVyaXRzKFdURjo6UmVtb3ZlUG9pbnRlcjxUbz46OlR5cGU6
OmluZm8oKSkgPyBzdGF0aWNfY2FzdDxUbz4oZnJvbSkgOiAwOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUbz4KIGlubGluZSBUbyBqc0R5bmFtaWNDYXN0KEpTVmFsdWUgZnJvbSkKIHsKLSAgICBy
ZXR1cm4gZnJvbS5pc0NlbGwoKSAmJiBmcm9tLmFzQ2VsbCgpLT5pbmhlcml0cygmV1RGOjpSZW1v
dmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSA/IHN0YXRpY19jYXN0PFRvPihmcm9tLmFzQ2Vs
bCgpKSA6IDA7CisgICAgcmV0dXJuIGZyb20uaXNDZWxsKCkgJiYgZnJvbS5hc0NlbGwoKS0+aW5o
ZXJpdHMoV1RGOjpSZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6aW5mbygpKSA/IHN0YXRpY19jYXN0
PFRvPihmcm9tLmFzQ2VsbCgpKSA6IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNp
b24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQqIGFsbG9jYXRlQ2VsbChI
ZWFwJiBoZWFwLCBzaXplX3Qgc2kKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxp
emluZ09iamVjdCgpKTsKLSAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNz
KCZUOjpzX2luZm8pOworICAgIGhlYXAudm0oKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3Mo
VDo6aW5mbygpKTsKICNlbmRpZgogICAgIEpTQ2VsbCogcmVzdWx0ID0gMDsKICAgICBpZiAoVDo6
bmVlZHNEZXN0cnVjdGlvbiAmJiBUOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxNTQw
MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCAKIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBpbnQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7Ci0g
ICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgbV9leGVjdXRhYmxlLnNldChleGVjLT52bSgpLCB0aGlzLCBleGVjdXRhYmxlKTsK
ICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc1N0cmluZyhleGVjLCBuYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcihsZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CkBA
IC0xNjAsNyArMTYwLDcgQEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29k
ZQogdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNp
dENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAg
ICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIEpTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0
dGVyKEV4ZWMKIHN0YXRpYyBib29sIHNraXBPdmVyQm91bmRGdW5jdGlvbnMoU3RhY2tJdGVyYXRv
cjo6RnJhbWUqIGZyYW1lKQogewogICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBmcmFtZS0+Y2FsbGVl
KCk7Ci0gICAgYm9vbCBzaG91bGRTa2lwID0gY2FsbGVlID8gY2FsbGVlLT5pbmhlcml0cygmSlNC
b3VuZEZ1bmN0aW9uOjpzX2luZm8pIDogZmFsc2U7CisgICAgYm9vbCBzaG91bGRTa2lwID0gY2Fs
bGVlID8gY2FsbGVlLT5pbmhlcml0cyhKU0JvdW5kRnVuY3Rpb246OmluZm8oKSkgOiBmYWxzZTsK
ICAgICByZXR1cm4gc2hvdWxkU2tpcDsKIH0KIApAQCAtMjE4LDcgKzIxOCw3IEBAIEpTVmFsdWUg
SlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4ZWNTdGEKICAgICBKU1ZhbHVlIGNhbGxlciA9IHJl
dHJpZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09iaik7CiAKICAgICAvLyBTZWUgRVM1LjEg
MTUuMy41LjQgLSBGdW5jdGlvbi5jYWxsZXIgbWF5IG5vdCBiZSB1c2VkIHRvIHJldHJpZXZlIGEg
c3RyaWN0IGNhbGxlci4KLSAgICBpZiAoIWNhbGxlci5pc09iamVjdCgpIHx8ICFhc09iamVjdChj
YWxsZXIpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkKKyAgICBpZiAoIWNhbGxlci5p
c09iamVjdCgpIHx8ICFhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZv
KCkpKQogICAgICAgICByZXR1cm4gY2FsbGVyOwogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZXIpOwogICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVu
Y3Rpb24oKSB8fCAhZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU291cmNlQ29kZSogc291cmNlQ29kZSgpIGNv
bnN0OwogCi0gICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7IAogICAgICAgICB9CiAKICAgICAgICAgTmF0aXZlRnVuY3Rp
b24gbmF0aXZlRnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgwLDcgKzQ4MCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKFZN
JiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAm
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0
dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CkBAIC02MTMsNyArNjEzLDcgQEAgRHluYW1pY0dsb2JhbE9iamVj
dFNjb3BlOjpEeW5hbWljR2xvYmFsTwogdm9pZCBzbG93VmFsaWRhdGVDZWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZ2xvYmFsT2JqZWN0LT5p
c0dsb2JhbE9iamVjdCgpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGdsb2JhbE9i
amVjdCwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoZ2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdDo6aW5mbygpKTsKIH0KIAogVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9j
ayhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpT
T2JqZWN0KiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQs
NyArMjA0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0OwogICAgIH0K
IAotICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIGJvb2wgaGFzRGVidWdnZXIoKSBjb25zdCB7IHJl
dHVybiBtX2RlYnVnZ2VyOyB9CiAgICAgYm9vbCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJu
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CkBA
IC0zOTAsNyArMzkwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xvYmFsT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKICAgICB2b2lkIHJlZ2lzdGVyV2Vh
a01hcChPcGFxdWVKU1dlYWtPYmplY3RNYXAqIG1hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNOYW1lU2NvcGU6OnNfaW5mbyA9
IHsgCiB2b2lkIEpTTmFtZVNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYW1lU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNOYW1lU2NvcGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcp
OwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNWaXNpdENoaWxkcmVuKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hbWVTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oTmFt
ZVNjb3BlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhOYW1lU2NvcGVPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OworICAgIERFQ0xBUkVfSU5GTzsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxMCArNTUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9JTkZPOwogCiAg
ICAgIHByaXZhdGU6CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2
Miw3IEBAIEpTT05PYmplY3Q6OkpTT05PYmplY3QoSlNHbG9iYWxPYmplY3QqIGcKIHZvaWQgSlNP
Tk9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQog
CiAvLyBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgb2JqZWN0cyBtdXN0IGJlIG9uIHRoZSBz
dGFjaywgc2luY2UgdGhlIEpTVmFsdWUgdGhhdCB0aGV5IGNyZWF0ZSBpcyBub3QgbWFya2VkLgpA
QCAtMTM5LDExICsxMzksMTEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHVud3JhcEJveGVkUHJp
bWl0aQogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0
cyhOdW1iZXJPYmplY3Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBqc051bWJlcihvYmplY3Qt
PnRvTnVtYmVyKGV4ZWMpKTsKLSAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmU3RyaW5nT2JqZWN0
OjpzX2luZm8pKQorICAgIGlmIChvYmplY3QtPmluaGVyaXRzKFN0cmluZ09iamVjdDo6aW5mbygp
KSkKICAgICAgICAgcmV0dXJuIG9iamVjdC0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKG9iamVj
dC0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCisgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHMoQm9vbGVhbk9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIG9iamVjdC0+dG9Q
cmltaXRpdmUoZXhlYyk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjE0LDcgKzIxNCw3IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICBpZiAoIW1fcmVw
bGFjZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVwbGFjZXIu
YXNPYmplY3QoKS0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpIHsKKyAgICBpZiAobV9yZXBs
YWNlci5hc09iamVjdCgpLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKSB7CiAgICAgICAgIG1f
dXNpbmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFuZGxlPEpTT2JqZWN0PiBhcnJh
eSA9IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIo
ZXhlYyk7CkBAIC0yMjQsNyArMjI0LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNT
dGF0ZSogZXhlYwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBpZiAobmFt
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhc09iamVjdChuYW1lKS0+aW5o
ZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSAmJiAhYXNPYmplY3QobmFtZSktPmluaGVyaXRz
KCZTdHJpbmdPYmplY3Q6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgaWYgKCFhc09iamVjdChu
YW1lKS0+aW5oZXJpdHMoTnVtYmVyT2JqZWN0OjppbmZvKCkpICYmICFhc09iamVjdChuYW1lKS0+
aW5oZXJpdHMoU3RyaW5nT2JqZWN0OjppbmZvKCkpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMzU4LDcgKzM1OCw3IEBAIFN0cmluZ2lmaWVyOjpT
dHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlG
YWlsZWQ7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkgJiYgIWhvbGRlci0+
aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpCisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkg
JiYgIWhvbGRlci0+aW5oZXJpdHMoSlNBcnJheTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZ2lmeUZhaWxlZER1ZVRvVW5kZWZpbmVkVmFsdWU7CiAKICAgICBpZiAodmFsdWUuaXNOdWxs
KCkpIHsKQEAgLTQwMSw3ICs0MDEsNyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0
cmluZ2lmaWVyCiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAob2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUp
IHsKLSAgICAgICAgaWYgKGhvbGRlci0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpIHsKKyAg
ICAgICAgaWYgKGhvbGRlci0+aW5oZXJpdHMoSlNBcnJheTo6aW5mbygpKSkgewogICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJudWxsIik7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5naWZ5U3VjY2VlZGVkOwogICAgICAgICB9CkBAIC00NjEsNyArNDYxLDcgQEAgaW5saW5lIHZv
aWQgU3RyaW5naWZpZXI6OnN0YXJ0TmV3TGluZShTdAogCiBpbmxpbmUgU3RyaW5naWZpZXI6Okhv
bGRlcjo6SG9sZGVyKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICA6IG1fb2JqZWN0KHZt
LCBvYmplY3QpCi0gICAgLCBtX2lzQXJyYXkob2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19p
bmZvKSkKKyAgICAsIG1faXNBcnJheShvYmplY3QtPmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkp
CiAgICAgLCBtX2luZGV4KDApCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9zaXplKDApCkBAIC02
NDksNyArNjQ5LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQog
ICAgICAgICAgICAgYXJyYXlTdGFydFN0YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheVN0YXJ0
U3RhdGU6IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09iamVjdCgpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoaXNKU0FycmF5KGFzT2JqZWN0KGluVmFsdWUpKSB8fCBhc09i
amVjdChpblZhbHVlKS0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0pTQXJyYXkoYXNPYmplY3QoaW5WYWx1ZSkpIHx8IGFzT2JqZWN0KGluVmFs
dWUpLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKTsKICAgICAgICAgICAgICAgICBpZiAob2Jq
ZWN0U3RhY2suc2l6ZSgpICsgYXJyYXlTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJz
aW9uKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihtX2V4ZWMsIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihtX2V4ZWMpKTsKIApAQCAtNzAwLDcgKzcwMCw3IEBAIE5FVkVS
X0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgIG9iamVjdFN0
YXJ0U3RhdGU6CiAgICAgICAgICAgICBjYXNlIE9iamVjdFN0YXJ0U3RhdGU6IHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzSlNBcnJheShhc09iamVjdChpblZhbHVlKSkgJiYgIWFzT2JqZWN0KGluVmFsdWUpLT5p
bmhlcml0cygmSlNBcnJheTo6c19pbmZvKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0pT
QXJyYXkoYXNPYmplY3QoaW5WYWx1ZSkpICYmICFhc09iamVjdChpblZhbHVlKS0+aW5oZXJpdHMo
SlNBcnJheTo6aW5mbygpKSk7CiAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFN0YWNrLnNpemUo
KSArIGFycmF5U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobV9leGVjLCBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IobV9leGVjKSk7CiAKQEAgLTc2MSw3ICs3NjEsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1
ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
aW5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpIHx8IG9iamVj
dC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgaWYgKGlzSlNB
cnJheShvYmplY3QpIHx8IG9iamVjdC0+aW5oZXJpdHMoSlNBcnJheTo6aW5mbygpKSkKICAgICAg
ICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0U3RhdGU7CiAgICAgICAgICAgICAgICAgZ290
byBvYmplY3RTdGFydFN0YXRlOwogICAgICAgICB9CkBAIC04MjAsNyArODIwLDggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAgIExvY2FsPFVua25vd24+IHZh
bHVlKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBMb2NhbDxVbmtub3duPiBy
ZXBsYWNlcihleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgTG9jYWw8VW5rbm93
bj4gc3BhY2UoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMikpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoU3RyaW5naWZpZXIoZXhlYywgcmVwbGFjZXIsIHNwYWNlKS5zdHJpbmdpZnko
dmFsdWUpLmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IFN0cmluZ2lmaWVyKGV4ZWMsIHJl
cGxhY2VyLCBzcGFjZSkuc3RyaW5naWZ5KHZhbHVlKS5nZXQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIFN0cmluZyBKU09OU3RyaW5naWZ5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgaW5kZW50KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMCArNDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERF
Q0xBUkVfSU5GTzsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIEpT
Q2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2UKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkudHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4gY2VsbDsKLSAgICBp
ZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKCZJbnRlcm5hbEZ1bmN0aW9u
OjpzX2luZm8pKQorICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2Yo
SW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIGNlbGw7CiAgICAgcmV0
dXJuIDA7CiB9CkBAIC0yMDcsNyArMjA3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcgogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGJvb2wgd2FzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb247CiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbiA9IGZhbHNlOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWwKIHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQogewogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgCiAgICAgaWYgKHRva2Vu
ICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzI0MCw3
IEBAIHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiAKIHZvaWQgSlNGaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVj
dCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNf
aW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
OwogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxz
ZTsKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250
aWd1b3VzCiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlSW50MzJTbG93KFZN
JiB2bSkKIHsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgpAQCAtOTY0LDcgKzk2
NCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlSW50MzIKIAogQ29udGln
dW91c0RvdWJsZXMgSlNPYmplY3Q6OmVuc3VyZURvdWJsZVNsb3coVk0mIHZtKQogewotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
ICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBAIC05OTAsNyArOTkwLDcgQEAgQ29udGlndW91
c0RvdWJsZXMgSlNPYmplY3Q6OmVuc3VyZURvdWJsZQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KFZNJiB2bSwgRG91YmxlVG9Db250aWd1b3VzTW9k
ZSBtb2RlKQogewotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBAIC0xMDMwLDcg
KzEwMzAsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OnJhZ2VFbnN1cmVDCiAKIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mIHZtKQogewot
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwMSwxMyAr
NzAxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsKICAgICB9CiAK
LSAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAg
ICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc0VtcHR5KCkpOwogICAgICAgICBBU1NF
UlQocHJvdG90eXBlKCkuaXNOdWxsKCkgfHwgSGVhcDo6aGVhcCh0aGlzKSA9PSBIZWFwOjpoZWFw
KHByb3RvdHlwZSgpKSk7CkBAIC03MTcsNyArNzE3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgLy8gVG8gaW5zdGFu
dGlhdGUgb2JqZWN0cyB5b3UgbGlrZWx5IHdhbnQgSlNGaW5hbE9iamVjdCwgYmVsb3cuCkBAIC05
ODUsNyArOTg1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC0xMDI3LDEyICsxMDI3LDEyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEZpbmFsT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSwgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhGaW5hbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBOb25BcnJheSwg
aW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgdmlzaXRDaGlsZHJlbkNvbW1vbihTbG90Vmlz
aXRvciYpOwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAgaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmlu
YWxPYmplY3Q6OmNyZQogCiBpbmxpbmUgYm9vbCBpc0pTRmluYWxPYmplY3QoSlNDZWxsKiBjZWxs
KQogewotICAgIHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNGaW5hbE9iamVjdDo6c19p
bmZvOworICAgIHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSBKU0ZpbmFsT2JqZWN0OjppbmZv
KCk7CiB9CiAKIGlubGluZSBib29sIGlzSlNGaW5hbE9iamVjdChKU1ZhbHVlIHZhbHVlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEsNyArMTAxLDcgQEAgSlNWYWx1ZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXQoRXhl
Ywogdm9pZCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4oY2VsbCk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQVNTRVJUKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4o
KSk7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9qc1N0cmluZ3MuZ2V0
KCksIHRoaXNPYmplY3QtPm1fanNTdHJpbmdzU2l6ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2
aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUs
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCBpbmZvKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNzMs
NyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRDYWNoZWRQcm90b3R5
cGVDaGFpbihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgeyBt
X2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgY2FjaGVkUHJvdG90eXBlQ2hhaW4p
OyB9CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIHsgcmV0
dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7IH0KICAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFt
ZUFycmF5RGF0YSwgSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQCiB2b2lkIEpTUHJv
eHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIENPTVBJTEVf
QVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAxNTQwMTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDEwICs0MywxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFByb3h5VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgSlNPYmplY3Qq
IHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU1Njb3Bl
KTsKIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+
KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5m
byk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJU
KHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4oKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBpbnQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6YWRkUmVnaXN0CiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CiAg
ICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBP
dmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRp
bmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCku
b3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE0
ICsxNTYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFN0cmlu
Z1R5cGUsIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pLCBpbmZvKCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV9sZW5ndGgpOyB9CiAgICAgICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZGbGFncygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV9m
bGFncyk7IH0KICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlZhbHVlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTU3RyaW5nLCBtX3ZhbHVlKTsgfQogCi0gICAgICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCkBAIC00OTcsNyArNDk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBpc0pTU3RyaW5nKEpT
VmFsdWUgdikgeyByZXR1cm4gdi5pc0NlbGwoKSAmJiB2LmFzQ2VsbCgpLT5jbGFzc0luZm8oKSA9
PSAmSlNTdHJpbmc6OnNfaW5mbzsgfQorICAgIGlubGluZSBib29sIGlzSlNTdHJpbmcoSlNWYWx1
ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXNDZWxsKCktPmNsYXNzSW5mbygpID09IEpT
U3RyaW5nOjppbmZvKCk7IH0KIAogICAgIC8vIC0tLSBKU1ZhbHVlIGlubGluZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAx
NTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVj
dHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
bldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogY29uc3QgKiBhZGRyZXNzT2ZSZWdpc3Rl
cnMoKSBjb25zdCB7IHJldHVybiAmbV9yZWdpc3RlcnM7IH0KICAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1ZhcmlhYmxl
T2JqZWN0LCBtX3JlZ2lzdGVycyk7IH0KIAotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29w
ZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBjb25zdCBD
bGFzc0luZm8gSlNXaXRoU2NvcGU6OnNfaW5mbyA9IHsgCiB2b2lkIEpTV2l0aFNjb3BlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNX
aXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRoU2NvcGUqPihjZWxsKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FT
U0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDEwICs1NCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgQVNTRVJUX0hBU19UUklWSUFM
X0RFU1RSVUNUT1IoSlNXcmFwcGVyTwogdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dyYXBwZXJP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJ
KHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3Jh
cHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAg
ICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW50
ZXJuYWxWYWx1ZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dyYXBwZXJPYmpl
Y3QsIG1faW50ZXJuYWxWYWx1ZSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQCBNYXRoT2JqZWN0OjpNYXRoT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnCiB2b2lkIE1h
dGhPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCAiRSIpLCBqc051bWJlcihleHAoMS4wKSksIERvbnREZWxldGUg
fCBEb250RW51bSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJMTjIiKSwganNOdW1iZXIobG9nKDIuMCkpLCBE
b250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDExICszOSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAg
ICAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaAkocmV2
aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUNvbnN0
cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsgCiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuaAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDExICszNSwxMSBAQCBjbGFzcyBOYW1lSW5zdGFuY2UgOiBwdWJsaWMgSlNE
ZXN0cnVjdGliCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNl
OwogCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZP
OwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhOYW1lSW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhOYW1lSW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIE5hbWVJbnN0YW5jZSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQpAQCAtNjAsNyArNjAsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewogICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CisgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAKICAgICBQcml2
YXRlTmFtZSBtX3ByaXZhdGVOYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIE5hbWVQcm90b3R5cGU6Ok5hbWVQcm90b3R5cGUoRXhlY1N0YXRlKiAK
IHZvaWQgTmFtZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwotICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBib29sIE5h
bWVQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkK
QEAgLTc3LDcgKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlTmFt
ZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QodGhpc1ZhbHVlKTsKLSAgICBpZiAoIXRoaXNPYmplY3Qt
PmluaGVyaXRzKCZOYW1lSW5zdGFuY2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5p
bmhlcml0cyhOYW1lSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nhc3Q8TmFtZUlu
c3RhbmNlKj4odGhpc09iamVjdCktPm5hbWVTdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDExICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwcm90b3R5
cGU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAg
IERFQ0xBUkVfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3QKIHZvaWQgTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvcio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0
aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygp
Lm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFS
RV9JTkZPOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogICAgICAgICB9CiAKICAgICAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSgp
IHsgcmV0dXJuIG1fZXJyb3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTU0LDcgKzU0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVj
dHVyZSwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmhl
cml0cygmc19pbmZvKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAK
ICAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBwcm90b3R5cGUgPSBOYXRpdmVFcnJv
clByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlU3RydWN0dXJl
LCBuYW1lLCB0aGlzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw4ICs2Miw4IEBAIE51bWJlckNvbnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3Rv
cihKU0cKIAogdm9pZCBOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBOdW1iZXJQcm90b3R5cGUqIG51bWJlclByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBudW1iZXJQcm90b3R5cGUtPnNfaW5mby5jbGFzc05h
bWUpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSwgTnVtYmVyUHJvdG90eXBlOjppbmZvKCktPmNsYXNzTmFtZSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogCiAgICAgLy8gTnVtYmVyLlByb3RvdHlwZQog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIG51bWJlclByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVy
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCwxMSArNDQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIEpTVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAKICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAogICAgICAgICB9CiAKICAgICAgICAgZW51bSB7
IE5hTlZhbHVlLCBOZWdJbmZpbml0eSwgUG9zSW5maW5pdHksIE1heFZhbHVlLCBNaW5WYWx1ZSB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIE51bWJlck9i
amVjdDo6TnVtYmVyT2JqZWN0KFZNJiB2bSwgU3RydWMKIHZvaWQgTnVtYmVyT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkp
OwogfQogCiBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbnVtYmVyKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHJldmlzaW9uIDE1NDAx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gbnVtYmVyOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEpTX0VYUE9SVERB
VEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE51bWJlck9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTU0MDEz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB2b2lkIE51bWJlclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oRXhlCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAg
ICAgc2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBqc051bWJlcigwKSk7CiAKLSAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0K
IAogYm9vbCBOdW1iZXJQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCAmc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlclByb3RvdHlwZS5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgICAgIERFQ0xBUkVfSU5GTzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE51bWJlck9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICAgICAgfQogCiAgICAgcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSAr
NDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKLSAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5G
TzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNTQwMTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgT2JqZWN0UHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihFeGUKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90
eXBlKHRoaXMpOwogICAgIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1l
cy0+dG9TdHJpbmcsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nLCBEb250RW51bSwgMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAko
cmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgICAgICB9CiAKICAg
ICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMywxMSArMTMzLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAotICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDE1NDAx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgUHJvcGVydHlUYWJsZTo6flByb3BlcnR5
VGFibGUoKQogdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvcGVydHlUYWJsZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEwICs3NywxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTGVhZlR5cGUsIDApLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBlLCAwKSwgaW5mbygpKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAg
IERFQ0xBUkVfSU5GTzsKIAogICAgICAgICBSZWdFeHBLZXkga2V5KCkgeyByZXR1cm4gUmVnRXhw
S2V5KG1fZmxhZ3MsIG1fcGF0dGVyblN0cmluZyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFJlZ0V4cENvbnN0cnVjdG9y
OjpSZWdFeHBDb25zdHJ1Y3RvcihKU0cKIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwUHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVj
LCAiUmVnRXhwIikuc3RyaW5nKCkpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogCiAgICAgLy8gRUNNQSAxNS4xMC41LjEgUmVn
RXhwLnByb3RvdHlwZQogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHJlZ0V4cFByb3RvdHlwZSwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgUmVn
RXhwQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDZWxsKiAKIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBSZWdFeHBDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rv
cio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNf
aW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7CiAKQEAgLTI1OSw3ICsyNTksNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhw
KEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNWYWx1ZSBhcmcwID0gYXJncy5hdCgwKTsKICAgICBKU1Zh
bHVlIGFyZzEgPSBhcmdzLmF0KDEpOwogCi0gICAgaWYgKGFyZzAuaW5oZXJpdHMoJlJlZ0V4cE9i
amVjdDo6c19pbmZvKSkgeworICAgIGlmIChhcmcwLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5m
bygpKSkgewogICAgICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IkNhbm5vdCBzdXBwbHkgZmxhZ3Mgd2hlbiBjb25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFu
b3RoZXIuIikpKTsKICAgICAgICAgLy8gSWYgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHRoaXMganVz
dCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCAoc2VlIDE1LjEwLjMuMSkuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTUzLDcg
KzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKLSAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5G
TzsKIAogICAgICAgICBNYXRjaFJlc3VsdCBwZXJmb3JtTWF0Y2goVk0mLCBSZWdFeHAqLCBKU1N0
cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNldCwgaW50Kiogb3ZlY3Rvcik7CiAg
ICAgICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRjaChWTSYsIFJlZ0V4cCosIEpTU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0KTsKQEAgLTkyLDcgKzkyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBpbmxpbmUgUmVnRXhwQ29uc3RydWN0b3IqIGFzUmVnRXhwQ29uc3Ry
dWN0b3IoSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1
ZSktPmluaGVyaXRzKCZSZWdFeHBDb25zdHJ1Y3Rvcjo6c19pbmZvKSk7CisgICAgICAgIEFTU0VS
VChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKFJlZ0V4cENvbnN0cnVjdG9yOjppbmZvKCkpKTsK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oYXNPYmplY3Qo
dmFsdWUpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNo
Q3JlYXRpb24oCiB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE1hdGNoZXNBcnJheSog
dGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VS
VChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNTdHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSopOwog
ICAgICAgICBKU1N0cmluZyogcmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopOwogCi0gICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAKICAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMyArNzQsMTMgQEAgUmVnRXhwT2Jq
ZWN0OjpSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplYwogdm9pZCBSZWdFeHBPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAogdm9pZCBSZWdFeHBP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4o
Y2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZv
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVu
LCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQo
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJl
bigpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHN0YXRpYyBKU19FWFBP
UlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKQEAgLTEwNiw3ICsxMDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBSZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpT
VmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhl
cml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKTsKKyAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoUmVnRXhwT2JqZWN0OjppbmZvKCkpKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBS
ZWdFeHBQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzYwogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdF
eHBPYmplY3QodGhpc1ZhbHVlKS0+dGVzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSkpKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
b0Z1bmNFeGVjKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmUmVnRXhw
T2JqZWN0OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVj
dDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CkBAIC05NiwxNCArOTYs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQorICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBSZWdFeHAqIHJlZ0V4cDsKICAgICBK
U1ZhbHVlIGFyZzAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGFyZzEgPSBleGVj
LT5hcmd1bWVudCgxKTsKICAgICAKLSAgICBpZiAoYXJnMC5pbmhlcml0cygmUmVnRXhwT2JqZWN0
OjpzX2luZm8pKSB7CisgICAgaWYgKGFyZzAuaW5oZXJpdHMoUmVnRXhwT2JqZWN0OjppbmZvKCkp
KSB7CiAgICAgICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJD
YW5ub3Qgc3VwcGx5IGZsYWdzIHdoZW4gY29uc3RydWN0aW5nIG9uZSBSZWdFeHAgZnJvbSBhbm90
aGVyLiIpKSk7CiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAo
KTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmUmVnRXhwT2JqZWN0
OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5m
bygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBSZWdF
eHBPYmplY3QqIHRoaXNPYmplY3QgPSBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9J
TkZPOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNp
b24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBTcGFyc2VB
cnJheVZhbHVlTWFwOjpkZXN0cm95KEpTQ2VsbAogCiBTdHJ1Y3R1cmUqIFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKIH0KIAogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmFkZChKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHVibGljOgotICAg
IHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKICAgICAKICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7
CiAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZh
dGlvbi5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTAg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVf
SU5GTzsKIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3Iu
aAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVf
SU5GTzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFN0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KFZNJiB2
bSwgU3RydWMKIHZvaWQgU3RyaW5nT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTU3Ry
aW5nKiBzdHJpbmcpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAg
IHNldEludGVybmFsVmFsdWUodm0sIHN0cmluZyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMTMgKzU3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IEpTX0VY
UE9SVERBVEEgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAogICAgICAgICBKU1N0cmluZyogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGFzU3Ry
aW5nKEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKICAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgICAgIH0KIAogICAg
IHByb3RlY3RlZDoKQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxp
bmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6c19p
bmZvKSk7CisgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKFN0cmluZ09i
amVjdDo6aW5mbygpKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3Qq
Pihhc09iamVjdCh2YWx1ZSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihFeGUKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBuYW1lQW5kTWVzc2FnZSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKICAgICBKU0NfTkFUSVZF
X0lOVFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJv
dG9GdW5jVG9TdHJpbmcsIERvbnRFbnVtLCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmlu
c2ljKTsKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZU9mLCBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZywgRG9udEVudW0sIDAsIFN0cmluZ1By
b3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMpOwpAQCAtNjg1LDcgKzY4NSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1N0cmluZyogc3RyaW5nID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBleGVjLT5h
cmd1bWVudCgwKTsKIAotICAgIGlmIChzZWFyY2hWYWx1ZS5pbmhlcml0cygmUmVnRXhwT2JqZWN0
OjpzX2luZm8pKQorICAgIGlmIChzZWFyY2hWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6Omlu
Zm8oKSkpCiAgICAgICAgIHJldHVybiByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goZXhlYywgc3Ry
aW5nLCBzZWFyY2hWYWx1ZSk7CiAgICAgcmV0dXJuIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChl
eGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlKTsKIH0KQEAgLTY5OCw3ICs2OTgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKHRoaXNWYWx1ZS5pc1N0
cmluZygpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CiAKLSAg
ICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OnNfaW5mbykpCisgICAgaWYg
KHRoaXNWYWx1ZS5pbmhlcml0cyhTdHJpbmdPYmplY3Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNTdHJpbmdPYmplY3QodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1
ZSgpKTsKIAogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwpAQCAtODM1LDcgKzgz
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAgIFJl
Z0V4cCogcmVnRXhwOwogICAgIGJvb2wgZ2xvYmFsID0gZmFsc2U7Ci0gICAgaWYgKGEwLmluaGVy
aXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpIHsKKyAgICBpZiAoYTAuaW5oZXJpdHMoUmVnRXhw
T2JqZWN0OjppbmZvKCkpKSB7CiAgICAgICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0ID0g
YXNSZWdFeHBPYmplY3QoYTApOwogICAgICAgICByZWdFeHAgPSByZWdFeHBPYmplY3QtPnJlZ0V4
cCgpOwogICAgICAgICBpZiAoKGdsb2JhbCA9IHJlZ0V4cC0+Z2xvYmFsKCkpKSB7CkBAIC04OTMs
NyArODkzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIFJlZ0V4cCogcmVnOwotICAg
IGlmIChhMC5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQorICAgIGlmIChhMC5pbmhl
cml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpCiAgICAgICAgIHJlZyA9IGFzUmVnRXhwT2JqZWN0
KGEwKS0+cmVnRXhwKCk7CiAgICAgZWxzZSB7IAogICAgICAgICAvKgpAQCAtOTk2LDcgKzk5Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyA4LiBJ
ZiBzZXBhcmF0b3IgaXMgYSBSZWdFeHAgb2JqZWN0IChpdHMgW1tDbGFzc11dIGlzICJSZWdFeHAi
KSwgbGV0IFIgPSBzZXBhcmF0b3I7CiAgICAgLy8gICAgb3RoZXJ3aXNlIGxldCBSID0gVG9TdHJp
bmcoc2VwYXJhdG9yKS4KICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+YXJndW1l
bnQoMCk7Ci0gICAgaWYgKHNlcGFyYXRvclZhbHVlLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNf
aW5mbykpIHsKKyAgICBpZiAoc2VwYXJhdG9yVmFsdWUuaW5oZXJpdHMoUmVnRXhwT2JqZWN0Ojpp
bmZvKCkpKSB7CiAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgICAgICBSZWdFeHAq
IHJlZyA9IGFzUmVnRXhwT2JqZWN0KHNlcGFyYXRvclZhbHVlKS0+cmVnRXhwKCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShy
ZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgICAgIERFQ0xBUkVfSU5GTzsKICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIGNvbnN0IENsYXNz
SW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2
bSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fcHJvdG90eXBlKHZt
LCB0aGlzLCBqc051bGwoKSkKLSAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCisgICAgLCBtX2Ns
YXNzSW5mbyhpbmZvKCkpCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxp
emVkV2F0Y2hpbmcpCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICwgbV90eXBl
SW5mbyhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pCkBAIC0yNjMsNyArMjYz
LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTQogCiB2b2lkIFN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYgdm0pCiB7Ci0gICAgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKKyAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAgICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkp
OwogCiAgICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CkBAIC04MjcsNyArODI3
LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAogUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1
bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkKIHsKICAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSAmc19pbmZvKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7CiAKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0p
OwogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQpAQCAtOTUxLDcgKzk1MSw3IEBAIEpTVmFsdWUg
U3RydWN0dXJlOjpwcm90b3R5cGVGb3JMb29rdXAoQ28KIHZvaWQgU3RydWN0dXJlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0
dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogCiAg
ICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1NDAxMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIG1fZGljdGlvbmFyeUtpbmQgIT0gVW5jYWNoZWREaWN0
aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQog
CiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCi0gICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKCkg
Y29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOyByZXR1
cm4gbV90eXBlSW5mbzsgfQorICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsg
QVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV90eXBl
SW5mbzsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlz
T2JqZWN0KCk7IH0KIAogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KQEAgLTE2OSw3ICsxNjksNyBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgIFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8p
OworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAg
ICAgICAgIGlmICh0eXBlSW5mbygpLnN0cnVjdHVyZUhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAg
ICByZXR1cm4gcmFyZURhdGEoKS0+cHJldmlvdXNJRCgpOwogICAgICAgICByZXR1cm4gcHJldmlv
dXMoKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5l
U2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZv
KTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwog
ICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFz
dE9mZnNldChtX29mZnNldCk7CiAgICAgfQpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgdW5zaWduZWQgdG90YWxTdG9yYWdlQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKKyAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lQ2FwYWNpdHkoKSArIGlubGluZUNhcGFjaXR5KCk7CiAgICAgfQogCkBA
IC0zNjUsNyArMzY1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGR1bXBDb250
ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7CiAgICAgCi0gICAgc3RhdGljIEpTX0VYUE9SVERBVEEg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC00MDgsMTQg
KzQwOCwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KFZNJiB2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZv
KTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwog
ICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKICAgICAgICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQogICAgICAgICAgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcCh2bSk7CiAgICAgfQogICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyhWTSYgdm0pCiAgICAgewotICAgICAgICBBU1NFUlQoc3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOworICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgICAgICBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLUNsYXNzSW5mbyBTdHJ1
Y3R1cmVDaGFpbjo6c19pbmZvID0geyAiU3RydWN0dXJlQ2hhaW4iLCAwLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFN0cnVjdHVyZUNoYWluKSB9OworY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVy
ZUNoYWluOjpzX2luZm8gPSB7ICJTdHJ1Y3R1cmVDaGFpbiIsIDAsIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoU3RydWN0dXJlQ2hhaW4pIH07CiAKIFN0cnVjdHVyZUNoYWluOjpTdHJ1Y3R1cmVD
aGFpbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogSlNDZWxsKHZtLCBzdHJ1
Y3R1cmUpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OmRlc3Ryb3koSlND
ZWxsKiBjZWwKIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIHNpemVfdCBp
ID0gMDsKICAgICB3aGlsZSAodGhpc09iamVjdC0+bV92ZWN0b3JbaV0pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDE1
NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7
IH0KICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSB7IHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8pOyB9CisgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSB7IHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlw
ZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksIGluZm8oKSk7IH0KICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBDbGFzc0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAKICAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlz
aW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBpbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5m
bygpID09ICZzX2luZm8pOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0g
aW5mbygpKTsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAg
IGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKQEAg
LTg3LDcgKzg3LDcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJgog
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CisgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAg
ICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmVS
YXJlRGF0YTo6c19pbmYKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
fQogCiBTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogcHJldmlvdXMpCkBAIC03Miw3ICs3Miw3IEBAIFN0cnVjdHVyZVJhcmVEYXRh
OjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1
cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwp
OwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENo
aWxkcmVuKCkpOwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hl
KCk7CiAgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgY29uc3QgU3RydWN0dXJlKiBv
d25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpOwogCi0gICAgc3RhdGljIEpTX0VY
UE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCiBwcml2YXRlOgogICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwgU3RydWN0dXJlKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlz
aW9uIDE1NDAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw3ICs0NTIsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhMZWFmVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIGJvb2wgdXNlc05vblN0cmlj
dEV2YWwoKSB7IHJldHVybiBtX3VzZXNOb25TdHJpY3RFdmFsOyB9CkBAIC00NzQsNyArNDc0LDcg
QEAgcHVibGljOgogICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cygpIHsgcmV0
dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQogICAgIHZvaWQgc2V0U2xvd0FyZ3VtZW50cyhQ
YXNzT3duQXJyYXlQdHI8U2xvd0FyZ3VtZW50PiBzbG93QXJndW1lbnRzKSB7IG1fc2xvd0FyZ3Vt
ZW50cyA9IHNsb3dBcmd1bWVudHM7IH0KIAotICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToK
ICAgICBTaGFyZWRTeW1ib2xUYWJsZShWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw4ICsxNjQsOCBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBwYXJzZXJBcmVuYShhZG9w
dFB0cihuZXcgUGFyc2VyQXJlbmEpKQogICAgICwga2V5d29yZHMoYWRvcHRQdHIobmV3IEtleXdv
cmRzKHRoaXMpKSkKICAgICAsIGludGVycHJldGVyKDApCi0gICAgLCBqc0FycmF5Q2xhc3NJbmZv
KCZKU0FycmF5OjpzX2luZm8pCi0gICAgLCBqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvKCZKU0ZpbmFs
T2JqZWN0OjpzX2luZm8pCisgICAgLCBqc0FycmF5Q2xhc3NJbmZvKEpTQXJyYXk6OmluZm8oKSkK
KyAgICAsIGpzRmluYWxPYmplY3RDbGFzc0luZm8oSlNGaW5hbE9iamVjdDo6aW5mbygpKQogI2lm
IEVOQUJMRShERkdfSklUKQogICAgICwgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIoMCkKICNlbmRp
ZgpAQCAtNDkwLDcgKzQ5MCw3IEBAIHN0cnVjdCBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIDog
cHVibGkKICAgICBIYXNoU2V0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+IGN1cnJlbnRseUV4ZWN1dGlu
Z0Z1bmN0aW9uczsKICAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQogICAgIHsKLSAg
ICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKQor
ICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgICAgICBpZiAoY3Vy
cmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zLmNvbnRhaW5zKGV4ZWN1dGFibGUpKQpAQCAtNTEyLDE4
ICs1MTIsMTggQEAgdm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogICAgICAgICBm
b3IgKEhhc2hTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIHB0ciA9IHJvb3RzLmJlZ2luKCk7IHB0ciAh
PSBlbmQ7ICsrcHRyKSB7CiAgICAgICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gMDsKICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9ICpwdHI7Ci0gICAgICAgICAgICBpZiAo
Y2VsbC0+aW5oZXJpdHMoJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAgICBp
ZiAoY2VsbC0+aW5oZXJpdHMoU2NyaXB0RXhlY3V0YWJsZTo6aW5mbygpKSkKICAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KCpwdHIpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoY2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykp
IHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNlbGwtPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8o
KSkpIHsKICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oKnB0cik7CiAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5j
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBl
eGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJs
ZS0+aW5oZXJpdHMoJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbykpOworICAgICAgICAgICAgQVNT
RVJUKGV4ZWN1dGFibGUtPmluaGVyaXRzKFNjcmlwdEV4ZWN1dGFibGU6OmluZm8oKSkpOwogICAg
ICAgICAgICAgZXhlY3V0YWJsZS0+dW5saW5rQ2FsbHMoKTsKLSAgICAgICAgICAgIGlmIChleGVj
dXRhYmxlLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKQorICAgICAgICAg
ICAgaWYgKGV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSkK
ICAgICAgICAgICAgICAgICByZWNvbXBpbGVyLmN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9ucy5h
ZGQoc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Xcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Xcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbG93VmFsaWRhdGVDZWxsKAogI2lmIEVOQUJM
RShHQ19WQUxJREFUSU9OKQogdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgdmFsaWRhdGVD
ZWxsKFQgY2VsbCkKIHsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsICZXVEY6
OlJlbW92ZVBvaW50ZXI8VD46OlR5cGU6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjZWxsLCBXVEY6OlJlbW92ZVBvaW50ZXI8VD46OlR5cGU6OmluZm8oKSk7CiB9CiAK
IHRlbXBsYXRlPD4gaW5saW5lIHZvaWQgdmFsaWRhdGVDZWxsPEpTQ2VsbCo+KEpTQ2VsbCogY2Vs
bCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDAzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3MiBAQAorMjAxMy0wOC0xMyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZvbzo6c19pbmZvIHNob3Vs
ZCBiZSBGb286OmluZm8oKSwgc28gdGhhdCB5b3UgY2FuIGNoYW5nZSBob3cgdGhlIHNfaW5mbyBp
cyBhY3R1YWxseSBsaW5rZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExOTc3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F0dHJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdHRyOjp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNBdWRpb1RyYWNrOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9U
cmFja0xpc3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNCbG9iKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDU1NSdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9IVE1MQ2FudmFzU3R5bGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZVRvRGF0ZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
OjpET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldERPTVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlZlB0ck5hdGl2ZUFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0YXRpY1ZhbHVlU2xvdEVudHJ5V2l0aG91dENh
Y2hpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dG9IVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01Gb3JtRGF0YTo6YXBwZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6aW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldERPTUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0
cmluZ0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9ET01TdHJpbmdMaXN0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTRE9NV2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9E
T01XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0V2ZW50VGFy
Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U0ltYWdlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OmlzSFRNTEFsbENvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9w
dWxhdGVDb250ZXh0TWVudUl0ZW1zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5
U2xvdERlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnB1
dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cHVz
aEV2ZW50SGFuZGxlclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjp0b05vZGVGaWx0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0ZXJh
dG9yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OnBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6cGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdFbGVtZW50SW5zdGFuY2U6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2hhcmVkV29ya2VyOjp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTdHlsZVNoZWV0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1RleHRUcmFj
a0N1ZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNUZXh0VHJhY2tD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0VHJhY2s6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1RleHRUcmFja0xpc3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9UcmFj
ayk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVmlk
ZW9UcmFjazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNWaWRlb1Ry
YWNrTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJhY2tMaXN0Ojp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YUZ1bmN0aW9uZik6CisgICAgICAgIChXZWJDb3JlOjpkYXRhRnVuY3Rpb25pKToK
KyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbk1hdHJpeCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2Nv
cGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTWFBhdGhSZXN1bHQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpkaXNwYXRjaERpZFBhdXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRT
dGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkb21XaW5kb3dGcm9tU2NyaXB0U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21TY3JpcHRTdGF0ZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6aXNBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2Vy
aWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNl
cmlhbGl6ZXI6OnJlYWRBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMv
RE9NLm1tOgorICAgICAgICAoK1tET01Ob2RlIF9ub2RlRnJvbUpTV3JhcHBlcjpdKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW06CisgICAgICAgIChKU0M6OmNyZWF0ZURP
TVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgor
ICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOkpTQzo6
b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNs
b3RCb2R5KToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSk6
CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnND
aGVja0V4cHJlc3Npb24pOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAg
ICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVj
dG9yRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhv
ZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5U2xv
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpwdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OnB1dEJ5SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6anNGbG9hdDY0QXJyYXlQcm90b3R5cGVGdW5jdGlvbkZvbyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc0Zsb2F0NjRBcnJheVByb3RvdHlwZUZ1bmN0aW9uU2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpnZXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnRv
RmxvYXQ2NEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9h
dDY0QXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rp
b25FeGNpdGluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9U
ZXN0QWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVE
T01PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3Rp
dmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZUZ1
bmN0aW9uQW5vdGhlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdEN1c3RvbU5h
bWVkR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1Rlc3RFdmVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldDo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRU
YXJnZXQ6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvblJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZl
bnRUYXJnZXQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRU
YXJnZXQ6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdEV2ZW50VGFyZ2V0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2Vw
dGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXN0RXhj
ZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZh
Y2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6
Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVy
ZmFjZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbklt
cGxlbWVudHNNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3Rv
dHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhv
ZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyk6CisgICAgICAgIChXZWJDb3JlOjp0
b1Rlc3RJbnRlcmZhY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2Qp
OgorICAgICAgICAoV2ViQ29yZTo6dG9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXN0TmFtZWRDb25zdHJ1Y3Rvcik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROb2RlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Tm9kZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5vZGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iajo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9k
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhv
ZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2JqTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2JqTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3Zl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRl
T2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc051bGxTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2Qz
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kOCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2ln
bmVkTG9uZ1NlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDEpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0Mik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZh
cmlhZGljU3RyaW5nTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0T2JqOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdE9i
aik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChXZWJDb3JlOjp0b1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Omdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnB1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVBcnJheUFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uRnVuY1dpdGhDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJy
YXlGdW5jdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXN0VHlw
ZWRlZnMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6Q1J1bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL2Mv
Y19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGltZU1ldGhvZDo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNSdW50aW1lTWV0aG9k
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omlu
dm9rZU1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKiBicmlk
Z2Uvb2JqYy9PYmpDUnVudGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2Jq
Q1J1bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbToKKyAgICAgICAgKE9iakNSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgICog
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL29i
amMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNr
T2JqZWN0SW1wOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjYWxs
T2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2UpOgor
ICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OmFzc2lnblRvSFRNTEltYWdlRWxlbWVudCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFBpeG1hcFJ1bnRpbWU6OnRvUXQpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50
aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmlzSlNVaW50OEFycmF5KToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpp
c0pTRGF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjppc1F0T2JqZWN0KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OnVud3JhcEJveGVkUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UnVudGlt
ZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhv
ZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6Y2FsbFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X21ldGhvZC5oOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpSdW50aW1lT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpjYWxsUnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjYWxs
UnVudGltZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6
CisKIDIwMTMtMDgtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1dpbmRvd3NdIFdpbmRvd3MgaXMgaW5jb3JyZWN0bHkgdXNpbmcgYSBMYXllclR5cGVU
aWxlZEJhY2tpbmdMYXllcgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsMTEgKzExNiwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlE
QktleUZyCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcih2YWx1ZS50b051bWJl
cihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZVN0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
IGlmICh2YWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pICYmICFzdGQ6OmlzbmFu
KHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVlKSkpCisgICAgaWYgKHZhbHVlLmluaGVyaXRzKERhdGVJ
bnN0YW5jZTo6aW5mbygpKSAmJiAhc3RkOjppc25hbih2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkp
KQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKHZhbHVlVG9EYXRlKGV4ZWMsIHZh
bHVlKSk7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpIHx8
IG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpIHsKKyAgICAgICAgaWYgKGlzSlNB
cnJheShvYmplY3QpIHx8IG9iamVjdC0+aW5oZXJpdHMoSlNBcnJheTo6aW5mbygpKSkgewogICAg
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KG9iamVjdCk7CiAgICAgICAgICAgICBz
aXplX3QgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHZvaWQgSlNBdHRyOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNBdHRyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXR0cio+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0
cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNr
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXVkaW9UcmFjayoganNBdWRpb1RyYWNrID0g
anNDYXN0PEpTQXVkaW9UcmFjayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoanNBdWRpb1RyYWNrLCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGpzQXVkaW9UcmFjaywgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFn
cyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0
U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVChqc0F1ZGlvVHJhY2stPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bihqc0F1ZGlvVHJhY2ssIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXVkaW9UcmFja0xpc3QqIGpzQXVkaW9UcmFja0xp
c3QgPSBqc0Nhc3Q8SlNBdWRpb1RyYWNrTGlzdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoanNBdWRpb1RyYWNrTGlzdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhqc0F1ZGlvVHJhY2tMaXN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNT
RVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKGpzQXVkaW9UcmFja0xp
c3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc0F1ZGlvVHJhY2tMaXN0LCB2aXNpdG9yKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDEzICsxMTYsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU0Jsb2JDb25zdAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywgaSk7
CiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVm
ZmVyOjpzX2luZm8pKQorICAgICAgICBpZiAoaXRlbS5pbmhlcml0cyhKU0FycmF5QnVmZmVyOjpp
bmZvKCkpKQogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5kKHRvQXJyYXlCdWZmZXIoaXRl
bSkpOwotICAgICAgICBlbHNlIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyVmlldzo6
c19pbmZvKSkKKyAgICAgICAgZWxzZSBpZiAoaXRlbS5pbmhlcml0cyhKU0FycmF5QnVmZmVyVmll
dzo6aW5mbygpKSkKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZCh0b0FycmF5QnVmZmVy
VmlldyhpdGVtKSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICBpZiAoaXRlbS5pbmhl
cml0cygmSlNCbG9iOjpzX2luZm8pKQorICAgICAgICBpZiAoaXRlbS5pbmhlcml0cyhKU0Jsb2I6
OmluZm8oKSkpCiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQodG9CbG9iKGl0ZW0pKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBKU0NTU1J1bGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0NTU1J1
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDU1NSdWxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3Ry
dWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJl
KCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDU1NT
dHlsZURlY2xhcmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ1NTU3R5bGVEZWNsYXJhdGlv
bio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNf
aW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
QEAgLTM5Myw3ICszOTMsNyBAQCBKU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVyCiB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0NTU1N0eWxlRGVjbGFyYXRp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDU1NTdHlsZURlY2xhcmF0aW9uKj4ob2JqZWN0KTsK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmltcGwoKS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw5ICs1Miw5IEBAIHN0YXRpYyBDYW52YXNTdHlsZSB0b0hUTUxDYW52YXNTdHlsZShFeGUK
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBDYW52YXNTdHlsZSgp
OwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaWYgKG9iamVj
dC0+aW5oZXJpdHMoJkpTQ2FudmFzR3JhZGllbnQ6OnNfaW5mbykpCisgICAgaWYgKG9iamVjdC0+
aW5oZXJpdHMoSlNDYW52YXNHcmFkaWVudDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIENhbnZh
c1N0eWxlKGpzQ2FzdDxKU0NhbnZhc0dyYWRpZW50Kj4ob2JqZWN0KS0+aW1wbCgpKTsKLSAgICBp
ZiAob2JqZWN0LT5pbmhlcml0cygmSlNDYW52YXNQYXR0ZXJuOjpzX2luZm8pKQorICAgIGlmIChv
YmplY3QtPmluaGVyaXRzKEpTQ2FudmFzUGF0dGVybjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJu
IENhbnZhc1N0eWxlKGpzQ2FzdDxKU0NhbnZhc1BhdHRlcm4qPihvYmplY3QpLT5pbXBsKCkpOwog
ICAgIHJldHVybiBDYW52YXNTdHlsZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5n
RmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIGRv
dWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIHsKICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgaWYgKCF2
YWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pKQorICAgIGlmICghdmFsdWUuaW5o
ZXJpdHMoRGF0ZUluc3RhbmNlOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0
ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMTIsOSArMTEyLDkgQEAgY2xhc3MgRE9N
U3RyaW5nTGlzdDsKIAogICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpT
Qzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICBpZiAoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsICZX
cmFwcGVyQ2xhc3M6OnNfaW5mbykpCisgICAgICAgIGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpp
bmZvKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICAgICAgcmV0dXJuIGNh
Y2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlw
ZShleGVjLCBnbG9iYWxPYmplY3QpKSwgJldyYXBwZXJDbGFzczo6c19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0
ZVByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3Ry
dWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQpA
QCAtNDIxLDcgKzQyMSw3IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIEpTQzo6SlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIGVs
ZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywgaSk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVu
dC5pbmhlcml0cygmSlNUOjpzX2luZm8pKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQuaW5oZXJp
dHMoSlNUOjppbmZvKCkpKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKCp0b1QpKGVs
ZW1lbnQpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBl
IikpOwpAQCAtNTE0LDcgKzUxNCw3IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgdGVtcGxh
dGUgPGNsYXNzIFRoaXNJbXA+CiAgICAgaW5saW5lIGNvbnN0IEpTQzo6SGFzaEVudHJ5KiBnZXRT
dGF0aWNWYWx1ZVNsb3RFbnRyeVdpdGhvdXRDYWNoaW5nKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgewotICAgICAgICBjb25zdCBKU0M6
Okhhc2hFbnRyeSogZW50cnkgPSBUaGlzSW1wOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+
ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgY29uc3QgSlNDOjpIYXNoRW50cnkq
IGVudHJ5ID0gVGhpc0ltcDo6aW5mbygpLT5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVj
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoIWVudHJ5KSAvLyBub3QgZm91bmQsIGZvcndh
cmQgdG8gcGFyZW50CiAgICAgICAgICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90RW50cnlX
aXRob3V0Q2FjaGluZzx0eXBlbmFtZSBUaGlzSW1wOjpCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUp
OwogICAgICAgICByZXR1cm4gZW50cnk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
SFRNTEZvcm1FbGVtZW50KiB0b0hUTUxGb3JtRWxlbWVudChKU0M6OkpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU0hUTUxGb3JtRWxlbWVudDo6c19pbmZvKSA/
IHRvSFRNTEZvcm1FbGVtZW50KGpzQ2FzdDxKU0hUTUxGb3JtRWxlbWVudCo+KGFzT2JqZWN0KHZh
bHVlKSktPmltcGwoKSkgOiAwOworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU0hUTUxGb3Jt
RWxlbWVudDo6aW5mbygpKSA/IHRvSFRNTEZvcm1FbGVtZW50KGpzQ2FzdDxKU0hUTUxGb3JtRWxl
bWVudCo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSkgOiAwOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01G
b3JtRGF0YShFeGVjU3RhdGUqIGV4ZWMpCkBAIC02Miw3ICs2Miw3IEBAIEpTVmFsdWUgSlNET01G
b3JtRGF0YTo6YXBwZW5kKEV4ZWNTdGF0ZSoKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1
bWVudCgxKTsKLSAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpIHsK
KyAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzKEpTQmxvYjo6aW5mbygpKSkgewogICAgICAgICAg
ICAgU3RyaW5nIGZpbGVuYW1lOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAzICYmICFleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICAgICAgICAgIGZpbGVuYW1lID0gZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywyMSAr
NTcsMjEgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIAogdm9pZCBK
U0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogdGhpc1ZhbHVlKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCB0aGlzVmFsdWUpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBKU0RPTUdsb2JhbE9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
CiB7Ci0gICAgaWYgKGluaGVyaXRzKCZKU0RPTVdpbmRvd0Jhc2U6OnNfaW5mbykpCisgICAgaWYg
KGluaGVyaXRzKEpTRE9NV2luZG93QmFzZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPih0aGlzKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIGlmIChpbmhlcml0cygmSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2U6OnNfaW5mbykpCisgICAgaWYgKGluaGVyaXRzKEpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlOjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlKj4odGhpcyktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICNlbmRpZgogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODEsNyArODEsNyBAQCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01H
bG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBD
T01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlz
aW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQu
Z2V0KCk7IH0KIAorICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGljIFdFQktJVF9FWFBPUlRE
QVRBIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyogaW5mbygpIHsgcmV0dXJuICZzX2luZm87IH0KIAog
ICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC04NywxMiArOTAsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIHRlbXBsYXRlPGNsYXNzIENvbnN0cnVjdG9yQ2xhc3M+CiAgICAg
aW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHsKLSAgICAg
ICAgaWYgKEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gY29uc3RfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmdldCgmQ29uc3RydWN0b3JD
bGFzczo6c19pbmZvKS5nZXQoKSkKKyAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIGNvbnN0cnVj
dG9yID0gY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0
cnVjdG9ycygpLmdldChDb25zdHJ1Y3RvckNsYXNzOjppbmZvKCkpLmdldCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgICBKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVjLCBDb25zdHJ1Y3RvckNsYXNzOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25zdF9jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci0gICAgICAgIEFTU0VSVCghY29u
c3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygp
LmNvbnRhaW5zKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKTsKKyAgICAgICAgQVNTRVJUKCFj
b25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3Jz
KCkuY29udGFpbnMoQ29uc3RydWN0b3JDbGFzczo6aW5mbygpKSk7CiAgICAgICAgIEpTQzo6V3Jp
dGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVj
dG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnZhbHVlLnNldChleGVjLT52bSgpLCBn
bG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZChDb25zdHJ1Y3RvckNs
YXNzOjppbmZvKCksIHRlbXApLml0ZXJhdG9yLT52YWx1ZS5zZXQoZXhlYy0+dm0oKSwgZ2xvYmFs
T2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJp
bmdMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gdG9ET01TdHJpbmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTRE9NU3RyaW5nTGlzdDo6c19pbmZvKSkKKyAgICBpZiAo
dmFsdWUuaW5oZXJpdHMoSlNET01TdHJpbmdMaXN0OjppbmZvKCkpKQogICAgICAgICByZXR1cm4g
anNDYXN0PEpTRE9NU3RyaW5nTGlzdCo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKTsKIAogICAg
IGlmICghaXNKU0FycmF5KHZhbHVlKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsNyBAQCBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYgdm0sCiB2
b2lkIEpTRE9NV2luZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTVdpbmRvd1No
ZWxsKiBzaGVsbCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgc2hlbGwpOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkp
OwogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmRvY3VtZW50LCBqc051bGwoKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTIyMCw5ICsyMjAsOSBAQCBKU0RPTVdpbmRvdyog
dG9KU0RPTVdpbmRvdyhKU1ZhbHVlIHZhbHVlCiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IGFzT2Jq
ZWN0KHZhbHVlKS0+Y2xhc3NJbmZvKCk7Ci0gICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNET01XaW5k
b3c6OnNfaW5mbykKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTRE9NV2luZG93OjppbmZvKCkpCiAg
ICAgICAgIHJldHVybiBqc0Nhc3Q8SlNET01XaW5kb3cqPihhc09iamVjdCh2YWx1ZSkpOwotICAg
IGlmIChjbGFzc0luZm8gPT0gJkpTRE9NV2luZG93U2hlbGw6OnNfaW5mbykKKyAgICBpZiAoY2xh
c3NJbmZvID09IEpTRE9NV2luZG93U2hlbGw6OmluZm8oKSkKICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0RPTVdpbmRvd1NoZWxsKj4oYXNPYmplY3QodmFsdWUpKS0+d2luZG93KCk7CiAgICAgcmV0
dXJuIDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENhbGxlZCBqdXN0IGJlZm9yZSByZW1vdmluZyB0
aGlzIHdpbmRvdyBmcm9tIHRoZSBKU0RPTVdpbmRvd1NoZWxsLgogICAgICAgICB2b2lkIHdpbGxS
ZW1vdmVGcm9tV2luZG93U2hlbGwoKTsKIAotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAKICAgICAgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okds
b2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBKU0M6Okdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFs
T2JqZWN0TWV0aG9kVGFibGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBKU0RPTVdpbmRvdzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
RE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpAQCAtMTI5LDcgKzEyOSw3
IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU08KICAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGVudHJ5ID0gSlNET01X
aW5kb3dQcm90b3R5cGU6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBlbnRyeSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjppbmZv
KCktPnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIGlmIChlbnRyeSAmJiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pICYm
IGVudHJ5LT5mdW5jdGlvbigpID09IGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSkg
ewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRp
Y0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSwgMD4pOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBKU0RPTVdp
bmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTTwogICAgIC8vIHByb3RvdHlwZSBkdWUgdG8gdGhl
IGJsYW5rZXQgc2FtZSBvcmlnaW4gKHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cpIGNoZWNr
IGF0IHRoZSBlbmQgb2YgZ2V0T3duUHJvcGVydHlTbG90LgogICAgIC8vIEFsc28sIGl0J3MgaW1w
b3J0YW50IHRvIGdldCB0aGUgaW1wbGVtZW50YXRpb24gc3RyYWlnaHQgb3V0IG9mIHRoZSBET01X
aW5kb3cgcHJvdG90eXBlIHJlZ2FyZGxlc3Mgb2YKICAgICAvLyB3aGF0IHByb3RvdHlwZSBpcyBh
Y3R1YWxseSBzZXQgb24gdGhpcyBvYmplY3QuCi0gICAgZW50cnkgPSBKU0RPTVdpbmRvd1Byb3Rv
dHlwZTo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CisgICAgZW50cnkgPSBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6aW5mbygpLT5wcm9wSGFzaFRh
YmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewog
ICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKICAgICAg
ICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0
aW9uQmx1cikgewpAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdChKU08KICAgICAgICAgfQogICAgIH0KIAotICAgIGVudHJ5ID0gSlNET01XaW5k
b3c6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUp
OworICAgIGVudHJ5ID0gSlNET01XaW5kb3c6OmluZm8oKS0+cHJvcEhhc2hUYWJsZShleGVjKS0+
ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkpIHsKICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0CiAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
anNCb29sZWFuKHRydWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBlbnRyeSA9IEpTRE9NV2lu
ZG93UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgZW50cnkgPSBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6aW5mbygp
LT5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICBpZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSAmJiBl
bnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpIHsK
ICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOwogICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVy
PGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSwgMD4pOwpAQCAtMzYwLDcgKzM2MCw3
IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5RGVzY3JpcHQKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgZW50cnkgPSBKU0RPTVdpbmRvdzo6c19pbmZvLnByb3BI
YXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgZW50cnkgPSBK
U0RPTVdpbmRvdzo6aW5mbygpLT5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzT2JqZWN0KTsKICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnBy
b3BlcnR5R2V0dGVyKCkpOwpAQCAtNzI2LDkgKzcyNiw5IEBAIERPTVdpbmRvdyogdG9ET01XaW5k
b3coSlNWYWx1ZSB2YWx1ZSkKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaWYg
KG9iamVjdC0+aW5oZXJpdHMoJkpTRE9NV2luZG93OjpzX2luZm8pKQorICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzKEpTRE9NV2luZG93OjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNDYXN0PEpT
RE9NV2luZG93Kj4ob2JqZWN0KS0+aW1wbCgpOwotICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZK
U0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQorICAgIGlmIChvYmplY3QtPmluaGVyaXRzKEpTRE9N
V2luZG93U2hlbGw6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNET01XaW5kb3dT
aGVsbCo+KG9iamVjdCktPmltcGwoKTsKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAx
NTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBKU0RPTVdpbmRvd1NoZWxsOjpKU0RP
TVdpbmRvd1NoZWxsKFN0cnVjCiB2b2lkIEpTRE9NV2luZG93U2hlbGw6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHdpbmRvdykKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgc2V0V2luZG93KHdpbmRvdyk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlz
aW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2V0V2luZG93KEpTQzo6Vk0mLCBKU0RPTVdpbmRvdyopOwogICAgICAg
ICB2b2lkIHNldFdpbmRvdyhQYXNzUmVmUHRyPERPTVdpbmRvdz4pOwogCi0gICAgICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgICAgIERFQ0xBUkVfSU5GTzsKIAog
ICAgICAgICBET01XaW5kb3cqIGltcGwoKSBjb25zdDsKIApAQCAtNjEsNyArNjEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6UHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6OlByb3h5VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogICAgICAgICB9CiAKICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCgpIHsg
cmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsMTIgKzY1LDEyIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmEKICN1bmRlZiBUUllfVE9fV1JBUF9XSVRIX0lOVEVSRkFDRQogCiAjZGVmaW5l
IFRSWV9UT19VTldSQVBfV0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXAotICAgIGlmICh2
YWx1ZS5pbmhlcml0cygmSlMjI2ludGVyZmFjZU5hbWU6OnNfaW5mbykpIFwKKyAgICBpZiAodmFs
dWUuaW5oZXJpdHMoSlMjI2ludGVyZmFjZU5hbWU6OmluZm8oKSkpICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludGVyZmFjZU5hbWUqPihqc0Nhc3Q8
SlMjI2ludGVyZmFjZU5hbWUqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkpOwogCiBFdmVudFRh
cmdldCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVl
LmluaGVyaXRzKCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQorICAgIGlmICh2YWx1ZS5pbmhl
cml0cyhKU0RPTVdpbmRvd1NoZWxsOjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNDYXN0PEpT
RE9NV2luZG93U2hlbGwqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCk7CiAKICAgICBUUllfVE9f
VU5XUkFQX1dJVEhfSU5URVJGQUNFKEV2ZW50VGFyZ2V0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNs
b3REZWxlZ2EKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgZm9yIHRoZSBm
ZXcgZnVuY3Rpb25zIHRoYXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3MtZG9tYWlu
LgotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0hpc3RvcnlQcm90b3R5cGU6OnNfaW5m
by5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIGNv
bnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0hpc3RvcnlQcm90b3R5cGU6OmluZm8oKS0+cHJvcEhh
c2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkp
IHsKICAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGJhY2soKSwgZm9yd2FyZCgpIGFuZCBnbygp
IGZyb20gYW55IGZyYW1lLgogICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6
RnVuY3Rpb24pIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIEpTSGlzdG9yeTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ2hlY2sgZm9y
IHRoZSBmZXcgZnVuY3Rpb25zIHRoYXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3Mt
ZG9tYWluLgotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0hpc3RvcnlQcm90b3R5cGU6
OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0hpc3RvcnlQcm90b3R5cGU6OmluZm8oKS0+
cHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAo
ZW50cnkpIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAgICAgICAgIC8vIEFs
bG93IGFjY2VzcyB0byBiYWNrKCksIGZvcndhcmQoKSBhbmQgZ28oKSBmcm9tIGFueSBmcmFtZS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBK
U0ltYWdlQ29uc3RydWN0b3I6OkpTSW1hZ2VDb25zdHJ1Y3RvcihTCiB2b2lkIEpTSW1hZ2VDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dCk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBOb25lKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCwxMCArMzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgICAgICBERUNMQVJFX0lORk87CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBKU0ltYWdlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6aXNIVE1MQWxsQwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1
cm4ganNCb29sZWFuKHZhbHVlLmluaGVyaXRzKCZKU0hUTUxBbGxDb2xsZWN0aW9uOjpzX2luZm8p
KTsKKyAgICByZXR1cm4ganNCb29sZWFuKHZhbHVlLmluaGVyaXRzKEpTSFRNTEFsbENvbGxlY3Rp
b246OmluZm8oKSkpOwogfQogCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp0eXBlKEV4
ZWNTdGF0ZSogZXhlYykKQEAgLTEzNCwyNyArMTM0LDI3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6OnR5cGUoRXhlY1MKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBTdHJpbmcoInN0cmluZyIpKTsKLSAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTQXJyYXk6
OnNfaW5mbykpCisgICAgaWYgKHZhbHVlLmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcoImFycmF5IikpOwogICAgIGlmICh2YWx1
ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZygiYm9v
bGVhbiIpKTsKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZygibnVtYmVyIikpOwotICAgIGlmICh2YWx1ZS5pbmhlcml0cygmRGF0
ZUluc3RhbmNlOjpzX2luZm8pKQorICAgIGlmICh2YWx1ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6
OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcoImRhdGUiKSk7
Ci0gICAgaWYgKHZhbHVlLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpCisgICAgaWYg
KHZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIFN0cmluZygicmVnZXhwIikpOwotICAgIGlmICh2YWx1ZS5pbmhlcml0cygm
SlNOb2RlOjpzX2luZm8pKQorICAgIGlmICh2YWx1ZS5pbmhlcml0cyhKU05vZGU6OmluZm8oKSkp
CiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcoIm5vZGUiKSk7Ci0gICAgaWYg
KHZhbHVlLmluaGVyaXRzKCZKU05vZGVMaXN0OjpzX2luZm8pKQorICAgIGlmICh2YWx1ZS5pbmhl
cml0cyhKU05vZGVMaXN0OjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
U3RyaW5nKCJhcnJheSIpKTsKLSAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTSFRNTENvbGxlY3Rp
b246OnNfaW5mbykpCisgICAgaWYgKHZhbHVlLmluaGVyaXRzKEpTSFRNTENvbGxlY3Rpb246Omlu
Zm8oKSkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcoImFycmF5IikpOwot
ICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNJbnQ4QXJyYXk6OnNfaW5mbykgfHwgdmFsdWUuaW5o
ZXJpdHMoJkpTSW50MTZBcnJheTo6c19pbmZvKSB8fCB2YWx1ZS5pbmhlcml0cygmSlNJbnQzMkFy
cmF5OjpzX2luZm8pKQorICAgIGlmICh2YWx1ZS5pbmhlcml0cyhKU0ludDhBcnJheTo6aW5mbygp
KSB8fCB2YWx1ZS5pbmhlcml0cyhKU0ludDE2QXJyYXk6OmluZm8oKSkgfHwgdmFsdWUuaW5oZXJp
dHMoSlNJbnQzMkFycmF5OjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
U3RyaW5nKCJhcnJheSIpKTsKLSAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTVWludDhBcnJheTo6
c19pbmZvKSB8fCB2YWx1ZS5pbmhlcml0cygmSlNVaW50MTZBcnJheTo6c19pbmZvKSB8fCB2YWx1
ZS5pbmhlcml0cygmSlNVaW50MzJBcnJheTo6c19pbmZvKSkKKyAgICBpZiAodmFsdWUuaW5oZXJp
dHMoSlNVaW50OEFycmF5OjppbmZvKCkpIHx8IHZhbHVlLmluaGVyaXRzKEpTVWludDE2QXJyYXk6
OmluZm8oKSkgfHwgdmFsdWUuaW5oZXJpdHMoSlNVaW50MzJBcnJheTo6aW5mbygpKSkKICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZygiYXJyYXkiKSk7Ci0gICAgaWYgKHZhbHVl
LmluaGVyaXRzKCZKU0Zsb2F0MzJBcnJheTo6c19pbmZvKSB8fCB2YWx1ZS5pbmhlcml0cygmSlNG
bG9hdDY0QXJyYXk6OnNfaW5mbykpCisgICAgaWYgKHZhbHVlLmluaGVyaXRzKEpTRmxvYXQzMkFy
cmF5OjppbmZvKCkpIHx8IHZhbHVlLmluaGVyaXRzKEpTRmxvYXQ2NEFycmF5OjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nKCJhcnJheSIpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTE2NCw3ICsxNjQsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKLSAgICBpZiAoIXZhbHVlLmFzQ2VsbCgpLT5pbmhlcml0cygmSlNG
dW5jdGlvbjo6c19pbmZvKSkKKyAgICBpZiAoIXZhbHVlLmFzQ2VsbCgpLT5pbmhlcml0cyhKU0Z1
bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JG
cm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51
SXRlbXMoRXhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0
ZW1DdXN0b21UYWdOb0FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZygpKTsKICAgICAgICAgICAgIG1lbnUuYXBwZW5kSXRlbShpdGVtKTsKLSAgICAgICAgfSBl
bHNlIGlmICh0eXBlU3RyaW5nID09ICJzdWJNZW51IiAmJiBzdWJJdGVtcy5pbmhlcml0cygmSlNB
cnJheTo6c19pbmZvKSkgeworICAgICAgICB9IGVsc2UgaWYgKHR5cGVTdHJpbmcgPT0gInN1Yk1l
bnUiICYmIHN1Ykl0ZW1zLmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkpIHsKICAgICAgICAgICAg
IENvbnRleHRNZW51IHN1Yk1lbnU7CiAgICAgICAgICAgICBKU0FycmF5KiBzdWJJdGVtc0FycmF5
ID0gYXNBcnJheShzdWJJdGVtcyk7CiAgICAgICAgICAgICBwb3B1bGF0ZUNvbnRleHRNZW51SXRl
bXMoZXhlYywgc3ViSXRlbXNBcnJheSwgc3ViTWVudSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3REZWxlZwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBmb3IgdGhl
IGZldyBmdW5jdGlvbnMgdGhhdCB3ZSBhbGxvdywgZXZlbiB3aGVuIGNhbGxlZCBjcm9zcy1kb21h
aW4uCi0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IEpTTG9jYXRpb25Qcm90b3R5cGU6OnNf
aW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9uUHJvdG90eXBlOjppbmZvKCktPnBy
b3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGVu
dHJ5ICYmIChlbnRyeS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikpIHsKICAgICAgICAg
aWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlcGxh
Y2UpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNS
ZXBsYWNlRnVuY3Rpb25HZXR0ZXIpOwpAQCAtOTksNyArOTksNyBAQCBib29sIEpTTG9jYXRpb246
OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAg
IC8vIENoZWNrIGZvciB0aGUgZmV3IGZ1bmN0aW9ucyB0aGF0IHdlIGFsbG93LCBldmVuIHdoZW4g
Y2FsbGVkIGNyb3NzLWRvbWFpbi4KLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNMb2Nh
dGlvblByb3RvdHlwZTo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHBy
b3BlcnR5TmFtZSk7CisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IEpTTG9jYXRpb25Qcm90
b3R5cGU6OmluZm8oKS0+cHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlO
YW1lKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICBpZiAoZW50cnkgJiYgKGVu
dHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSkgewogICAgICAgICBpZiAoZW50cnkt
PmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkgewpAQCAt
MTM2LDcgKzEzNiw3IEBAIGJvb2wgSlNMb2NhdGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiAK
IAogICAgIGJvb2wgc2FtZURvbWFpbkFjY2VzcyA9IHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShl
eGVjLCBmcmFtZSk7CiAKLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNMb2NhdGlvbjo6
c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7Cisg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IEpTTG9jYXRpb246OmluZm8oKS0+cHJvcEhhc2hU
YWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWVudHJ5KSB7
CiAgICAgICAgIGlmIChzYW1lRG9tYWluQWNjZXNzKQogICAgICAgICAgICAgSlNPYmplY3Q6OnB1
dCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01lc3NhZ2VDaGFubmVs
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWVzc2FnZUNoYW5uZWwqPihjZWxsKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VS
VChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNZXNzYWdlUG9ydCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01lc3NhZ2VQb3J0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdG
bGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVD
dXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgSlNW
YWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSogZQogCiBKU1Njb3BlKiBKU05vZGU6
OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIG5vZGUpIGNv
bnN0CiB7Ci0gICAgaWYgKGluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKQorICAgIGlm
IChpbmhlcml0cyhKU0hUTUxFbGVtZW50OjppbmZvKCkpKQogICAgICAgICByZXR1cm4ganNDYXN0
PGNvbnN0IEpTSFRNTEVsZW1lbnQqPih0aGlzKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMs
IG5vZGUpOwogICAgIHJldHVybiBub2RlOwogfQpAQCAtMTkzLDcgKzE5Myw3IEBAIEpTU2NvcGUq
IEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEUKIHZvaWQgSlNOb2RlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOb2RlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTm9kZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZs
YWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhv
dXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEpTTm9kZUZp
bHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTTm9kZUZpbHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05vZGVGaWx0ZXIqPihj
ZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4s
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CkBAIC00
OCw3ICs0OCw3IEBAIHZvaWQgSlNOb2RlRmlsdGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKIAog
UGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoVk0mIHZtLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNOb2RlRmlsdGVyOjpzX2luZm8pKQorICAg
IGlmICh2YWx1ZS5pbmhlcml0cyhKU05vZGVGaWx0ZXI6OmluZm8oKSkpCiAgICAgICAgIHJldHVy
biBqc0Nhc3Q8SlNOb2RlRmlsdGVyKj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpOwogCiAgICAg
UmVmUHRyPE5vZGVGaWx0ZXI+IHJlc3VsdCA9IE5vZGVGaWx0ZXI6OmNyZWF0ZSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU05vZGVJdGVyYXRvciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU05vZGVJdGVyYXRvcio+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0
cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCShyZXZpc2lv
biAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRG
dW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFR5cGUsIGNsYXNzIEJhc2U+IGJvb2wgcGx1Z2lu
RWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYgc2xvdCwgVHlw
ZSogZWxlbWVudCkKICAgICB7CiAgICAgICAgIGlmICghZWxlbWVudC0+Z2xvYmFsT2JqZWN0KCkt
PndvcmxkKCktPmlzTm9ybWFsKCkpIHsKLSAgICAgICAgICAgIGlmIChKU0M6OmdldFN0YXRpY1Zh
bHVlU2xvdDxUeXBlLCBCYXNlPihleGVjLCBlbGVtZW50LT5zX2luZm8uc3RhdGljUHJvcEhhc2hU
YWJsZSwgZWxlbWVudCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIGlmIChKU0M6
OmdldFN0YXRpY1ZhbHVlU2xvdDxUeXBlLCBCYXNlPihleGVjLCBUeXBlOjppbmZvKCktPnN0YXRp
Y1Byb3BIYXNoVGFibGUsIGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSBwcm90byA9IGVs
ZW1lbnQtPnByb3RvdHlwZSgpOwpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFR5cGUsIGNsYXNzIEJhc2U+IGJvb2wgcGx1Z2luRWxlbWVu
dEN1c3RvbUdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgVHlwZSogZWxlbWVudCkKICAgICB7CiAgICAgICAgIGlmICghZWxlbWVudC0+Z2xv
YmFsT2JqZWN0KCktPndvcmxkKCktPmlzTm9ybWFsKCkpIHsKLSAgICAgICAgICAgIGlmIChKU0M6
OmdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxUeXBlLCBCYXNlPihleGVjLCBlbGVtZW50LT5zX2lu
Zm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgZWxlbWVudCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KSkKKyAgICAgICAgICAgIGlmIChKU0M6OmdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxUeXBlLCBC
YXNlPihleGVjLCBUeXBlOjppbmZvKCktPnN0YXRpY1Byb3BIYXNoVGFibGUsIGVsZW1lbnQsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSBwcm90byA9IGVsZW1lbnQtPnByb3RvdHlwZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxl
bWVudEluc3RhbmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSlNTVkdFbGVt
ZW50SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTVkdFbGVtZW50SW5zdGFuY2UqIHRoaXNPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU1NWR0VsZW1lbnRJbnN0YW5jZSo+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0
cnVjdHVyZUZsYWdzICYgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNp
dENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICAvLyBT
a2lwIEpTRXZlbnRUYXJnZXQ6OnZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBldmVudCBsaXN0ZW5lciBy
ZWdpc3RyYXRpb24gaXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVk
V29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEpTU2hhcmVkV29y
a2VyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNTaGFyZWRXb3JrZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTaGFyZWRXb3JrZXIq
PihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2lu
Zm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxk
cmVuKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0eWxlU2hlZXQqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTdHlsZVNoZWV0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJl
RmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGJvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6
aXNSZWFjaGFibGVGcm8KIHZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1RleHRUcmFja0N1ZSoganNU
ZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPihjZWxsKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGpzVGV4dFRyYWNrQ3VlLCAmc19pbmZvKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGpzVGV4dFRyYWNrQ3VlLCBpbmZvKCkpOwogICAgIENPTVBJTEVf
QVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKGpzVGV4dFRyYWNr
Q3VlLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNUZXh0VHJhY2tDdWUsIHZpc2l0b3IpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJh
Y2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1RleHRUcmFjayoganNUZXh0VHJhY2sgPSBq
c0Nhc3Q8SlNUZXh0VHJhY2sqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGpzVGV4dFRyYWNrLCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGpz
VGV4dFRyYWNrLCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0
aW5nRmxhZyk7CiAgICAgQVNTRVJUKGpzVGV4dFRyYWNrLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNU
ZXh0VHJhY2ssIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSlNU
ZXh0VHJhY2tMaXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNUZXh0VHJhY2tMaXN0KiBqc1RleHRUcmFja0xpc3QgPSBqc0Nhc3Q8
SlNUZXh0VHJhY2tMaXN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhq
c1RleHRUcmFja0xpc3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
anNUZXh0VHJhY2tMaXN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZs
YWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhv
dXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKGpzVGV4dFRyYWNrTGlzdC0+c3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGpzVGV4dFRyYWNrTGlzdCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgVHJhY2tCYXNlKiB0b1RyYWNrKEpTVmFsdWUgdmFsdWUpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsK
LSAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNUZXh0VHJhY2s6OnNfaW5mbykpCisgICAgaWYg
KG9iamVjdC0+aW5oZXJpdHMoSlNUZXh0VHJhY2s6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBq
c0Nhc3Q8SlNUZXh0VHJhY2sqPihvYmplY3QpLT5pbXBsKCk7CiAgICAgCiAgICAgLy8gRklYTUU6
IEZpbGwgaW4gYWRkaXRpb25hbCB0ZXN0cyBhbmQgY2FzdHMgaGVyZSBmb3IgVmlkZW9UcmFjayBh
bmQgQXVkaW9UcmFjayB3aGVuIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
cmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSlNUcmVlV2Fsa2Vy
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNUcmVlV2Fsa2VyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVHJlZVdhbGtlcio+KGNlbGwp
OwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENP
TVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1Ry
YWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmlkZW9UcmFjayoganNWaWRlb1RyYWNr
ID0ganNDYXN0PEpTVmlkZW9UcmFjayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoanNWaWRlb1RyYWNrLCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGpzVmlkZW9UcmFjaywgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVG
bGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRo
b3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVChqc1ZpZGVvVHJhY2stPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihqc1ZpZGVvVHJhY2ssIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1
NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmlkZW9UcmFja0xpc3QqIGpzVmlkZW9UcmFj
a0xpc3QgPSBqc0Nhc3Q8SlNWaWRlb1RyYWNrTGlzdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoanNWaWRlb1RyYWNrTGlzdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhqc1ZpZGVvVHJhY2tMaXN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVf
QVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKGpzVmlkZW9UcmFj
a0xpc3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc1ZpZGVvVHJhY2tMaXN0LCB2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0
YXRlKiBleGVjLCBKU0QKIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNf
aW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
QEAgLTI1MSw3ICsyNTEsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
dHRhCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqPihpbXBsKCkpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwICYmICFleGVj
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgwKS5p
bmhlcml0cygmSlNXZWJHTFByb2dyYW06OnNfaW5mbykpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+IDAgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYg
IWV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xQcm9ncmFtOjppbmZvKCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CiAgICAgV2ViR0xQcm9ncmFtKiBwcm9n
cmFtID0gdG9XZWJHTFByb2dyYW0oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKQEAgLTMzNyw3ICszMzcsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9nCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqPihpbXBsKCkpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwICYmICFl
eGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgw
KS5pbmhlcml0cygmSlNXZWJHTFByb2dyYW06OnNfaW5mbykpCisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDAgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkg
JiYgIWV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xQcm9ncmFtOjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CiAgICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gdG9XZWJHTFByb2dyYW0oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIHVuc2lnbmVk
IHBuYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKQEAgLTM2Myw3ICszNjMs
NyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkCiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOwotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPiAwICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9y
TnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgwKS5pbmhlcml0cygmSlNXZWJHTFNoYWRlcjo6c19p
bmZvKSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMo
SlNXZWJHTFNoYWRlcjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4
ZWMpOwogICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSB0b1dlYkdMU2hhZGVyKGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIo
ZXhlYyk7CkBAIC00MDEsMTAgKzQwMSwxMCBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQq
PihpbXBsKCkpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwICYmICFleGVjLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgwKS5pbmhl
cml0cygmSlNXZWJHTFByb2dyYW06OnNfaW5mbykpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+IDAgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4
ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xQcm9ncmFtOjppbmZvKCkpKQogICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CiAgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gdG9XZWJHTFByb2dyYW0oZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAxICYmICFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgp
ICYmICFleGVjLT5hcmd1bWVudCgxKS5pbmhlcml0cygmSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6
c19pbmZvKSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSAmJiAhZXhlYy0+YXJn
dW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMSkuaW5oZXJp
dHMoSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOwogICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2MgPSB0b1dlYkdM
VW5pZm9ybUxvY2F0aW9uKGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCkBAIC00NzcsNyArNDc3LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVu
Y3Rpb25mKERhdGFGdQogICAgIGxvbmcgaW5kZXggPSAtMTsKICAgICAKICAgICBpZiAoZnVuY3Rp
b25Gb3JVbmlmb3JtKGYpKSB7Ci0gICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAw
ICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1
bWVudCgwKS5pbmhlcml0cygmSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6c19pbmZvKSkKKyAgICAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDAgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xV
bmlmb3JtTG9jYXRpb246OmluZm8oKSkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7CiAgICAgICAgIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgfSBlbHNlCkBAIC01NjMsNyArNTYzLDcgQEAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdQogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+IDAgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMt
PmFyZ3VtZW50KDApLmluaGVyaXRzKCZKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjpzX2luZm8pKQor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwICYmICFleGVjLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CiAgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZv
cm1Mb2NhdGlvbihleGVjLT5hcmd1bWVudCgwKSk7CiAgIApAQCAtNjI4LDcgKzYyOCw3IEBAIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDMpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIAotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAwICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYm
ICFleGVjLT5hcmd1bWVudCgwKS5pbmhlcml0cygmSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6c19p
bmZvKSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMo
SlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOwogICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IHRvV2Vi
R0xVbmlmb3JtTG9jYXRpb24oZXhlYy0+YXJndW1lbnQoMCkpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
CShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgSlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OkpTV29ya2VyR2xvYmFsUwogdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKIH0KIAogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCkBAIC05MCw3ICs5MCw3IEBAIEpTRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGUqIHRvSlNEZWRpY2EKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gYXNPYmplY3QodmFs
dWUpLT5jbGFzc0luZm8oKTsKLSAgICBpZiAoY2xhc3NJbmZvID09ICZKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlOjpzX2luZm8pCisgICAgaWYgKGNsYXNzSW5mbyA9PSBKU0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlOjppbmZvKCkpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZSo+KGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgcmV0dXJuIDA7CiB9
CkBAIC0xMDEsNyArMTAxLDcgQEAgSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSogdG9KU1NoYXJl
ZFdvcgogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBhc09iamVjdCh2YWx1ZSktPmNsYXNzSW5mbygp
OwotICAgIGlmIChjbGFzc0luZm8gPT0gJkpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnNfaW5m
bykKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OmluZm8o
KSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlKj4oYXNP
YmplY3QodmFsdWUpKTsKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKIAotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAg
ICAgICBERUNMQVJFX0lORk87CiAKICAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUqIGltcGwoKSBj
b25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpH
bG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgICAgIH0KIAog
ICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1
cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5X
aXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0
MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNYTUxIdHRwUmVxdWVzdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1hNTEh0dHBSZXF1ZXN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxh
Z3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91
dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwpAQCAtMTE5LDE1ICsxMTksMTUgQEAgSlNWYWx1ZSBKU1hN
TEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZQogICAgICAgICBKU1ZhbHVlIHZhbCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgICAgICBpZiAodmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgICAgICBpbXBsKCktPnNlbmQoZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMo
JkpTRG9jdW1lbnQ6OnNfaW5mbykpCisgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cyhKU0Rv
Y3VtZW50OjppbmZvKCkpKQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvRG9jdW1lbnQodmFs
KSwgZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkK
KyAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTQmxvYjo6aW5mbygpKSkKICAgICAgICAg
ICAgIGltcGwoKS0+c2VuZCh0b0Jsb2IodmFsKSwgZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwu
aW5oZXJpdHMoJkpTRE9NRm9ybURhdGE6OnNfaW5mbykpCisgICAgICAgIGVsc2UgaWYgKHZhbC5p
bmhlcml0cyhKU0RPTUZvcm1EYXRhOjppbmZvKCkpKQogICAgICAgICAgICAgaW1wbCgpLT5zZW5k
KHRvRE9NRm9ybURhdGEodmFsKSwgZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMo
JkpTQXJyYXlCdWZmZXI6OnNfaW5mbykpCisgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cyhK
U0FycmF5QnVmZmVyOjppbmZvKCkpKQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlC
dWZmZXIodmFsKSwgZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpTQXJyYXlC
dWZmZXJWaWV3OjpzX2luZm8pKQorICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoSlNBcnJh
eUJ1ZmZlclZpZXc6OmluZm8oKSkpCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJheUJ1
ZmZlclZpZXcodmFsKSwgZWMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbXBsKCktPnNl
bmQodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZWMpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTWFBhdGhSZXN1bHQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNYUGF0aFJlc3VsdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0
aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygp
Lm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY2LDcgKzI2Niw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UK
ICAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAg
ICBKU1ZhbHVlIGpzQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVudENhbGxG
cmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJpdHMoJkpTRE9NR2xvYmFsT2Jq
ZWN0OjpzX2luZm8pKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlzVmFsaWQo
KSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKEpTRE9NR2xvYmFsT2JqZWN0OjppbmZvKCkpKSB7
CiAgICAgICAgICAgICBKU0RPTUdsb2JhbE9iamVjdCogZG9tR2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHN0YXRlKTsKICAgICAgICAgICAgIGpzQ2FsbEZyYW1lID0gdG9KUyhzdGF0ZSwg
ZG9tR2xvYmFsT2JqZWN0LCBtX2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERPTVdpbmRvdyogZG9t
V2luZG93RnJvbVNjcmlwdFN0YXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pbmhlcml0cygmSlNET01XaW5k
b3dCYXNlOjpzX2luZm8pKQorICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pbmhlcml0cyhKU0RPTVdp
bmRvd0Jhc2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBKU0M6Ompz
Q2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpLT5pbXBsKCk7CiB9CkBAIC01OSw3
ICs1OSw3IEBAIERPTVdpbmRvdyogZG9tV2luZG93RnJvbVNjcmlwdFN0YXRlKFNjcmkKIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tU2NyaXB0U3RhdGUo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYg
KCFnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvKSkKKyAg
ICBpZiAoIWdsb2JhbE9iamVjdC0+aW5oZXJpdHMoSlNET01HbG9iYWxPYmplY3Q6OmluZm8oKSkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDcgKzQwMyw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheShvYmplY3QpIHx8IG9iamVjdC0+aW5oZXJpdHMo
JkpTQXJyYXk6OnNfaW5mbyk7CisgICAgICAgIHJldHVybiBpc0pTQXJyYXkob2JqZWN0KSB8fCBv
YmplY3QtPmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVj
a0ZvckR1cGxpY2F0ZShKU09iamVjdCogb2JqZWN0KQpAQCAtNTE5LDI1ICs1MTksMjUgQEAgcHJp
dmF0ZToKICAgICBib29sIGR1bXBBcnJheUJ1ZmZlclZpZXcoSlNPYmplY3QqIG9iaiwgU2VyaWFs
aXphdGlvblJldHVybkNvZGUmIGNvZGUpCiAgICAgewogICAgICAgICB3cml0ZShBcnJheUJ1ZmZl
clZpZXdUYWcpOwotICAgICAgICBpZiAob2JqLT5pbmhlcml0cygmSlNEYXRhVmlldzo6c19pbmZv
KSkKKyAgICAgICAgaWYgKG9iai0+aW5oZXJpdHMoSlNEYXRhVmlldzo6aW5mbygpKSkKICAgICAg
ICAgICAgIHdyaXRlKERhdGFWaWV3VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0
cygmSlNVaW50OENsYW1wZWRBcnJheTo6c19pbmZvKSkKKyAgICAgICAgZWxzZSBpZiAob2JqLT5p
bmhlcml0cyhKU1VpbnQ4Q2xhbXBlZEFycmF5OjppbmZvKCkpKQogICAgICAgICAgICAgd3JpdGUo
VWludDhDbGFtcGVkQXJyYXlUYWcpOwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzKCZK
U0ludDhBcnJheTo6c19pbmZvKSkKKyAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0cyhKU0lu
dDhBcnJheTo6aW5mbygpKSkKICAgICAgICAgICAgIHdyaXRlKEludDhBcnJheVRhZyk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHMoJkpTVWludDhBcnJheTo6c19pbmZvKSkKKyAgICAg
ICAgZWxzZSBpZiAob2JqLT5pbmhlcml0cyhKU1VpbnQ4QXJyYXk6OmluZm8oKSkpCiAgICAgICAg
ICAgICB3cml0ZShVaW50OEFycmF5VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0
cygmSlNJbnQxNkFycmF5OjpzX2luZm8pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRz
KEpTSW50MTZBcnJheTo6aW5mbygpKSkKICAgICAgICAgICAgIHdyaXRlKEludDE2QXJyYXlUYWcp
OwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzKCZKU1VpbnQxNkFycmF5OjpzX2luZm8p
KQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzKEpTVWludDE2QXJyYXk6OmluZm8oKSkp
CiAgICAgICAgICAgICB3cml0ZShVaW50MTZBcnJheVRhZyk7Ci0gICAgICAgIGVsc2UgaWYgKG9i
ai0+aW5oZXJpdHMoJkpTSW50MzJBcnJheTo6c19pbmZvKSkKKyAgICAgICAgZWxzZSBpZiAob2Jq
LT5pbmhlcml0cyhKU0ludDMyQXJyYXk6OmluZm8oKSkpCiAgICAgICAgICAgICB3cml0ZShJbnQz
MkFycmF5VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0cygmSlNVaW50MzJBcnJh
eTo6c19pbmZvKSkKKyAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0cyhKU1VpbnQzMkFycmF5
OjppbmZvKCkpKQogICAgICAgICAgICAgd3JpdGUoVWludDMyQXJyYXlUYWcpOwotICAgICAgICBl
bHNlIGlmIChvYmotPmluaGVyaXRzKCZKU0Zsb2F0MzJBcnJheTo6c19pbmZvKSkKKyAgICAgICAg
ZWxzZSBpZiAob2JqLT5pbmhlcml0cyhKU0Zsb2F0MzJBcnJheTo6aW5mbygpKSkKICAgICAgICAg
ICAgIHdyaXRlKEZsb2F0MzJBcnJheVRhZyk7Ci0gICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJp
dHMoJkpTRmxvYXQ2NEFycmF5OjpzX2luZm8pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVy
aXRzKEpTRmxvYXQ2NEFycmF5OjppbmZvKCkpKQogICAgICAgICAgICAgd3JpdGUoRmxvYXQ2NEFy
cmF5VGFnKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTcz
LDcgKzU3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHZhbHVlKS0+aW5o
ZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkgeworICAgICAgICBpZiAodmFsdWUuaXNPYmpl
Y3QoKSAmJiBhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkg
ewogICAgICAgICAgICAgd3JpdGUoRGF0ZVRhZyk7CiAgICAgICAgICAgICB3cml0ZShhc0RhdGVJ
bnN0YW5jZSh2YWx1ZSktPmludGVybmFsTnVtYmVyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC01ODQsMjAgKzU4NCwyMCBAQCBwcml2YXRlOgogCiAgICAgICAgIGlmICh2YWx1ZS5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QodmFsdWUp
OwotICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykp
IHsKKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKEJvb2xlYW5PYmplY3Q6OmluZm8oKSkp
IHsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFu
ZGxlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgd3JpdGUoYXNCb29sZWFuT2JqZWN0KHZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLnRv
Qm9vbGVhbihtX2V4ZWMpID8gVHJ1ZU9iamVjdFRhZyA6IEZhbHNlT2JqZWN0VGFnKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChv
YmotPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIGlmIChv
YmotPmluaGVyaXRzKFN0cmluZ09iamVjdDo6aW5mbygpKSkgewogICAgICAgICAgICAgICAgIGlm
ICghc3RhcnRPYmplY3RJbnRlcm5hbChvYmopKSAvLyBoYW5kbGUgZHVwbGljYXRlcwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0g
YXNTdHJpbmcoYXNTdHJpbmdPYmplY3QodmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkpLT52YWx1ZSht
X2V4ZWMpOwogICAgICAgICAgICAgICAgIGR1bXBTdHJpbmdPYmplY3Qoc3RyKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvYmot
PmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIGlmIChvYmot
PmluaGVyaXRzKE51bWJlck9iamVjdDo6aW5mbygpKSkgewogICAgICAgICAgICAgICAgIGlmICgh
c3RhcnRPYmplY3RJbnRlcm5hbChvYmopKSAvLyBoYW5kbGUgZHVwbGljYXRlcwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB3cml0ZShOdW1iZXJPYmpl
Y3RUYWcpOwpAQCAtNjA1LDEyICs2MDUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3
cml0ZShvYmotPmludGVybmFsVmFsdWUoKS5hc051bWJlcigpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRz
KCZKU0ZpbGU6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKEpTRmls
ZTo6aW5mbygpKSkgewogICAgICAgICAgICAgICAgIHdyaXRlKEZpbGVUYWcpOwogICAgICAgICAg
ICAgICAgIHdyaXRlKHRvRmlsZShvYmopKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0ZpbGVMaXN0
OjpzX2luZm8pKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0cyhKU0ZpbGVMaXN0Ojpp
bmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgRmlsZUxpc3QqIGxpc3QgPSB0b0ZpbGVMaXN0KG9i
aik7CiAgICAgICAgICAgICAgICAgd3JpdGUoRmlsZUxpc3RUYWcpOwogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwpAQCAtNjE5LDcgKzYxOSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKGxpc3QtPml0ZW0oaSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkgeworICAgICAgICAgICAgaWYgKG9iai0+aW5o
ZXJpdHMoSlNCbG9iOjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoQmxvYlRhZyk7
CiAgICAgICAgICAgICAgICAgQmxvYiogYmxvYiA9IHRvQmxvYihvYmopOwogICAgICAgICAgICAg
ICAgIG1fYmxvYlVSTHMuYXBwZW5kKGJsb2ItPnVybCgpKTsKQEAgLTYyOCw3ICs2MjgsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHdyaXRlKGJsb2ItPnNpemUoKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob2JqLT5p
bmhlcml0cygmSlNJbWFnZURhdGE6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIGlmIChvYmotPmlu
aGVyaXRzKEpTSW1hZ2VEYXRhOjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgSW1hZ2VEYXRh
KiBkYXRhID0gdG9JbWFnZURhdGEob2JqKTsKICAgICAgICAgICAgICAgICB3cml0ZShJbWFnZURh
dGFUYWcpOwogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPndpZHRoKCkpOwpAQCAtNjM3LDcg
KzYzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLT5k
YXRhKCksIGRhdGEtPmRhdGEoKS0+bGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHMoJlJlZ0V4
cE9iamVjdDo6c19pbmZvKSkgeworICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHMoUmVnRXhw
T2JqZWN0OjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgUmVnRXhwT2JqZWN0KiByZWdFeHAg
PSBhc1JlZ0V4cE9iamVjdChvYmopOwogICAgICAgICAgICAgICAgIGNoYXIgZmxhZ3NbM107CiAg
ICAgICAgICAgICAgICAgaW50IGZsYWdDb3VudCA9IDA7CkBAIC02NTIsNyArNjUyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICB3cml0ZShTdHJpbmcoZmxhZ3MsIGZsYWdDb3VudCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKG9iai0+aW5oZXJpdHMoJkpTTWVzc2FnZVBvcnQ6OnNfaW5mbykpIHsKKyAgICAgICAgICAg
IGlmIChvYmotPmluaGVyaXRzKEpTTWVzc2FnZVBvcnQ6OmluZm8oKSkpIHsKICAgICAgICAgICAg
ICAgICBPYmplY3RQb29sOjppdGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9y
dHMuZmluZChvYmopOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVk
TWVzc2FnZVBvcnRzLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE1lc3NhZ2VQ
b3J0UmVmZXJlbmNlVGFnKTsKQEAgLTY2Myw3ICs2NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGNvZGUgPSBWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0cygmSlNBcnJh
eUJ1ZmZlcjo6c19pbmZvKSkgeworICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHMoSlNBcnJh
eUJ1ZmZlcjo6aW5mbygpKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGFy
cmF5QnVmZmVyLT5pc05ldXRlcmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29kZSA9IFZh
bGlkYXRpb25FcnJvcjsKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHdyaXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYXJyYXlCdWZmZXItPmRhdGEo
KSksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHMoJkpTQXJy
YXlCdWZmZXJWaWV3OjpzX2luZm8pKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0cyhK
U0FycmF5QnVmZmVyVmlldzo6aW5mbygpKSkgewogICAgICAgICAgICAgICAgIGlmIChjaGVja0Zv
ckR1cGxpY2F0ZShvYmopKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBkdW1wQXJyYXlCdWZmZXJWaWV3KG9iaiwgY29kZSk7
CkBAIC05MDIsNyArOTAyLDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxp
emVyOgogICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgaGF2ZSBiZWVuIGhhbmRsZWQuIElmIHdl
IHJlYWNoIHRoaXMgcG9pbnQgYW5kCiAgICAgICAgICAgICAgICAgLy8gdGhlIGlucHV0IGlzIG5v
dCBhbiBPYmplY3Qgb2JqZWN0IHRoZW4gd2Ugc2hvdWxkIHRocm93CiAgICAgICAgICAgICAgICAg
Ly8gYSBEYXRhQ2xvbmVFcnJvci4KLSAgICAgICAgICAgICAgICBpZiAoaW5PYmplY3QtPmNsYXNz
SW5mbygpICE9ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCisgICAgICAgICAgICAgICAgaWYgKGlu
T2JqZWN0LT5jbGFzc0luZm8oKSAhPSBKU0ZpbmFsT2JqZWN0OjppbmZvKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgICAgICAgICBpbnB1dE9i
amVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5h
cHBlbmQoMCk7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogICAgICAgICA6IENsb25lQmFz
ZShleGVjKQogICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAgICAg
LCBtX2lzRE9NR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+aW5oZXJpdHMoJkpTRE9NR2xvYmFs
T2JqZWN0OjpzX2luZm8pKQorICAgICAgICAsIG1faXNET01HbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT5pbmhlcml0cyhKU0RPTUdsb2JhbE9iamVjdDo6aW5mbygpKSkKICAgICAgICAgLCBtX3B0
cihidWZmZXIuZGF0YSgpKQogICAgICAgICAsIG1fZW5kKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIu
c2l6ZSgpKQogICAgICAgICAsIG1fdmVyc2lvbigweEZGRkZGRkZGKQpAQCAtMTMwOCw3ICsxMzA4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFyZWFkKGJ5dGVMZW5ndGgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBKU09iamVjdCogYXJyYXlCdWZmZXJPYmogPSBhc09i
amVjdChyZWFkVGVybWluYWwoKSk7Ci0gICAgICAgIGlmICghYXJyYXlCdWZmZXJPYmogfHwgIWFy
cmF5QnVmZmVyT2JqLT5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKKyAgICAgICAg
aWYgKCFhcnJheUJ1ZmZlck9iaiB8fCAhYXJyYXlCdWZmZXJPYmotPmluaGVyaXRzKEpTQXJyYXlC
dWZmZXI6OmluZm8oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdW5z
aWduZWQgZWxlbWVudFNpemUgPSB0eXBlZEFycmF5RWxlbWVudFNpemUoYXJyYXlCdWZmZXJWaWV3
U3VidGFnKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAx
NTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAICsgKGlkKV9ub2RlRnJvbUpTV3JhcHBlcjooSlNPYmpl
Y3RSZWYpanMKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhqc1dyYXBwZXIpOwogCi0g
ICAgaWYgKCFvYmplY3QtPmluaGVyaXRzKCZKU05vZGU6OnNfaW5mbykpCisgICAgaWYgKCFvYmpl
Y3QtPmluaGVyaXRzKEpTTm9kZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAg
IFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBqc0Nhc3Q8SlNOb2RlKj4ob2JqZWN0KS0+aW1wbCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQkocmV2aXNp
b24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGlj
IGlubGluZSBpZCBjcmVhdGVET01XcmFwcGVyKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKIHsKICAg
ICAjZGVmaW5lIFdSQVAoY2xhc3NOYW1lKSBcCi0gICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KCZXZWJDb3JlOjpKUyMjY2xhc3NOYW1lOjpzX2luZm8pKSBcCisgICAgICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzKFdlYkNvcmU6OkpTIyNjbGFzc05hbWU6OmluZm8oKSkpIFwKICAgICAgICAgICAg
IHJldHVybiBraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SlMjI2NsYXNzTmFtZSo+KG9iamVjdCkt
PmltcGwoKSk7CiAKICAgICBXUkFQKENTU1J1bGUpCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBzdGF0
aWMgaW5saW5lIGlkIGNyZWF0ZURPTVdyYXBwZXIoSlNDOjpKCiAKICAgICAjdW5kZWYgV1JBUAog
Ci0gICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJldlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OnNf
aW5mbykpCisgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVs
bDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpKU0RP
TVdpbmRvd1NoZWxsKj4ob2JqZWN0KS0+aW1wbCgpKTsKIAotICAgIGlmIChvYmplY3QtPmluaGVy
aXRzKCZXZWJDb3JlOjpKU0RPTUltcGxlbWVudGF0aW9uOjpzX2luZm8pKQorICAgIGlmIChvYmpl
Y3QtPmluaGVyaXRzKFdlYkNvcmU6OkpTRE9NSW1wbGVtZW50YXRpb246OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybiBraXQoaW1wbGVtZW50YXRpb25Gcm9udChzdGF0aWNfY2FzdDxXZWJDb3JlOjpK
U0RPTUltcGxlbWVudGF0aW9uKj4ob2JqZWN0KSkpOwogCiAgICAgcmV0dXJuIG5pbDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShy
ZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM0LDEzICs1MzQsMTMgQEAgKyAoaWQpX2Nv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVgogICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QodmFsdWUpOwogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhyb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKLSAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMo
JkpTSFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMo
SlNIVE1MRWxlbWVudDo6aW5mbygpKSkgewogICAgICAgICAgICAgLy8gUGx1Z2luIGVsZW1lbnRz
IGNhY2hlIHRoZSBpbnN0YW5jZSBpbnRlcm5hbGx5LgogICAgICAgICAgICAgSFRNTEVsZW1lbnQq
IGVsID0ganNDYXN0PEpTSFRNTEVsZW1lbnQqPihvYmplY3QpLT5pbXBsKCk7CiAgICAgICAgICAg
ICBPYmpjSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8T2JqY0luc3RhbmNlKj4ocGx1
Z2luSW5zdGFuY2UoZWwpKTsKICAgICAgICAgICAgIGlmIChpbnN0YW5jZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gaW5zdGFuY2UtPmdldE9iamVjdCgpOwotICAgICAgICB9IGVsc2UgaWYgKG9i
amVjdC0+aW5oZXJpdHMoJk9iakNSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cyhPYmpDUnVudGltZU9iamVjdDo6aW5mbygpKSkgewog
ICAgICAgICAgICAgT2JqQ1J1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2Fz
dDxPYmpDUnVudGltZU9iamVjdCo+KG9iamVjdCk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2Uq
IGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxPYmpDSW5zdGFuY2UoKTsKICAg
ICAgICAgICAgIGlmIChpbnN0YW5jZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDE2LDcgKzQxNiw3IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xv
dEJvZHkKICAgICBpZiAoJGhhc0F0dHJpYnV0ZXMpIHsKICAgICAgICAgaWYgKCRpbmxpbmVkKSB7
CiAgICAgICAgICAgICBkaWUgIkNhbm5vdCBpbmxpbmUgaWYgTm9TdGF0aWNUYWJsZXMgaXMgc2V0
LiIgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVz
In0pOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICByZXR1
cm4gJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZVNsb3Q8JGNsYXNzTmFtZSwgQmFzZT4o
ZXhlYywgc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGws
ICIgICAgcmV0dXJuICR7bmFtZXNwYWNlTWF5YmV9Z2V0U3RhdGljVmFsdWVTbG90PCRjbGFzc05h
bWUsIEJhc2U+KGV4ZWMsIGluZm8oKS0+c3RhdGljUHJvcEhhc2hUYWJsZSwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
cHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICByZXR1cm4gJHtuYW1lc3BhY2VNYXli
ZX1nZXRTdGF0aWNWYWx1ZVNsb3Q8JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgIiAuIGhhc2hUYWJs
ZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFi
bGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTtc
biIpOwogICAgICAgICB9CkBAIC01MjEsNyArNTIxLDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yQm9keQogICAgIGlmICgkaGFzQXR0cmlidXRlcykgewogICAgICAgICBp
ZiAoJGlubGluZWQpIHsKICAgICAgICAgICAgIGRpZSAiQ2Fubm90IGlubGluZSBpZiBOb1N0YXRp
Y1RhYmxlcyBpcyBzZXQuIiBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpT
Tm9TdGF0aWNUYWJsZXMifSk7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JJbXBsLCAiICAgIHJldHVybiAke25hbWVzcGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVz
Y3JpcHRvcjwkY2xhc3NOYW1lLCBCYXNlPihleGVjLCBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJs
ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICByZXR1cm4gJHtuYW1l
c3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JGNsYXNzTmFtZSwgQmFzZT4oZXhl
YywgaW5mbygpLT5zdGF0aWNQcm9wSGFzaFRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIHJldHVybiAke25hbWVzcGFjZU1heWJl
fWdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjwkY2xhc3NOYW1lLCBCYXNlPihleGVjLCAiIC4gaGFz
aFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0
aWNUYWJsZXMifSwgJGNsYXNzTmFtZSkgLiAiLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpO1xuIik7CiAgICAgICAgIH0KQEAgLTgyOCw5ICs4MjgsMTIgQEAgc3ViIEdlbmVy
YXRlSGVhZGVyCiAKICAgICAjIENsYXNzIGluZm8KICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
Ik5vZGUiKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIFdFQktJ
VF9FWFBPUlREQVRBIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbztcblxuIik7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6Iik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIFdFQktJVF9FWFBPUlREQVRBIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbztcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyogaW5mbygpIHsgcmV0dXJuICZzX2luZm87IH1cblxuIik7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvO1xuXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBE
RUNMQVJFX0lORk87XG5cbiIpOwogICAgIH0KICAgICAjIFN0cnVjdHVyZSBJRAogICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAtODM5LDkgKzg0Miw5IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIpOwogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7CiAgICAgaWYgKElzRE9NR2xvYmFsT2JqZWN0KCRp
bnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpO1xu
Iik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7XG4iKTsKICAg
ICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwogCkBAIC0xMDIyLDEz
ICsxMDI1LDEzIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiQUxXQVlTX0lOTElORSBib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PCR7Y2xhc3NO
YW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdl
bmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwg
JGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQUxXQVlT
X0lOTElORSBib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6
SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6UHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXG4iKTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PCR7
Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSgkaW50ZXJmYWNlLCAkaW50
ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KQEAgLTEwOTUsNyArMTA5OCw3
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAg
IHJldHVybiBwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7
CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVf
SU5GTztcbiIpOwogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCB8fCAkbnVtQ29uc3RhbnRzID4g
MCkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImKTtcbiIpOwpAQCAtMTEwNyw3ICsxMTEwLDcgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKICAgICAgICAgIiAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIiAuCiAgICAgICAgICIg
ICAge1xuIiAuCi0gICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iIC4KKyAgICAgICAgIiAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpO1xu
IiAuCiAgICAgICAgICIgICAgfVxuIik7CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGUifSkgewogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQ
cm9wZXJ0eVNsb3QmKTtcbiIpOwpAQCAtMTMwNCw5ICsxMzA3LDkgQEAgc3ViIEdlbmVyYXRlUGFy
YW1ldGVyc0NoZWNrRXhwcmVzc2lvbgogICAgICAgICAgICAgJHVzZWRBcmd1bWVudHN7JHBhcmFt
ZXRlckluZGV4fSA9IDE7CiAgICAgICAgIH0gZWxzaWYgKCFJc05hdGl2ZVR5cGUoJHR5cGUpKSB7
CiAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+aXNOdWxsYWJsZSkgewotICAgICAgICAgICAg
ICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2YWx1ZX0uaXNOdWxsKCkgfHwgKCR7dmFsdWV9
LmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoJHt2YWx1ZX0pLT5pbmhlcml0cygmSlMke3R5cGV9Ojpz
X2luZm8pKSkiKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiKCR7dmFs
dWV9LmlzTnVsbCgpIHx8ICgke3ZhbHVlfS5pc09iamVjdCgpICYmIGFzT2JqZWN0KCR7dmFsdWV9
KS0+aW5oZXJpdHMoSlMke3R5cGV9OjppbmZvKCkpKSkiKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAYW5kRXhwcmVzc2lvbiwgIigke3ZhbHVlfS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KCR7dmFsdWV9KS0+aW5oZXJpdHMoJkpTJHt0eXBlfTo6c19pbmZvKSki
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiKCR7dmFsdWV9LmlzT2Jq
ZWN0KCkgJiYgYXNPYmplY3QoJHt2YWx1ZX0pLT5pbmhlcml0cyhKUyR7dHlwZX06OmluZm8oKSkp
Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdXNlZEFyZ3VtZW50c3skcGFyYW1ldGVy
SW5kZXh9ID0gMTsKICAgICAgICAgfQpAQCAtMTg2NywxMiArMTg3MCwxMiBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4i
KTsKICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlw
ZSkgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5l
ICJBcnJheUJ1ZmZlciIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCYke2NsYXNzTmFtZX06OnNfaW5mbywgT0JK
RUNUX09GRlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKCR7
Y2xhc3NOYW1lfSwgbV9zdG9yYWdlTGVuZ3RoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJHtjbGFzc05h
bWV9OjppbmZvKCksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZSksIE9C
SkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNj
cmlwdG9yKGltcGwoKSwgZGVzY3JpcHRvcik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIG1fc3RvcmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0
aCgpO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIApAQCAtMTkyMywxMyArMTkyNiwxMyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29s
ICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganND
YXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5m
byk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSgkaW50ZXJmYWNl
LCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAwKSk7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4o
b2JqZWN0KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2Vu
ZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VO
YW1lLCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQpAQCAtMTk0MCw3ICsxOTQzLDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90
JiBzbG90KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0
ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
JnNfaW5mbyk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogCiAgICAgICAg
ICAgICAjIFNpbmsgdGhlIGludC10by1zdHJpbmcgY29udmVyc2lvbiB0aGF0IGhhcHBlbnMgd2hl
biB3ZSBjcmVhdGUgYSBQcm9wZXJ0eU5hbWUKICAgICAgICAgICAgICMgdG8gdGhlIHBvaW50IHdo
ZXJlIHdlIGFjdHVhbGx5IG5lZWQgaXQuCkBAIC0yMTk2LDcgKzIxOTksNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke2NsYXNzTmFtZX06OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAg
ICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21JbmRleGVkU2V0dGVyIn0pIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1xuIik7CiAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbmRleCAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcbiIpOwpAQCAtMjIyMCw3ICsyMjIzLDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW5kZXggPD0gTUFYX0FSUkFZ
X0lOREVYKSB7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBVTlVTRURfUEFSQU0oc2hvdWxkVGhyb3cpO1xuIik7CkBAIC0yMzIzLDcgKzIz
MjYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBteSAkYXJnVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlw
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNOYXRpdmVUeXBl
KCRhcmdUeXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAh
dmFsdWUuaW5oZXJpdHMoJkpTJHthcmdUeXBlfTo6c19pbmZvKSkge1xuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICF2YWx1ZS5pbmhlcml0cyhKUyR7YXJnVHlw
ZX06OmluZm8oKSkpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH07XG4iKTsKQEAgLTI0MjksNyAr
MjQzMiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0
aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCAmc19pbmZvKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19j
YXN0PCR7aW50ZXJmYWNlTmFtZX0qPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKTsgKytp
KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTtcbiIpOwpAQCAtMjUwNiwxMiArMjUwOSwxMiBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTtcbiIpOwot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9OjpzX2luZm8pKVxuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCR7Y2xh
c3NOYW1lfTo6aW5mbygpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVk
VGhpcyA9IGpzQ2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7XG4iKTsKICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICYke2NsYXNzTmFtZX06OnNf
aW5mbyk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtc
biIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDaGVja1NlY3VyaXR5In0gYW5kCiAgICAgICAgICAgICAgICAgICAgICEkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tTZWN1cml0eSJ9KSB7
CkBAIC0yNTc4LDcgKzI1ODEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFz
c05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZs
YWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhv
dXRTZXR0aW5nRmxhZyk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOwpAQCAtMjYzMSw3ICsyNjM0LDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbkpTVmFsdWUgJHtjbGFzc05hbWV9OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NO
YW1lfSogdGhpc09iaiA9IGpzQ2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTtc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmosICZzX2luZm8pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iaiwgaW5mbygpKTtcbiIpOwog
ICAgICAgICBpZiAoJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJE
T01TdHJpbmciKSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJLVVJMLmgifSA9IDE7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4ganNTdHJpbmdPclVuZGVm
aW5lZChleGVjLCB0aGlzT2JqLT5pbXBsKCktPml0ZW0oaW5kZXgpKTtcbiIpOwpAQCAtMjY0OCw3
ICsyNjUxLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBpZiAoJGhhc051bWVy
aWNJbmRleGVkR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5KU1ZhbHVl
ICR7Y2xhc3NOYW1lfTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pO1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpcywgaW5mbygpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBkb3VibGUgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8JGludGVyZmFjZU5hbWUqPihpbXBsKCkpLT5p
dGVtKGluZGV4KTtcbiIpOwogICAgICAgICAjIGpzTnVtYmVyIGNvbnZlcnNpb24gZG9lc24ndCBz
dXBwcmVzcyBzaWduYWxsaW5nIE5hTnMsIHNvIGVuZm9yY2UgdGhhdCBoZXJlLgogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoc3RkOjppc25hbihyZXN1bHQpKVxuIik7CkBAIC0y
ODQxLDcgKzI4NDQsNyBAQCBFTkQKICAgICBpZiAoKCEkaGFzUGFyZW50IG9yICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QifSkgYW5kICEk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21Ub05hdGl2ZU9iamVjdCJ9
KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJGltcGxUeXBlKiB0byR7aW50ZXJmYWNl
TmFtZX0oSlNDOjpKU1ZhbHVlIHZhbHVlKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB2YWx1ZS5p
bmhlcml0cygmJHtjbGFzc05hbWV9OjpzX2luZm8pID8ganNDYXN0PCRjbGFzc05hbWUqPihhc09i
amVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygke2NsYXNzTmFtZX06OmluZm8oKSkgPyBqc0Nhc3Q8
JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDAiKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICI7XG59XG4iKTsKICAgICB9CiAKQEAgLTMwMTgsNyArMzAyMSw3IEBA
IHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgaWYgKCFJc05hdGl2ZVR5
cGUoJGFyZ1R5cGUpKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IFZlY3RvcjwkbmF0aXZlRWxlbWVudFR5cGU+ICRuYW1lO1xuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGZvciAodW5zaWduZWQgaSA9ICRhcmdzSW5kZXg7IGkg
PCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KGkpLmluaGVyaXRz
KCZKUyR7YXJnVHlwZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoaSkuaW5oZXJpdHMoSlMke2Fy
Z1R5cGV9OjppbmZvKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lLmFwcGVuZCh0byRh
cmdUeXBlKGV4ZWMtPmFyZ3VtZW50KGkpKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgfVxuIikKQEAgLTMwNTUsNyArMzA1OCw3IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogCiAgICAgICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKICAgICAgICAgICAgICAgICBpZiAoIUlzTmF0aXZlVHlw
ZSgkYXJnVHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYmICEke2FyZ1ZhbHVl
fS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICEke2FyZ1ZhbHVlfS5pbmhlcml0cygmSlMke2FyZ1R5
cGV9OjpzX2luZm8pKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhJHthcmdW
YWx1ZX0uaXNVbmRlZmluZWRPck51bGwoKSAmJiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoSlMke2Fy
Z1R5cGV9OjppbmZvKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zODkxLDExICszODk0LDExIEBAIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsK
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XG4iKTsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgREVDTEFSRV9JTkZPO1xuIik7CiAKICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB7XG4iKTsK
LSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9
XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOwpAQCAtMzk0
MCwxMCArMzk0MywxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAg
REVDTEFSRV9JTkZPOwogCiBwcml2YXRlOgogICAgIEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwpAQCAtNDI0Nywx
NSArNDI1MCwxNSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGlu
dGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPnZtKCkpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBnbG9iYWxPYmplY3QtPnByb3RvdHlwZSgpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfSBlbHNpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVj
dG9yKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFs
T2JqZWN0KSwgTm9uZSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7XG4iKTsKLSAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05h
bWV9OjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4i
KTsKICAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigke2xlYXN0Q29uc3Ry
dWN0b3JMZW5ndGh9KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xuIikgaWYg
ZGVmaW5lZCAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNw
cAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBA
QCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpKU0Zsb2F0NjRBcnJhCiB2b2lkIEpTRmxvYXQ2
NEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KQEAgLTE1OCwxMSArMTU4LDExIEBAIEpT
RmxvYXQ2NEFycmF5OjpKU0Zsb2F0NjRBcnJheShTdHJ1Y3R1cmUKIHZvaWQgSlNGbG9hdDY0QXJy
YXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmSlNGbG9hdDY0QXJyYXk6
OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKEpTRmxvYXQ2NEFycmF5LCBtX3N0b3JhZ2UpLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGbG9hdDY0QXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpOworICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoSlNGbG9hdDY0QXJyYXk6OmluZm8oKSwgT0JKRUNU
X09GRlNFVE9GKEpTRmxvYXQ2NEFycmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
bG9hdDY0QXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpOwogICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJh
eURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTsKICAgICBtX3N0b3JhZ2UgPSBpbXBsKCkt
PmRhdGEoKTsKICAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0aCgpOwotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
fQogCiBKU09iamVjdCogSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xNzMsNyArMTczLDcgQEAg
SlNPYmplY3QqIEpTRmxvYXQ2NEFycmF5OjpjcmVhdGVQcm90b3R5cAogYm9vbCBKU0Zsb2F0NjRB
cnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2Jq
ZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKGluZGV4
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEZsb2F0
NjRBcnJheSo+KHRoaXNPYmplY3QtPmltcGwoKSktPmxlbmd0aCgpKSB7CiAgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkp
OwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5
U2xvdCgKIGJvb2wgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU0Zsb2F0NjRBcnJheSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KG9iamVjdCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwogICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxGbG9hdDY0QXJyYXkqPih0aGlzT2Jq
ZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkgewogICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpOwpAQCAt
MTk3LDcgKzE5Nyw3IEBAIGJvb2wgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5RGVzY3IK
IGJvb2wgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmxvYXQ2
NEFycmF5Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDxGbG9hdDY0QXJyYXkqPih0aGlz
T2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkgewogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNP
YmplY3QsIHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMTQsNyArMjE0LDcgQEAgSlNWYWx1ZSBqc0Zsb2F0NjRBcnJheUNvbnN0
cnVjdG9yKEV4ZWNTdAogdm9pZCBKU0Zsb2F0NjRBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGbG9hdDY0QXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7CiAgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkg
ewogICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBpbmRleCwgdmFsdWUpOwpA
QCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgSlNGbG9hdDY0QXJyYXk6OnB1dChKU0NlbGwqIGNlbGws
IEUKIHZvaWQgSlNGbG9hdDY0QXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogewogICAgIEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmxvYXQ2NEFy
cmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAgICAgaWYgKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBVTlVTRURf
UEFSQU0oc2hvdWxkVGhyb3cpOwogICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVj
LCBpbmRleCwgdmFsdWUpOwpAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgSlNGbG9hdDY0QXJyYXk6
OnB1dEJ5SW5kZXgoSlNDZWxsKiAKIHZvaWQgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGbG9hdDY0
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxGbG9hdDY0QXJyYXkqPih0aGlzT2JqZWN0LT5p
bXBsKCkpLT5sZW5ndGgoKTsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpKTsKICAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKQEAgLTI1MiwxMCArMjUyLDEwIEBA
IEpTVmFsdWUgSlNGbG9hdDY0QXJyYXk6OmdldENvbnN0cnVjdG9yKEUKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNGbG9hdDY0QXJyYXlQcm90b3R5cGVGdW5jdGlvbkZvbyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTRmxvYXQ2NEFycmF5OjpzX2luZm8p
KQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTRmxvYXQ2NEFycmF5OjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU0Zsb2F0NjRBcnJh
eSogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTRmxvYXQ2
NEFycmF5OjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNGbG9hdDY0QXJyYXk6OmluZm8oKSk7CiAgICAgRmxvYXQ2NEFycmF5KiBpbXBsID0gc3Rh
dGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNzAsMTcgKzI3MCwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzRmxvYXQ2NEFyCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzRmxvYXQ2NEFycmF5UHJvdG90eXBlRnVuY3Rpb25TZXQoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU0Zsb2F0NjRBcnJheTo6c19p
bmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU0Zsb2F0NjRBcnJheTo6aW5mbygp
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNGbG9hdDY0
QXJyYXkqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihhc09iamVjdCh0aGlz
VmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU0Zs
b2F0NjRBcnJheTo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTRmxvYXQ2NEFycmF5OjppbmZvKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc2V0V2ViR0xBcnJheUhlbHBlcjxGbG9hdDY0QXJyYXksIGRvdWJsZT4oZXhlYywgY2FzdGVk
VGhpcy0+aW1wbCgpKSk7CiB9CiAKIAogSlNWYWx1ZSBKU0Zsb2F0NjRBcnJheTo6Z2V0QnlJbmRl
eChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXMsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
cywgaW5mbygpKTsKICAgICBkb3VibGUgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RmxvYXQ2NEFycmF5
Kj4oaW1wbCgpKS0+aXRlbShpbmRleCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4ocmVzdWx0KSkKICAg
ICAgICAgcmV0dXJuIGpzTmFOKCk7CkBAIC0yODksNyArMjg5LDcgQEAgSlNWYWx1ZSBKU0Zsb2F0
NjRBcnJheTo6Z2V0QnlJbmRleChFeGVjUwogCiBGbG9hdDY0QXJyYXkqIHRvRmxvYXQ2NEFycmF5
KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTRmxv
YXQ2NEFycmF5OjpzX2luZm8pID8ganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4oYXNPYmplY3QodmFs
dWUpKS0+aW1wbCgpIDogMDsKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoSlNGbG9hdDY0QXJy
YXk6OmluZm8oKSkgPyBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihhc09iamVjdCh2YWx1ZSkpLT5p
bXBsKCkgOiAwOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTU0MDEz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAog
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC04MiwxMiArODIsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gcHRyOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMTIsMTAgKzExMiwxMCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYp
OwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9J
TkZPOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25z
dHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZl
RE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDcgQEAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OkpT
VGVzdAogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwotICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVj
dChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RBY3Rp
dmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRF
bnVtKTsKIH0KQEAgLTExNiw3ICsxMTYsNyBAQCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OkpTVGVz
dEFjdGl2ZURPTU9iCiB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAogSlNP
YmplY3QqIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTEzOCwxNCArMTM4LDE0IEBA
IEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6fkpTVGVzdEFjdGl2ZURPTU8KIGJvb2wgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEFjdGl2ZURPTU9iamVjdCo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RB
Y3RpdmVET01PYmplY3QsIEJhc2U+KGV4ZWMsICZKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogYm9vbCBKU1Rlc3RBY3RpdmVE
T01PYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKIHsKICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoIXNob3VsZEFsbG93QWNj
ZXNzVG9GcmFtZShleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RB
Y3RpdmVET01PYmplY3QsIEJhc2U+KGV4ZWMsICZKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKQEAgLTE3OSwxMCArMTc5LDEw
IEBAIEpTVmFsdWUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRDb25zdHIKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25F
eGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVy
aXRzKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdEFjdGl2ZURP
TU9iamVjdDo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6aW5mbygpKTsKICAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBjYXN0ZWRUaGlzLT5pbXBs
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0QWN0aXZlRE9NT2Jq
ZWN0Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXYKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdEFjdGl2ZURPTU9i
amVjdDo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RBY3RpdmVE
T01PYmplY3Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OwogICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RB
Y3RpdmVET01PYmplY3QqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RBY3RpdmVET01PYmplY3Q6OnNfaW5mbyk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RBY3RpdmVE
T01PYmplY3Q6OmluZm8oKSk7CiAgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCA9IHN0YXRp
Y19jYXN0PFRlc3RBY3RpdmVET01PYmplY3QqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI3NSw3ICsy
NzUsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAKIFRlc3RB
Y3RpdmVET01PYmplY3QqIHRvVGVzdEFjdGl2ZURPTU9iamVjdChKU0M6OkpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RBY3RpdmVET01PYmplY3Q6OnNf
aW5mbykgPyBqc0Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKS0+
aW1wbCgpIDogMDsKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0OjppbmZvKCkpID8ganNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KGFzT2JqZWN0KHZh
bHVlKSktPmltcGwoKSA6IDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6
OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RBY3RpdmVET01PYmplY3QoKTsKLSAgICBzdGF0aWMgY29u
c3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAg
LTEwMiwxMiArMTAyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAK
LSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5G
TzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiBwcml2YXRlOgpA
QCAtMTMyLDEwICsxMzIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKICAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZpc2lv
biAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6OkpTVGUKIHZvaWQgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPnZtKCkpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwog
ICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQpAQCAtMTEz
LDcgKzExMyw3IEBAIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpKU1Rlc3RDdXN0b21OYW0KIHZv
aWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTEzNSw3ICsxMzUsNyBAQCBKU1Rlc3RDdXN0b21O
YW1lZEdldHRlcjo6fkpTVGVzdEN1c3RvbU5hCiBib29sIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUoZXhlYywgc3RhdGljX2Nhc3Q8
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1l
KSkgewogICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1l
R2V0dGVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDYsNyArMTQ2LDcgQEAgYm9vbCBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0T3duUHJvcAogYm9vbCBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoY2FuR2V0SXRlbXNG
b3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PFRlc3RDdXN0b21OYW1lZEdldHRlcio+KHRoaXNPYmpl
Y3QtPmltcGwoKSksIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qo
dGhpc09iamVjdCk7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVHZXR0
ZXIpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Omdl
dE93blByb3AKIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0KTsKLSAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7CiAgICAg
aWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDxUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIqPih0aGlzT2JqZWN0LT5pbXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpOwpAQCAtMTgy
LDEwICsxODIsMTAgQEAgSlNWYWx1ZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0Q29ucwog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OnNfaW5mbykpCisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCAmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6aW5mbygp
KTsKICAgICBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI1OSw3ICsyNTksNyBAQCBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAKIFRlc3RDdXN0b21OYW1lZEdl
dHRlciogdG9UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OnNfaW5mbykg
PyBqc0Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBs
KCkgOiAwOworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU1Rlc3RDdXN0b21OYW1lZEdldHRl
cjo6aW5mbygpKSA/IGpzQ2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+KGFzT2JqZWN0KHZh
bHVlKSktPmltcGwoKSA6IDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAKICAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwdHI7CiAg
ICAgfQogCi0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNM
QVJFX0lORk87CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTEzNiwxMCArMTM2LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTks
NyBAQCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVzCiB2b2lkIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPnZtKCkpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CkBAIC0x
NDYsNyArMTQ2LDcgQEAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdAog
dm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBKU09iamVjdCogSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTE2OCwxNCArMTY4LDE0IEBAIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6On5KU1Rlc3RFdmVudENvbnMKIGJvb2wgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcio+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RFdmVudENvbnN0
cnVjdG9yLCBCYXNlPihleGVjLCAmSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclRhYmxlLCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiBib29sIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKIHsKICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURl
c2NyaXB0b3I8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvciwgQmFzZT4oZXhlYywgJkpTVGVzdEV2ZW50
Q29uc3RydWN0b3JUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
IH0KIApAQCAtMjczLDcgKzI3Myw3IEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCAKIAogVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvVGVzdEV2ZW50Q29uc3RydWN0b3Io
SlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6c19pbmZvKSA/IGpzQ2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9y
Kj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJp
dHMoSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6aW5mbygpKSA/IGpzQ2FzdDxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV2ZW50Q29u
c3RydWN0b3IoKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAg
IERFQ0xBUkVfSU5GTzsKIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTEwNCwxMCArMTA0LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lO
Rk87CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyAr
NjUsNyBAQCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjpKU1Rlc3RFdmVuCiB2b2lkIEpT
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT52bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6
OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBw
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KQEAgLTEyMiw3ICsx
MjIsNyBAQCBKU1Rlc3RFdmVudFRhcmdldDo6SlNUZXN0RXZlbnRUYXJnZXQoU3RyCiB2b2lkIEpT
VGVzdEV2ZW50VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNT
RVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBKU09iamVjdCogSlNUZXN0RXZlbnRUYXJnZXQ6
OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNUZXN0RXZlbnRUYXJnZXQ6On5KU1Rlc3RFdmVu
dFRhcmdldCgpCiBib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50
cnkgPSBnZXRTdGF0aWNWYWx1ZVNsb3RFbnRyeVdpdGhvdXRDYWNoaW5nPEpTVGVzdEV2ZW50VGFy
Z2V0PihleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewogICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7CkBAIC0xNjUs
NyArMTY1LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlTbAogYm9v
bCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBjb25zdCBIYXNoRW50cnkq
IGVudHJ5ID0gSlNUZXN0RXZlbnRUYXJnZXRUYWJsZS5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUp
OwogICAgIGlmIChlbnRyeSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0
KTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9w
ZXJ0eURlCiBib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKGluZGV4IDwgc3RhdGljX2Nhc3Q8VGVz
dEV2ZW50VGFyZ2V0Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHsKICAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhH
ZXR0ZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNCw3ICsyMTQsNyBAQCBKU1ZhbHVl
IGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoRXhlCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
ewogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50
VGFyZ2V0Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8VGVzdEV2
ZW50VGFyZ2V0Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCk7ICsraSkKICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CiAgICAgIEJhc2U6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CkBAIC0yMjgsMTAgKzIyOCwxMCBAQCBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRD
b25zdHJ1Y3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0RXZlbnRUYXJnZXQ6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoSlNUZXN0RXZlbnRUYXJnZXQ6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0RXZlbnRUYXJnZXQ6OnNfaW5m
byk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVu
dFRhcmdldDo6aW5mbygpKTsKICAgICBUZXN0RXZlbnRUYXJnZXQqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0RXZlbnRUYXJnZXQqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI1MCwxMCArMjUwLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnQKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50
TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RF
dmVudFRhcmdldDo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RF
dmVudFRhcmdldDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0RXZl
bnRUYXJnZXQqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RFdmVudFRhcmdldDo6c19pbmZvKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdEV2ZW50VGFyZ2V0OjppbmZv
KCkpOwogICAgIFRlc3RFdmVudFRhcmdldCogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RFdmVudFRh
cmdldCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMt
PmFyZ3VtZW50KDEpOwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKQEAgLTI2NSwxMCAr
MjY1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnQKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlv
blJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVy
aXRzKCZKU1Rlc3RFdmVudFRhcmdldDo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cyhKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RFdmVudFRhcmdldDo6c19pbmZv
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdEV2ZW50
VGFyZ2V0OjppbmZvKCkpOwogICAgIFRlc3RFdmVudFRhcmdldCogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RFdmVudFRhcmdldCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgSlNWYWx1ZSBsaXN0
ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
QEAgLTI4MCwxMCArMjgwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
RXZlbnQKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKCZKU1Rlc3RFdmVudFRhcmdldDo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cyhKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMg
PSBqc0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RFdmVudFRhcmdldDo6
c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dEV2ZW50VGFyZ2V0OjppbmZvKCkpOwogICAgIFRlc3RFdmVudFRhcmdldCogaW1wbCA9IHN0YXRp
Y19jYXN0PFRlc3RFdmVudFRhcmdldCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMzAwLDcgKzMwMCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnQKIHZvaWQgSlNUZXN0
RXZlbnRUYXJnZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RFdmVudFRhcmdldCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxh
Zyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Ojp2
aXNpdENoaWxkcmVuKEpTCiBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjppbmRleEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4KQogewogICAg
IEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlzT2JqID0ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4o
YXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmosICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iaiwgaW5m
bygpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgc3Rh
dGljX2Nhc3Q8VGVzdEV2ZW50VGFyZ2V0Kj4odGhpc09iai0+aW1wbCgpKS0+aXRlbShpbmRleCkp
OwogfQogCkBAIC0zODIsNyArMzgyLDcgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIAogCiBUZXN0RXZlbnRUYXJnZXQqIHRvVGVzdEV2ZW50VGFyZ2V0KEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVzdEV2ZW50VGFy
Z2V0OjpzX2luZm8pID8ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oYXNPYmplY3QodmFsdWUp
KS0+aW1wbCgpIDogMDsKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoSlNUZXN0RXZlbnRUYXJn
ZXQ6OmluZm8oKSkgPyBqc0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihhc09iamVjdCh2YWx1ZSkp
LT5pbXBsKCkgOiAwOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNp
b24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwxMSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U1Rlc3RFdmVudFRhcmdldCgpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2lu
Zm87CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTEx
MSwxMiArMTExLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKLSAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYp
OwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAt
MTQxLDEwICsxNDEsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
OjpKU1Rlc3RFeGNlcHQKIHZvaWQgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKLSAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXRE
aXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0
RXhjZXB0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CiB9CkBAIC05OSw3ICs5OSw3IEBAIEpTVGVzdEV4Y2VwdGlvbjo6SlNUZXN0RXhjZXB0aW9u
KFN0cnVjdHUKIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBKU09iamVjdCogSlNU
ZXN0RXhjZXB0aW9uOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTIxLDE0ICsxMjEsMTQgQEAgSlNUZXN0RXhjZXB0aW9u
Ojp+SlNUZXN0RXhjZXB0aW9uKCkKIGJvb2wgSlNUZXN0RXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNUZXN0RXhjZXB0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV4Y2VwdGlvbio+KG9iamVjdCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRp
Y1ZhbHVlU2xvdDxKU1Rlc3RFeGNlcHRpb24sIEJhc2U+KGV4ZWMsICZKU1Rlc3RFeGNlcHRpb25U
YWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogYm9vbCBKU1Rlc3RF
eGNlcHRpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKIHsKICAgICBKU1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0RXhjZXB0aW9uKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9y
PEpTVGVzdEV4Y2VwdGlvbiwgQmFzZT4oZXhlYywgJkpTVGVzdEV4Y2VwdGlvblRhYmxlLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC0yMTYsNyArMjE2LDcg
QEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogCiBUZXN0RXhjZXB0
aW9uKiB0b1Rlc3RFeGNlcHRpb24oSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiB2
YWx1ZS5pbmhlcml0cygmSlNUZXN0RXhjZXB0aW9uOjpzX2luZm8pID8ganNDYXN0PEpTVGVzdEV4
Y2VwdGlvbio+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7CisgICAgcmV0dXJuIHZhbHVl
LmluaGVyaXRzKEpTVGVzdEV4Y2VwdGlvbjo6aW5mbygpKSA/IGpzQ2FzdDxKU1Rlc3RFeGNlcHRp
b24qPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEx
ICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpK
U0NlbGwqKTsKICAgICB+SlNUZXN0RXhjZXB0aW9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC0xMDIsMTAg
KzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCi0gICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMzAsMTAg
KzEzMCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6SlNU
ZXN0SW50ZXJmCiB2b2lkIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7Ci0gICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwogICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwog
fQpAQCAtMjU2LDcgKzI1Niw3IEBAIEpTVGVzdEludGVyZmFjZTo6SlNUZXN0SW50ZXJmYWNlKFN0
cnVjdHUKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBKU09iamVjdCogSlNUZXN0
SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQpAQCAtMjc4LDE0ICsyNzgsMTQgQEAgSlNUZXN0SW50ZXJmYWNlOjp+
SlNUZXN0SW50ZXJmYWNlKCkKIGJvb2wgSlNUZXN0SW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxKU1Rlc3RJbnRlcmZhY2UsIEJhc2U+KGV4ZWMsICZKU1Rlc3RJbnRlcmZhY2VUYWJs
ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogYm9vbCBKU1Rlc3RJbnRl
cmZhY2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKIHsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpT
VGVzdEludGVyZmFjZSwgQmFzZT4oZXhlYywgJkpTVGVzdEludGVyZmFjZVRhYmxlLCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC00MzIsNyArNDMyLDcgQEAg
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjUwogdm9pZCBKU1Rlc3RJbnRl
cmZhY2U6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihj
ZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCkpCiAgICAgICAgIHJldHVybjsKICAgICBsb29rdXBQdXQ8SlNUZXN0SW50ZXJmYWNlLCBC
YXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0SW50ZXJmYWNlVGFibGUsIHRo
aXNPYmplY3QsIHNsb3QpOwpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNl
OjpwdXQoSlNDZWxsKiBjZWxsLCAKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNob3VsZFRocm93KTsKICAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpCkBAIC01NTYsMTAgKzU1NiwxMCBAQCBKU1ZhbHVlIEpT
VGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDEoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RJbnRlcmZhY2U6OnNf
aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0SW50ZXJmYWNlOjppbmZv
KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0SW50ZXJmYWNlOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpOwogICAgIFRlc3RJbnRlcmZhY2Uq
IGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0SW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
ICAgICBpbXBsLT5pbXBsZW1lbnRzTWV0aG9kMSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzEsMTAgKzU3MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RJbnRlcmZhY2U6OnNfaW5mbykp
CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RJbnRlcmZh
Y2UqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
SW50ZXJmYWNlOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpOwogICAgIFRlc3RJbnRlcmZhY2UqIGltcGwg
PSBzdGF0aWNfY2FzdDxUZXN0SW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC02MDAsMTAg
KzYwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
SW1wbGVtZW50c01ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RJbnRlcmZhY2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
SlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
SW50ZXJmYWNlKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0SW50ZXJmYWNlOjpzX2luZm8pOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c01ldGhv
ZDMoZXhlYykpOwogfQogCkBAIC02MjIsMTAgKzYyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEludGVyCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdEludGVyZmFjZTo6c19pbmZvKSkK
KyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdEludGVyZmFj
ZSogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RJ
bnRlcmZhY2U6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7CiAgICAgVGVzdEludGVyZmFjZSogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIFRl
c3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDEoaW1wbCk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYzNywxMCArNjM3LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRo
b2QyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0SW50ZXJm
YWNlOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdEludGVyZmFj
ZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
SlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGFz
T2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgJkpTVGVzdEludGVyZmFjZTo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsKICAgICBUZXN0SW50
ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdEludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwpAQCAtNjY2LDEwICs2NjYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RJbnRlcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RJbnRlcmZhY2U6OnNfaW5mbykpCisgICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMg
PSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0SW50ZXJmYWNlOjpzX2lu
Zm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50
ZXJmYWNlOjppbmZvKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+
c3VwcGxlbWVudGFsTWV0aG9kMyhleGVjKSk7CiB9CiAKQEAgLTc2Myw3ICs3NjMsNyBAQCBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAKIFRlc3RJbnRlcmZhY2UqIHRv
VGVzdEludGVyZmFjZShKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RJbnRlcmZhY2U6OnNfaW5mbykgPyBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNl
Kj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJp
dHMoSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpID8ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGFz
T2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDEx
IEBAIHB1YmxpYzoKICAgICBib29sIHB1dERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEludGVyZmFjZSgp
OwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9J
TkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKICAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwpAQCAtMTI5LDEyICsxMjksMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0xNTksMTAgKzE1OSwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yOgogdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsK
LSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQpAQCAtMTEzLDcgKzExMyw3IEBAIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkpTVGVzdE1lZGkKIHZvaWQgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xMzUsMTQgKzEzNSwxNCBAQCBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjp+SlNUZXN0TWVkCiBib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciwgQmFzZT4oZXhlYywgJkpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAog
Ym9vbCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIsIEJhc2U+KGV4ZWMsICZKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9
CiAKQEAgLTE2MCwxMCArMTYwLDEwIEBAIEpTVmFsdWUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Z2UKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6c19pbmZvKSkK
KyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
OjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6aW5mbygpKTsKICAgICBUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yMzcsNyArMjM3LDcgQEAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogCiBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciog
dG9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpzX2lu
Zm8pID8ganNDYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihhc09iamVjdCh2YWx1
ZSkpLT5pbXBsKCkgOiAwOworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjppbmZvKCkpID8ganNDYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgJKHJldmlzaW9uIDE1NDAxMykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtMTAyLDEyICsx
MDIsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMzIsMTAg
KzEzMiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1Rlcwogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0
cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQpAQCAtMTA2LDcgKzEwNiw3IEBAIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjoKIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQpAQCAtMTQzLDcgKzE0Myw3IEBAIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3I6OkpTVGVzdE5hbWVkQ29uc3QKIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6
OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC0xNjUsMTQgKzE2NSwxNCBAQCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjp+SlNU
ZXN0TmFtZWRDb25zCiBib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqPihvYmplY3Qp
OwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvciwgQmFzZT4oZXhl
YywgJkpTVGVzdE5hbWVkQ29uc3RydWN0b3JUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdE5h
bWVkQ29uc3RydWN0b3IsIEJhc2U+KGV4ZWMsICZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yVGFibGUs
IHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAKIFRlc3RO
YW1lZENvbnN0cnVjdG9yKiB0b1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6
OnNfaW5mbykgPyBqc0Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KGFzT2JqZWN0KHZhbHVl
KSktPmltcGwoKSA6IDA7CisgICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKEpTVGVzdE5hbWVkQ29u
c3RydWN0b3I6OmluZm8oKSkgPyBqc0Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KGFzT2Jq
ZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3ROYW1lZENvbnN0cnVjdG9yKCk7Ci0gICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAK
ICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7CkBAIC0xMDMsMTAgKzEwMywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwdHI7
CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBE
RUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC0xMzEsMTAgKzEzMSwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3Ry
dWN0dXJlRmxhZ3M7CkBAIC0xNTMsMTAgKzE1MywxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiBwcml2YXRlOgogICAgIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OkpTVGVzdE5v
ZGVDb25zdHJ1CiB2b2lkIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CkBAIC0xMTEs
NyArMTExLDcgQEAgSlNUZXN0Tm9kZTo6SlNUZXN0Tm9kZShTdHJ1Y3R1cmUqIHN0cnVjdAogdm9p
ZCBKU1Rlc3ROb2RlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBKU09iamVjdCogSlNUZXN0Tm9kZTo6Y3JlYXRlUHJv
dG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAg
LTEyMiwxNCArMTIyLDE0IEBAIEpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpjcmVhdGVQcm90b3R5cGUo
RXgKIGJvb2wgSlNUZXN0Tm9kZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Tm9k
ZSo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3ROb2RlLCBCYXNlPihleGVj
LCAmSlNUZXN0Tm9kZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CiBib29sIEpTVGVzdE5vZGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5vZGUqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8
SlNUZXN0Tm9kZSwgQmFzZT4oZXhlYywgJkpTVGVzdE5vZGVUYWJsZSwgdGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIEpTVmFsdWUg
SlNUZXN0Tm9kZTo6Z2V0Q29uc3RydWN0b3IoRXhlY1MKIHZvaWQgSlNUZXN0Tm9kZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVGVz
dE5vZGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Tm9kZSo+KGNlbGwpOwotICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkocmV2aXNp
b24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02OSwxMCArNjksMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtOTcsMTAgKzk3LDEwIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBE
RUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShy
ZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIEpTVGVz
dE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RPYmpDb25zdHJ1Y3QKIHZvaWQgSlNUZXN0T2JqQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsK
LSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUg
fCBEb250RW51bSk7CiB9CkBAIC0zNzEsNyArMzcxLDcgQEAgSlNUZXN0T2JqOjpKU1Rlc3RPYmoo
U3RydWN0dXJlKiBzdHJ1Y3R1cgogdm9pZCBKU1Rlc3RPYmo6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKIEpTT2JqZWN0
KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0zOTMsMTQgKzM5MywxNCBAQCBKU1Rlc3RPYmo6On5KU1Rl
c3RPYmooKQogYm9vbCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3RPYmoqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
T2JqKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
ICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdE9iaiwgQmFzZT4oZXhl
YywgJkpTVGVzdE9ialRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CiBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTVGVzdE9iaiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3RPYmoqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNU
ZXN0T2JqLCBCYXNlPihleGVjLCAmSlNUZXN0T2JqVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKQEAgLTExMDYsNyArMTEwNiw3IEBAIEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3IoRXhlY1N0YXRlKiAKIHZvaWQgSlNUZXN0T2JqOjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgbG9va3VwUHV0PEpTVGVzdE9iaiwgQmFzZT4o
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgJkpTVGVzdE9ialRhYmxlLCB0aGlzT2JqZWN0LCBz
bG90KTsKIH0KIApAQCAtMTc0OCwxMCArMTc0OCwxMCBAQCBKU1ZhbHVlIEpTVGVzdE9iajo6Z2V0
Q29uc3RydWN0b3IoRXhlY1N0CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGltcGwtPnZvaWRN
ZXRob2QoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
MTc2MCwxMCArMTc2MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVm9pZE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpT
VGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
JkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMTc4MywxMCArMTc4MywxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
Q2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
VGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwtPmJ5dGVNZXRob2Qo
KSk7CkBAIC0xNzk2LDEwICsxNzk2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1Zh
bHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0xODIwLDEwICsxODIwLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZv
KSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwtPm9j
dGV0TWV0aG9kKCkpOwpAQCAtMTgzMywxMCArMTgzMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9i
aiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTE4NTcs
MTAgKzE4NTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxv
bmdNZXRob2QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RP
Ymo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZv
KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpz
X2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLT5sb25nTWV0aG9kKCkpOwpAQCAtMTg3MCwxMCArMTg3MCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpA
QCAtMTg5NCwxMCArMTg5NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9i
ajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVz
dE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC0+
b2JqTWV0aG9kKCkpKTsKQEAgLTE5MDcsMTAgKzE5MDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2Jq
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMTkzMSwx
MCArMTkzMSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFNlcXVlbmNlQXJnKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0
cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVz
dE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpT
VGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMTk0OCwxMCArMTk0OCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVuY2Uo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CkBAIC0xOTY2LDEwICsxOTY2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTE5ODUsMTAgKzE5ODUs
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRS
ZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
SlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yMDA4LDEwICsyMDA4LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykp
CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CkBAIC0yMDI1LDEwICsyMDI1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMjA0NSwxMCArMjA0NSwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwtPm1ldGhv
ZFdpdGhFeGNlcHRpb24oZWMpOwpAQCAtMjA1OSwzMCArMjA1OSwzMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZChleGVjKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RP
Ymo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlz
VmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rl
c3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5jdXN0b21NZXRob2RXaXRoQXJncyhleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8p
KQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CiAgICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAg
IGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKQEAgLTIwOTQsMTAgKzIwOTQsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykp
CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKICAgICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAg
aWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQpAQCAtMjEwOSwxMCArMjEwOSwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkK
KyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwogICAgIGltcGwtPndpdGhTY3JpcHRTdGF0ZVZvaWQoZXhlYyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIxMjEsMTAgKzIxMjEsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9i
aihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPndpdGhTY3JpcHRTdGF0
ZU9iaihleGVjKSkpOwpAQCAtMjEzNiwxMCArMjEzNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwtPndpdGhTY3JpcHRTdGF0
ZVZvaWRFeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtMjE1MCwxMCArMjE1MCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpz
X2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZv
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKQEAgLTIxNjcsMTAg
KzIxNjcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpT
VGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
JkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
IXNjcmlwdENvbnRleHQpCkBAIC0yMTgyLDEwICsyMTgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2Jq
OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygp
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19p
bmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQp
CkBAIC0yMTk3LDEwICsyMTk3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpz
X2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZv
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
QEAgLTIyMTcsMTAgKzIyMTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCkBAIC0y
MjM1LDEwICsyMjM1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBs
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhl
eGVjLCAwKSk7CiAgICAgaW1wbC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayhzY3Jp
cHRBcmd1bWVudHMucmVsZWFzZSgpKTsKQEAgLTIyNDgsMTAgKzIyNDgsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkK
KyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwogCiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
QEAgLTIyNzAsMTAgKzIyNzAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
LSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAt
MjI5NywxMCArMjI5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
LSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAt
MjMzMiwxMCArMjMzMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVy
aXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAKICAgICBzaXplX3QgYXJn
c0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwpAQCAtMjM1NCwxMCArMjM1NCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nSXNVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0
T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBjb25zdCBTdHJpbmcmIHN0cihleGVj
LT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQpAQCAtMjM2OSwxMCArMjM2OSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
LSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgY29uc3QgU3RyaW5nJiBzdHIoYXJndW1lbnRPck51bGwoZXhlYywgMCkuaXNFbXB0eSgp
ID8gU3RyaW5nKCkgOiBhcmd1bWVudE9yTnVsbChleGVjLCAwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTIzODQsMTAgKzIz
ODQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0FyZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpT
VGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6
OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI0MDEsMTAgKzI0MDEsMTAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5m
bygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkp
OwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6
c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwpAQCAtMjQyMSwxMCArMjQyMSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmco
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazsKICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewpAQCAtMjQ2MywxMCArMjQ2MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9iakNvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2Jq
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAKICAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC0+Y29u
ZGl0aW9uYWxNZXRob2QxKCkpOwpAQCAtMjQ3OSwxMCArMjQ3OSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
LSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgaW1wbC0+Y29uZGl0aW9uYWxNZXRob2QyKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTI0OTQsMTAgKzI0OTQsMTAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
Q2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
VGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwogICAgIGltcGwtPmNvbmRpdGlvbmFsTWV0aG9kMygpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yNTA4LDEwICsyNTA4LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykp
CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CkBAIC0yNTI4LDEwICsyNTI4LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGUKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGlt
cGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNTU1LDEwICsy
NTU1LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0
T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNTcyLDEwICsyNTcyLDEwIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CkBAIC0yNTg5LDEwICsyNTg5LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGUKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoq
IGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNjA2LDEw
ICsyNjA2LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDYoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVy
aXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNU
ZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNjIzLDEwICsyNjIzLDEwIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNf
aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8p
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CkBAIC0yNjQwLDEwICsyNjQwLDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGUKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDgoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RP
YmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNjU3
LDEwICsyNjU3LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
SlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yNjc0LDEwICsyNjc0LDEwIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2Jq
OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygp
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19p
bmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwpAQCAtMjY5MSwxMCArMjY5MSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1RlCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
Q2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
VGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAg
LTI3MTAsOSArMjcxMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIEpT
VmFsdWUgYXJnMShleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgSlNWYWx1ZSBhcmcwKGV4ZWMtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoKGFyZ3NDb3VudCA9PSAyICYmIChhcmcwLmlzTnVsbCgpIHx8
IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKCZKU1Rlc3RPYmo6
OnNfaW5mbykpKSAmJiAoYXJnMS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGFyZzEuaXNTdHJpbmco
KSB8fCBhcmcxLmlzT2JqZWN0KCkpKSkKKyAgICBpZiAoKGFyZ3NDb3VudCA9PSAyICYmIChhcmcw
LmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRz
KEpTVGVzdE9iajo6aW5mbygpKSkpICYmIChhcmcxLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgYXJn
MS5pc1N0cmluZygpIHx8IGFyZzEuaXNPYmplY3QoKSkpKQogICAgICAgICByZXR1cm4ganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShleGVjKTsKLSAgICBpZiAoKGFy
Z3NDb3VudCA9PSAxICYmIChhcmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNP
YmplY3QoYXJnMCktPmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpKSkgfHwgKGFyZ3NDb3Vu
dCA9PSAyICYmIChhcmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
YXJnMCktPmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpKSkpCisgICAgaWYgKChhcmdzQ291
bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCAoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0
KGFyZzApLT5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSkgfHwgKGFyZ3NDb3VudCA9PSAy
ICYmIChhcmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCkt
PmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkpKSkKICAgICAgICAgcmV0dXJuIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIoZXhlYyk7CiAgICAgaWYgKChhcmdz
Q291bnQgPT0gMSAmJiAoYXJnMC5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGFyZzAuaXNTdHJpbmco
KSB8fCBhcmcwLmlzT2JqZWN0KCkpKSkKICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoZXhlYyk7CkBAIC0yNzIwLDExICsyNzIwLDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJu
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoZXhlYyk7CiAgICAg
aWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCBhcmcwLmlzRnVuY3Rpb24o
KSkpKQogICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNShleGVjKTsKLSAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlzTnVsbCgp
IHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKCZKU0RPTVN0
cmluZ0xpc3Q6OnNfaW5mbykpKSkpCisgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5p
c051bGwoKSB8fCAoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0KGFyZzApLT5pbmhlcml0cyhK
U0RPTVN0cmluZ0xpc3Q6OmluZm8oKSkpKSkpCiAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KGV4ZWMpOwogICAgIGlmICgoYXJnc0NvdW50
ID09IDEgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAmJiBpc0pTQXJyYXko
YXJnMCkpKSkpCiAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2Q3KGV4ZWMpOwotICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNP
YmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkp
KQorICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNPYmplY3QoKSAmJiBhc09iamVj
dChhcmcwKS0+aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKSkpCiAgICAgICAgIHJldHVybiBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4KGV4ZWMpOwogICAgIGlm
ICgoYXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNPYmplY3QoKSAmJiBpc0pTQXJyYXkoYXJnMCkp
KSkKICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDkoZXhlYyk7CkBAIC0yODEyLDEwICsyODEyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqQ28KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9i
aiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI4NDIs
MTAgKzI4NDIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI4NTksMTAgKzI4NTksMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6
OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2lu
Zm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CkBAIC0yODc5LDEwICsyODc5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RP
YmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0yODk5
LDEwICsyODk5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25H
ZXRTVkdEb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpT
VGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6
OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoZXhlYywgaW1wbC0+Z2V0U1ZHRG9jdW1lbnQo
ZWMpKSkKQEAgLTI5MTYsMTAgKzI5MTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbnZlcnQxKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpT
VGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
JkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMjkzMywxMCArMjkzMywxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwot
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRl
c3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC0y
OTUwLDEwICsyOTUwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0NChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVz
dE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6Omlu
Zm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6
OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTI5NjcsMTAgKzI5NjcsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ1KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBs
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMjk4NCwxMCArMjk4
NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBv
aW50RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjpp
bmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVl
KSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2Jq
OjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pT
KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihTVkdQcm9wZXJ0
eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC0+bXV0YWJsZVBvaW50RnVuY3Rpb24oKSkp
KTsKQEAgLTI5OTcsMTAgKzI5OTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUu
aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2Jq
Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKIAogICAgIEpTQzo6
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC0+aW1t
dXRhYmxlUG9pbnRGdW5jdGlvbigpKSkpOwpAQCAtMzAxMCwxMCArMzAxMCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2Jq
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAg
aW1wbC0+YmFuYW5hKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTMwMjIsMTAgKzMwMjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KEpTVGVzdE9iajo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtMzA0OCwxMCArMzA0OCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRo
b2QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNf
aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8p
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CkBAIC0zMDY4LDEwICszMDY4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiog
aW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTMwODgsMTAg
KzMwODgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlh
ZGljTm9kZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpT
VGVzdE9iajo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6
OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTMxMDAsNyArMzEwMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Tm9kZSo+IHRhaWw7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoaSkuaW5oZXJpdHMoJkpTTm9kZTo6c19pbmZvKSkKKyAgICAgICAg
aWYgKCFleGVjLT5hcmd1bWVudChpKS5pbmhlcml0cyhKU05vZGU6OmluZm8oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICAgICAgdGFpbC5hcHBlbmQo
dG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KGkpKSk7CiAgICAgfQpAQCAtMzExMSw3ICszMTExLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogdm9pZCBKU1Rlc3RPYmo6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1Rlc3RPYmoqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpAQCAtMzI2Myw3ICszMjYz
LDcgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogCiBUZXN0T2Jq
KiB0b1Rlc3RPYmooSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pID8ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHZh
bHVlKSktPmltcGwoKSA6IDA7CisgICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKEpTVGVzdE9iajo6
aW5mbygpKSA/IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAw
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDExICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwq
KTsKICAgICB+SlNUZXN0T2JqKCk7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC0xMTYsMTIgKzExNiwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE0NiwxMCArMTQ2LDEwIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAg
ICBERUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5j
ZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDE1NDAxMykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDExICsxMDMsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybAogewogICAgIHNpemVfdCBh
cmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgSlNWYWx1ZSBhcmcwKGV4ZWMt
PmFyZ3VtZW50KDApKTsKLSAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlzT2JqZWN0
KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8pKSkp
CisgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0
KGFyZzApLT5pbmhlcml0cyhKU0FycmF5QnVmZmVyOjppbmZvKCkpKSkpCiAgICAgICAgIHJldHVy
biBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKGV4ZWMpOwotICAgIGlmICgoYXJnc0NvdW50ID09IDEg
JiYgKGFyZzAuaXNPYmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoJkpTQXJyYXlC
dWZmZXJWaWV3OjpzX2luZm8pKSkpCisgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5p
c09iamVjdCgpICYmIGFzT2JqZWN0KGFyZzApLT5pbmhlcml0cyhKU0FycmF5QnVmZmVyVmlldzo6
aW5mbygpKSkpKQogICAgICAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihleGVjKTsK
LSAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
YXJnMCktPmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpKSkKKyAgICBpZiAoKGFyZ3NDb3VudCA9
PSAxICYmIChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKEpTQmxv
Yjo6aW5mbygpKSkpKQogICAgICAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhleGVj
KTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpCiAgICAgICAgIHJldHVybiBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM0KGV4ZWMpOwpAQCAtMTI2LDcgKzEyNiw3IEBAIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvcjoKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0o
KSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KQEAgLTE3Myw3ICsxNzMsNyBA
QCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpKU1Rlc3RPdmVyCiB2b2lkIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTk1LDE0ICsxOTUsMTQgQEAgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6fkpTVGVzdE92ZQogYm9vbCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90
PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMsIEJhc2U+KGV4ZWMsICZKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKIGJvb2wgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLCBCYXNlPihleGVjLCAmSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1RhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
OwogfQogCkBAIC0yODAsNyArMjgwLDcgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIAogCiBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogdG9UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycyhKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzX2luZm8pID8ganNDYXN0PEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAw
OworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjppbmZvKCkpID8ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqPihhc09iamVj
dCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycygpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTMwLDEwICsxMzAsMTAgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xB
UkVfSU5GTzsKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9N
Q29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw3ICs2Nyw3IEBAIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnMKIHZv
aWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKLSAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBw
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CkBAIC0xMDgsNyArMTA4LDcgQEAgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpKUwogdm9pZCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xMzAsMTQgKzEzMCwxNCBAQCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6On5KCiBib29sIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
PihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNf
aW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLCBCYXNlPihleGVjLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIGJvb2wg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlRGVzY3JpcHRvcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UsIEJhc2U+
KGV4ZWMsICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VUYWJsZSwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtMjA2LDcgKzIwNiw3IEBA
IEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIHZvaWQgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAgICAgbG9va3VwUHV0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSwg
QmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVRhYmxlLCB0aGlzT2JqZWN0LCBzbG90KTsKIH0KIApAQCAtMjQyLDcgKzI0
Miw3IEBAIEpTVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIHZvaWQgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5n
RmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKQEAgLTMxMyw3ICszMTMsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgCiAKIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IHRvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShKU0M6OkpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U6OnNfaW5mbykgPyBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKKyAgICByZXR1cm4gdmFs
dWUuaW5oZXJpdHMoSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjppbmZvKCkp
ID8ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGFzT2JqZWN0
KHZhbHVlKSktPmltcGwoKSA6IDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJldmlzaW9uIDE1NDAxMykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3LDEx
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKLSAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTEwOSwx
MCArMTA5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKLSAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKICAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEzNywx
MCArMTM3LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVu
dHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNyArOTEsNyBAQCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpKU1Rlc3RU
eXBlZGVmCiB2b2lkIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KQEAg
LTE1OSw3ICsxNTksNyBAQCBKU1Rlc3RUeXBlZGVmczo6SlNUZXN0VHlwZWRlZnMoU3RydWN0dXJl
CiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQogCiBKU09iamVjdCogSlNUZXN0VHlwZWRl
ZnM6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCkBAIC0xODEsMTQgKzE4MSwxNCBAQCBKU1Rlc3RUeXBlZGVmczo6fkpTVGVzdFR5
cGVkZWZzKCkKIGJvb2wgSlNUZXN0VHlwZWRlZnM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3RUeXBlZGVmcyo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rl
c3RUeXBlZGVmcywgQmFzZT4oZXhlYywgJkpTVGVzdFR5cGVkZWZzVGFibGUsIHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIGJvb2wgSlNUZXN0VHlwZWRlZnM6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsK
ICAgICBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+
KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RUeXBlZGVmcywgQmFz
ZT4oZXhlYywgJkpTVGVzdFR5cGVkZWZzVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7CiB9CiAKQEAgLTI3MCw3ICsyNzAsNyBAQCBKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3IoRXhlY1N0CiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1Rlc3RUeXBlZGVmcyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGxvb2t1cFB1dDxKU1Rlc3RUeXBl
ZGVmcywgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgJkpTVGVzdFR5cGVkZWZzVGFi
bGUsIHRoaXNPYmplY3QsIHNsb3QpOwogfQogCkBAIC0zNTgsMTAgKzM1OCwxMCBAQCBKU1ZhbHVl
IEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3RvcihFCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0VHlwZWRlZnM6OnNfaW5mbykpCisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0VHlwZWRlZnM6OmluZm8oKSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0VHlwZWRlZnM6
OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBUZXN0VHlwZWRlZnMqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0VHlwZWRlZnMqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogCiAgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKQEAgLTM4MiwxMCArMzgyLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvdyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdFR5cGVkZWZzOjpzX2luZm8p
KQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RUeXBlZGVm
cyogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdFR5
cGVkZWZzOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXBsID0gc3Rh
dGljX2Nhc3Q8VGVzdFR5cGVkZWZzKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC00MjMsMTAgKzQyMywx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoU2VxdWVuY2VBcmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZK
U1Rlc3RUeXBlZGVmczo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rl
c3RUeXBlZGVmczo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRl
ZnMqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsICZKU1Rlc3RUeXBlZGVmczo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIFRl
c3RUeXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RUeXBlZGVmcyo+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwpAQCAtNDQxLDEwICs0NDEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVBcnJheUFyZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoJkpTVGVzdFR5cGVkZWZzOjpzX2luZm8pKQorICAgIGlmICghdGhpc1Zh
bHVlLmluaGVyaXRzKEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpz
Q2FzdDxKU1Rlc3RUeXBlZGVmcyo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdFR5cGVkZWZzOjpzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0VHlwZWRlZnM6
OmluZm8oKSk7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFR5cGVk
ZWZzKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC00NTgsMTAgKzQ1OCwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
LSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0VHlwZWRlZnM6OnNfaW5mbykpCisg
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoSlNUZXN0VHlwZWRlZnM6OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0VHlwZWRl
ZnM6OnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBUZXN0VHlwZWRlZnMqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0VHlwZWRlZnMqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKQEAgLTQ5NSwxMCArNDk1LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBv
aW50RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RUeXBlZGVmczo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RU
eXBlZGVmczo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRlZnMq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsICZKU1Rlc3RUeXBlZGVmczo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIFRlc3RU
eXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RUeXBlZGVmcyo+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50
Pjo6Y3JlYXRlKGltcGwtPmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpKTsKQEAgLTUwOCwxMCAr
NTA4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0
cmluZ0FycmF5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RUeXBlZGVmczo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhK
U1Rlc3RUeXBlZGVmczo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0VHlw
ZWRlZnMqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RUeXBlZGVmczo6c19pbmZvKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAg
IFRlc3RUeXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RUeXBlZGVmcyo+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwpAQCAtNTI4LDEwICs1MjgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RUeXBlZAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbjIoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RUeXBlZGVmczo6c19pbmZvKSkKKyAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cyhKU1Rlc3RUeXBlZGVmczo6aW5mbygpKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RUeXBlZGVmczo6c19p
bmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5
cGVkZWZzOjppbmZvKCkpOwogICAgIFRlc3RUeXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRl
c3RUeXBlZGVmcyo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtNTQ4LDEwICs1NDgsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdFR5cGVkZWZz
OjpzX2luZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVzdFR5cGVkZWZzOjpp
bmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
JkpTVGVzdFR5cGVkZWZzOjpzX2luZm8pOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgVGVzdFR5cGVkZWZzKiBp
bXBsID0gc3RhdGljX2Nhc3Q8VGVzdFR5cGVkZWZzKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbXBsLT5tZXRob2RXaXRoRXhjZXB0aW9uKGVj
KTsKQEAgLTYyMiw3ICs2MjIsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgCiAKIFRlc3RUeXBlZGVmcyogdG9UZXN0VHlwZWRlZnMoSlNDOjpKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0VHlwZWRlZnM6OnNfaW5mbykg
PyBqc0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwor
ICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU1Rlc3RUeXBlZGVmczo6aW5mbygpKSA/IGpzQ2Fz
dDxKU1Rlc3RUeXBlZGVmcyo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOwogICAgIH5KU1Rlc3RUeXBlZGVmcygpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtMTAzLDEyICsx
MDMsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMzMsMTAg
KzEzMywxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CisgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxNTQwMTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRl
KiBleAogdm9pZCBSdW50aW1lQXJyYXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQmluZGluZ3M6
OkFycmF5KiBhcnJheSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAg
ICAgbV9hcnJheSA9IGFycmF5OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAg
IAogICAgIEJpbmRpbmdzOjpBcnJheSogZ2V0Q29uY3JldGVBcnJheSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXJyYXk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERF
Q0xBUkVfSU5GTzsKIAogICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlUHJvdG90eXBl
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewpAQCAtNzUs
NyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbywgQXJyYXlDbGFzcyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpLCBBcnJheUNsYXNzKTsKICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCBSdW50aW1lTWV0aG9kOjpSdW50aW1lTWV0aG9kKEpTR2xvYmFs
T2JqCiB2b2lkIFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3Ry
aW5nJiBpZGVudCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgaWRlbnQpOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkp
OwogfQogCiBKU1ZhbHVlIFJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBK
U1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpCkBAIC05NSwxNCArOTUsMTQgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIFJlZlB0cjxJbnN0YW5jZT4g
aW5zdGFuY2U7CiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKLSAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7
CisgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhSdW50aW1lT2JqZWN0OjppbmZvKCkpKSB7CiAg
ICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxSdW50aW1l
T2JqZWN0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgICAgIGluc3RhbmNlID0gcnVudGlt
ZU9iamVjdC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwogICAgICAgICBpZiAoIWluc3RhbmNlKSAK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUnVudGltZU9iamVjdDo6dGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYykpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIENhbGxp
bmcgYSBydW50aW1lIG9iamVjdCBvZiBhIHBsdWdpbiBlbGVtZW50PwotICAgICAgICBpZiAodGhp
c1ZhbHVlLmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7CisgICAgICAgIGlmICh0
aGlzVmFsdWUuaW5oZXJpdHMoSlNIVE1MRWxlbWVudDo6aW5mbygpKSkgewogICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBqc0Nhc3Q8SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpLT5pbXBsKCk7CiAgICAgICAgICAgICBpbnN0YW5jZSA9IHBsdWdpbkluc3RhbmNl
KGVsZW1lbnQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9t
ZXRob2QuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAg
ICAgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0K
IAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsK
IAogICAgIHN0YXRpYyBGdW5jdGlvblByb3RvdHlwZSogY3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewpAQCAtNTUsNyArNTUsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBSdW50aW1lT2JqZWN0
OjpSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosCiB2b2lkIFJ1bnRpbWVPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAogdm9pZCBSdW50aW1lT2Jq
ZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTI1Myw3ICsyNTMsNyBAQCBKU1ZhbHVlIFJ1
bnRpbWVPYmplY3Q6OmRlZmF1bHRWYWx1ZShjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBB
U1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKTsK
KyAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKFJ1bnRpbWVPYmplY3Q6OmluZm8o
KSkpOwogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9i
amVjdCo+KGV4ZWMtPmNhbGxlZSgpKS0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKICAgICBpbnN0
YW5jZS0+YmVnaW4oKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VEZWZh
dWx0TWV0aG9kKGV4ZWMpOwpAQCAtMjc4LDcgKzI3OCw3IEBAIENhbGxUeXBlIFJ1bnRpbWVPYmpl
Y3Q6OmdldENhbGxEYXRhKEpTQ2UKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxSdW50aW1lQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0
KiBjb25zdHJ1Y3RvciA9IGV4ZWMtPmNhbGxlZSgpOwotICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+
aW5oZXJpdHMoJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbykpOworICAgIEFTU0VSVChjb25zdHJ1Y3Rv
ci0+aW5oZXJpdHMoUnVudGltZU9iamVjdDo6aW5mbygpKSk7CiAgICAgUmVmUHRyPEluc3RhbmNl
PiBpbnN0YW5jZShzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpLT5n
ZXRJbnRlcm5hbEluc3RhbmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwogICAgIEFyZ0xp
c3QgYXJncyhleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5o
CShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgSlNPYmplY3QqIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKEV4ZWNTdGF0ZSopOwogCi0gICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAg
c3RhdGljIE9iamVjdFByb3RvdHlwZSogY3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKIHByb3Rl
Y3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBDUnVudGltZU9iamVjdDo6
Q1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlCiB2b2lkIENSdW50aW1lT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKIENJbnN0YW5jZSogQ1J1bnRpbWVPYmpl
Y3Q6OmdldEludGVybmFsQ0luc3RhbmNlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9jL0NSdW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2MvQ1J1bnRpbWVPYmplY3QuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTEgKzUy
LDExIEBAIHB1YmxpYzoKIAogICAgIENJbnN0YW5jZSogZ2V0SW50ZXJuYWxDSW5zdGFuY2UoKSBj
b25zdDsKIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVf
SU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZp
c2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDEwICsxMjMsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiBwcml2YXRlOgogICAgIENSdW50
aW1lTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCkBAIC0xMzcsNyArMTM3LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1lKQog
ICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwotICAgICAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgfQogCiB9OwpAQCAtMTUyLDcgKzE1Miw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjpn
ZXRNZXRob2QoRXhlY1N0YXRlKiAKIAogSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCiB7Ci0gICAgaWYg
KCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHMoJkNSdW50aW1lTWV0aG9kOjpzX2lu
Zm8pKQorICAgIGlmICghYXNPYmplY3QocnVudGltZU1ldGhvZCktPmluaGVyaXRzKENSdW50aW1l
TWV0aG9kOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBvbiBw
bHVnLWluIG9iamVjdC4iKSk7CiAKICAgICBDTWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxD
TWV0aG9kKj4ocnVudGltZU1ldGhvZC0+bWV0aG9kKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHZv
aWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKICAgICAgICAgTlVMTF9UT19O
UFZBUklBTlQoKnJlc3VsdCk7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CiAg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIGlmIChv
YmplY3QtPmNsYXNzSW5mbygpID09ICZDUnVudGltZU9iamVjdDo6c19pbmZvKSB7CisgICAgICAg
IGlmIChvYmplY3QtPmNsYXNzSW5mbygpID09IENSdW50aW1lT2JqZWN0OjppbmZvKCkpIHsKICAg
ICAgICAgICAgIENSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Q1J1
bnRpbWVPYmplY3QqPihvYmplY3QpOwogICAgICAgICAgICAgQ0luc3RhbmNlKiBpbnN0YW5jZSA9
IHJ1bnRpbWVPYmplY3QtPmdldEludGVybmFsQ0luc3RhbmNlKCk7CiAgICAgICAgICAgICBpZiAo
aW5zdGFuY2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL09iakNSdW50aW1l
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvT2JqQ1J1
bnRpbWVPYmplY3QuaAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDEx
IEBAIHB1YmxpYzoKIAogICAgIE9iamNJbnN0YW5jZSogZ2V0SW50ZXJuYWxPYmpDSW5zdGFuY2Uo
KSBjb25zdDsKIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xB
UkVfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0K
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFu
Y2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5tbQkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJF
X0lORk87CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBSdW50aW1lTWV0aG9kIEJhc2U7CkBAIC0y
MDksNyArMjA5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIG5hbWUpOwotICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogfTsKIApAQCAtMjIzLDcgKzIyMyw3IEBA
IEpTVmFsdWUgT2JqY0luc3RhbmNlOjpnZXRNZXRob2QoRXhlY1N0YXQKIAogSlNWYWx1ZSBPYmpj
SW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1
bnRpbWVNZXRob2QpCiB7Ci0gICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJp
dHMoJk9iakNSdW50aW1lTWV0aG9kOjpzX2luZm8pKQorICAgIGlmICghYXNPYmplY3QocnVudGlt
ZU1ldGhvZCktPmluaGVyaXRzKE9iakNSdW50aW1lTWV0aG9kOjppbmZvKCkpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHQgdG8g
aW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBvbiBwbHVnLWluIG9iamVjdC4iKSk7CiAKICAgICBP
YmpjTWV0aG9kICptZXRob2QgPSBzdGF0aWNfY2FzdDxPYmpjTWV0aG9kKj4ocnVudGltZU1ldGhv
ZC0+bWV0aG9kKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gZmFsbGJhY2tPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZPOwogCiAgICAgY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2l0ZW07IH0KIApAQCAtMTE0LDcgKzEx
NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNyArMjA1LDcgQEAg
dm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlc3Ryb3koSlNDZQogdm9pZCBPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsK
IH0KIAogYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQoSlNDZWxsKiwK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmpDRmFsbGJhY2tPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZPYmpDUnVudGltZU9i
amVjdDo6c19pbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhPYmpDUnVudGltZU9i
amVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEx
ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIERFQ0xBUkVfSU5GTzsKIAog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6CkBAIC0xNTIsNyArMTUyLDcgQEAgUXRJbnN0YW5jZSogUXRJbnN0YW5jZTo6Z2V0SW5zdGFu
Y2UoSlNPYgogewogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
IW9iamVjdC0+aW5oZXJpdHMoJlF0UnVudGltZU9iamVjdDo6c19pbmZvKSkKKyAgICBpZiAoIW9i
amVjdC0+aW5oZXJpdHMoUXRSdW50aW1lT2JqZWN0OjppbmZvKCkpKQogICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KHN0YXRpY19jYXN0PFJ1bnRp
bWVPYmplY3QqPihvYmplY3QpLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24g
MTU0MDEzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgYXNz
aWduVG9IVE1MSW1hZ2VFbGVtZQogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gOjp0b0pTKG9i
amVjdEFyZyk7CiAKLSAgICBpZiAoIWpzT2JqZWN0LT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVt
ZW50OjpzX2luZm8pKQorICAgIGlmICghanNPYmplY3QtPmluaGVyaXRzKEpTSFRNTEltYWdlRWxl
bWVudDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCiAgICAgUVZhcmlhbnQmIGRhdGEgPSAqc3RhdGljX2Nhc3Q8UVZhcmlhbnQqPihKU09i
amVjdEdldFByaXZhdGUob2JqZWN0KSk7CkBAIC0yMTQsNyArMjE0LDcgQEAgUVZhcmlhbnQgUXRQ
aXhtYXBSdW50aW1lOjp0b1F0KEpTQ29udGV4dAogICAgIH0KIAogICAgIEpTT2JqZWN0KiBqc09i
amVjdCA9IDo6dG9KUyhvYmopOwotICAgIGlmICghanNPYmplY3QtPmluaGVyaXRzKCZKU0hUTUxJ
bWFnZUVsZW1lbnQ6OnNfaW5mbykpCisgICAgaWYgKCFqc09iamVjdC0+aW5oZXJpdHMoSlNIVE1M
SW1hZ2VFbGVtZW50OjppbmZvKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlWYXJpYW50Rm9ySGlu
dChoaW50KTsKIAogICAgIEpTSFRNTEltYWdlRWxlbWVudCogZWxlbWVudEpTV3JhcHBlciA9IHN0
YXRpY19jYXN0PEpTSFRNTEltYWdlRWxlbWVudCo+KGpzT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4
LDIyICsxNDgsMjIgQEAgdm9pZCByZWdpc3RlckN1c3RvbVR5cGUoaW50IHF0TWV0YVR5cGVJZAog
CiBzdGF0aWMgYm9vbCBpc0pTVWludDhBcnJheShKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAg
cmV0dXJuIHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJkpTVWludDhBcnJheTo6c19pbmZvKTsKKyAg
ICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0cyhKU1VpbnQ4QXJyYXk6OmluZm8oKSk7CiB9
CiAKIHN0YXRpYyBib29sIGlzSlNBcnJheShKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgcmV0
dXJuIHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbyk7CisgICAgcmV0dXJu
IHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoSlNBcnJheTo6aW5mbygpKTsKIH0KIAogc3RhdGljIGJv
b2wgaXNKU0RhdGUoSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIHJldHVybiB0b0pTKG9iamVj
dCktPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbyk7CisgICAgcmV0dXJuIHRvSlMob2Jq
ZWN0KS0+aW5oZXJpdHMoRGF0ZUluc3RhbmNlOjppbmZvKCkpOwogfQogCiBzdGF0aWMgYm9vbCBp
c1F0T2JqZWN0KEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKLSAgICByZXR1cm4gdG9KUyhvYmplY3Qp
LT5pbmhlcml0cygmUnVudGltZU9iamVjdDo6c19pbmZvKTsKKyAgICByZXR1cm4gdG9KUyhvYmpl
Y3QpLT5pbmhlcml0cyhSdW50aW1lT2JqZWN0OjppbmZvKCkpOwogfQogCiBzdGF0aWMgSlNSZWFs
VHlwZSB2YWx1ZVJlYWxUeXBlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC0yMDMsMTEgKzIwMywxMSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiB1bndyYXBCb3hlZFByaW1pdGl2ZShKCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhjb250ZXh0KTsKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSB0b0pTKG9iaik7Ci0gICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJk51bWJl
ck9iamVjdDo6c19pbmZvKSkKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0cyhOdW1iZXJPYmplY3Q6
OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0b1JlZihleGVjLCBqc051bWJlcihvYmplY3QtPnRv
TnVtYmVyKGV4ZWMpKSk7Ci0gICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6
c19pbmZvKSkKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0cyhTdHJpbmdPYmplY3Q6OmluZm8oKSkp
CiAgICAgICAgIHJldHVybiB0b1JlZihleGVjLCBvYmplY3QtPnRvU3RyaW5nKGV4ZWMpKTsKLSAg
ICBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkKKyAgICBpZiAo
b2JqZWN0LT5pbmhlcml0cyhCb29sZWFuT2JqZWN0OjppbmZvKCkpKQogICAgICAgICByZXR1cm4g
dG9SZWYoZXhlYywgb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKSk7CiAgICAgcmV0dXJuIHZhbHVl
OwogfQpAQCAtNzQ5LDcgKzc0OSw3IEBAIEpTVmFsdWVSZWYgY29udmVydFFWYXJpYW50VG9WYWx1
ZShKU0NvbnQKICAgICAgICAgcmV0dXJuIFF0UGl4bWFwUnVudGltZTo6dG9KUyhjb250ZXh0LCB2
YXJpYW50LCBleGNlcHRpb24pOwogCiAgICAgaWYgKGN1c3RvbVJ1bnRpbWVDb252ZXJzaW9ucygp
LT5jb250YWlucyh0eXBlKSkgewotICAgICAgICBpZiAoIXJvb3QtPmdsb2JhbE9iamVjdCgpLT5p
bmhlcml0cygmSlNET01XaW5kb3c6OnNfaW5mbykpCisgICAgICAgIGlmICghcm9vdC0+Z2xvYmFs
T2JqZWN0KCktPmluaGVyaXRzKEpTRE9NV2luZG93OjppbmZvKCkpKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCiAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IChzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHJvb3QtPmdsb2JhbE9iamVjdCgp
KSktPmltcGwoKS0+ZG9jdW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAJKHJldmlzaW9u
IDE1NDAxMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QTWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBKU05QTWV0aG9k
OjpKU05QTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnCiB2b2lkIEpTTlBNZXRob2Q6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtLCBuYW1lKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCkBAIC02NCw3ICs2NCw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKIAogICAgIC8vIENoZWNrIGlmIHdlJ3JlIGNh
bGxpbmcgYSBtZXRob2Qgb24gdGhlIHBsdWctaW4gc2NyaXB0IG9iamVjdC4KLSAgICBpZiAodGhp
c1ZhbHVlLmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7CisgICAgaWYgKHRoaXNW
YWx1ZS5pbmhlcml0cyhKU0hUTUxFbGVtZW50OjppbmZvKCkpKSB7CiAgICAgICAgIEpTSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAKICAgICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgc2NyaXB0IG9iamVjdCBmcm9t
IHRoZSBlbGVtZW50CkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGwKICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IHNjcmlwdE9iamVjdDsKICAg
ICB9CiAKLSAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZKU05QT2JqZWN0OjpzX2luZm8pKSB7
CisgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhKU05QT2JqZWN0OjppbmZvKCkpKSB7CiAgICAg
ICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBzdGF0aWNfY2FzdDxKU05QT2JqZWN0Kj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7CiAKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05Q
T2JqZWN0LT5jYWxsTWV0aG9kKGV4ZWMsIGpzTlBNZXRob2QtPm5wSWRlbnRpZmllcigpKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhv
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QTWV0aG9kLmgJKHJldmlzaW9uIDE1NDAxMykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbWV0aG9kOwogICAgIH0KIAot
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgREVDTEFSRV9JTkZP
OwogCiAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbnBJ
ZGVudGlmaWVyOyB9CiAKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZTogICAgCiAKICAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBl
IGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIEpTTlBPYmplY3Q6OkpTTlBPYmplY3QoSlNHbG9iYWxPYmplY3QqIGcKIHZvaWQg
SlNOUE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gTlBKU09iamVjdCBpbnNpZGUgYSBKU05Q
T2JqZWN0LgogICAgIEFTU0VSVCghTlBKU09iamVjdDo6aXNOUEpTT2JqZWN0KG1fbnBPYmplY3Qp
KTsKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBKU05QT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHZvaWQgSlNOUE9iamVjdDo6aW52YWxpZGF0ZSgpCiB7CiAgICAgQVNTRVJUKG1fbnBPYmpl
Y3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCBpbmZvKCkpOwogCiAgICAgcmVsZWFzZU5Q
T2JqZWN0KG1fbnBPYmplY3QpOwogICAgIG1fbnBPYmplY3QgPSAwOwpAQCAtMTA2LDcgKzEwNiw3
IEBAIE5QT2JqZWN0KiBKU05QT2JqZWN0OjpsZWFrTlBPYmplY3QoKQogCiBKU1ZhbHVlIEpTTlBP
YmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBOUElkZW50aWZpZXIgbWV0aG9kTmFt
ZSkKIHsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgaW5mbygpKTsKICAgICBpZiAoIW1fbnBP
YmplY3QpCiAgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKIApA
QCAtMTQ2LDcgKzE0Niw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3Rh
dGUKIAogSlNDOjpKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxPYmplY3QoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsIGluZm8oKSk7CiAgICAgaWYgKCFt
X25wT2JqZWN0KQogICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7
CiAKQEAgLTE4Niw3ICsxODYsNyBAQCBKU0M6OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVj
dChKU0M6CiAKIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgaW5mbygpKTsKICAgICBpZiAoIW1f
bnBPYmplY3QpCiAgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsK
IApAQCAtMjIzLDcgKzIyMyw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9y
KEV4ZWMKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxOUEpTT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+Y2FsbGVl
KCk7Ci0gICAgQVNTRVJUKG9iamVjdC0+aW5oZXJpdHMoJkpTTlBPYmplY3Q6OnNfaW5mbykpOwor
ICAgIEFTU0VSVChvYmplY3QtPmluaGVyaXRzKEpTTlBPYmplY3Q6OmluZm8oKSkpOwogCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdGF0aWNfY2FzdDxKU05QT2JqZWN0Kj4ob2JqZWN0KS0+
Y2FsbE9iamVjdChleGVjKSk7CiB9CkBAIC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogSlNDOjpDYWxsVHlwZSBKU05QT2JqZWN0OjpnZXRD
YWxsRGF0YShKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAg
ICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBp
ZiAoIXRoaXNPYmplY3QtPm1fbnBPYmplY3QgfHwgIXRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9j
bGFzcy0+aW52b2tlRGVmYXVsdCkKICAgICAgICAgcmV0dXJuIENhbGxUeXBlTm9uZTsKIApAQCAt
MjQyLDcgKzI0Miw3IEBAIEpTQzo6Q2FsbFR5cGUgSlNOUE9iamVjdDo6Z2V0Q2FsbERhdGEoSlMK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhl
Yy0+Y2FsbGVlKCk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5pbmhlcml0cygmSlNOUE9iamVj
dDo6c19pbmZvKSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5pbmhlcml0cyhKU05QT2JqZWN0
OjppbmZvKCkpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RhdGljX2Nhc3Q8SlNO
UE9iamVjdCo+KGNvbnN0cnVjdG9yKS0+Y2FsbENvbnN0cnVjdG9yKGV4ZWMpKTsKIH0KQEAgLTI1
MCw3ICsyNTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiBD
b25zdHJ1Y3RUeXBlIEpTTlBPYmplY3Q6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxsLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewogICAgIEpTTlBPYmplY3QqIHRoaXNPYmpl
Y3QgPSBKU0M6OmpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0IHx8ICF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdCkKICAgICAg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOb25lOwogCkBAIC0yNjEsNyArMjYxLDcgQEAgQ29uc3Ry
dWN0VHlwZSBKU05QT2JqZWN0OjpnZXRDb25zdHJ1Y3REYQogYm9vbCBKU05QT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOUE9iamVj
dCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihvYmplY3QpOwotICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmICghdGhpc09i
amVjdC0+bV9ucE9iamVjdCkgewogICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVj
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkyLDcgKzI5Miw3IEBAIGJvb2wgSlNOUE9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2IKIGJvb2wgSlNOUE9iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewog
ICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVjdCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYg
KCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0KSB7CiAgICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vy
cm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjcsNyArMzI3LDcgQEAgYm9v
bCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogdm9pZCBKU05QT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgSlNOUE9iamVjdCog
dGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoIXRoaXNPYmplY3Qt
Pm1fbnBPYmplY3QpIHsKICAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTM3NSw3ICszNzUsNyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChKCiAKIGJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzLCBpbmZvKCkpOwogICAgIGlmICghbV9ucE9iamVjdCkgewogICAgICAgICB0
aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDA3LDcgKzQwNyw3IEBAIGJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQK
IHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51
bWVyYXRpb25Nb2RlKQogewogICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNO
UE9iamVjdCo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0KSB7CiAgICAgICAgIHRo
cm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CkBAIC00NTUsNyAr
NDU1LDcgQEAgdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogSlNWYWx1
ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNOUE9iamVjdCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEpTTlBPYmplY3QqPihhc09iamVjdChzbG90QmFzZSkpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iaiwgJnNfaW5mbyk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCBpbmZvKCkpOwogICAgIAogICAgIGlmICghdGhp
c09iai0+bV9ucE9iamVjdCkKICAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9y
KGV4ZWMpOwpAQCAtNDkxLDcgKzQ5MSw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlH
ZXR0ZXIoRXhlY1MKIEpTVmFsdWUgSlNOUE9iamVjdDo6bWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAg
ICBKU05QT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOUE9iamVjdCo+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCAmc19p
bmZvKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmosIGluZm8oKSk7CiAg
ICAgCiAgICAgaWYgKCF0aGlzT2JqLT5tX25wT2JqZWN0KQogICAgICAgICByZXR1cm4gdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9uIDE1
NDAxMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIEpT
Qzo6SlNWYWx1ZSBjYWxsT2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7CiAgICAgSlNDOjpKU1ZhbHVl
IGNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiAKICAgICBOUE9iamVjdCog
bnBPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX25wT2JqZWN0OyB9CiAKQEAgLTc5LDcgKzc5LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlND
OjpDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDEzKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
TlBKU09iamVjdCogTlBKU09iamVjdDo6Y3JlYXRlKFZNJiB2bSwgTlBSdW50aW1lT2JqZWN0TWFw
KiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09iamVjdCkKIHsKICAgICAvLyBXZSBzaG91bGQgbmV2
ZXIgaGF2ZSBhIEpTTlBPYmplY3QgaW5zaWRlIGFuIE5QSlNPYmplY3QuCi0gICAgQVNTRVJUKCFq
c09iamVjdC0+aW5oZXJpdHMoJkpTTlBPYmplY3Q6OnNfaW5mbykpOworICAgIEFTU0VSVCghanNP
YmplY3QtPmluaGVyaXRzKEpTTlBPYmplY3Q6OmluZm8oKSkpOwogCiAgICAgTlBKU09iamVjdCog
bnBKU09iamVjdCA9IHRvTlBKU09iamVjdChjcmVhdGVOUE9iamVjdCgwLCBucENsYXNzKCkpKTsK
ICAgICBucEpTT2JqZWN0LT5pbml0aWFsaXplKHZtLCBvYmplY3RNYXAsIGpzT2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OlBsdWdpblByb3RlY3Rvcjo6flBsCiBOUE9iamVjdCogTlBSdW50aW1lT2JqZWN0TWFw
OjpnZXRPckNyZWF0ZU5QT2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIGpzT2JqZWN0KQogewogICAg
IC8vIElmIHRoaXMgaXMgYSBKU05QT2JqZWN0LCB3ZSBjYW4ganVzdCBnZXQgaXRzIHVuZGVybHlp
bmcgTlBPYmplY3QuCi0gICAgaWYgKGpzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSAmSlNOUE9iamVj
dDo6c19pbmZvKSB7CisgICAgaWYgKGpzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBKU05QT2JqZWN0
OjppbmZvKCkpIHsKICAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IHN0YXRpY19jYXN0
PEpTTlBPYmplY3QqPihqc09iamVjdCk7CiAgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IGpz
TlBPYmplY3QtPm5wT2JqZWN0KCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxNTQwMTMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzAsNyArNjcwLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9y
V29ybGQoSQogCiBTdHJpbmcgV2ViRnJhbWU6OmNvdW50ZXJWYWx1ZShKU09iamVjdFJlZiBlbGVt
ZW50KQogewotICAgIGlmICghdG9KUyhlbGVtZW50KS0+aW5oZXJpdHMoJkpTRWxlbWVudDo6c19p
bmZvKSkKKyAgICBpZiAoIXRvSlMoZWxlbWVudCktPmluaGVyaXRzKEpTRWxlbWVudDo6aW5mbygp
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgcmV0dXJuIGNvdW50ZXJWYWx1ZUZv
ckVsZW1lbnQoc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPmltcGwoKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwMzApCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wOC0x
MyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZvbzo6c19pbmZv
IHNob3VsZCBiZSBGb286OmluZm8oKSwgc28gdGhhdCB5b3UgY2FuIGNoYW5nZSBob3cgdGhlIHNf
aW5mbyBpcyBhY3R1YWxseSBsaW5rZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTc3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRPYmplY3RJRCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmV0YWluTG9jYWxPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbGVhc2VMb2NhbE9iamVj
dCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAg
KFdlYktpdDo6UHJveHlSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OlByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVudGlt
ZU9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06
CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6CisKIDIwMTMtMDgtMTMgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3RlbHkgaG9zdGVkIHBs
dWdpbnMgZG9u4oCZdCB3b3JrIGluIHdpbmRvdy1zZXJ2ZXItaG9zdGVkIFdlYktpdDEgdmlld3MK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDE1NDAxMykKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI0Miw3ICsxMjQyLDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogCiBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIHBsdWdpbkluc3RhbmNlUHJveHksIEpTT2JqZWN0
KiBvYmplY3QsIHVpbnQ2NF90JiBvYmplY3RJRCkKIHsKLSAgICBpZiAob2JqZWN0LT5jbGFzc0lu
Zm8oKSAhPSAmUHJveHlSdW50aW1lT2JqZWN0OjpzX2luZm8pCisgICAgaWYgKG9iamVjdC0+Y2xh
c3NJbmZvKCkgIT0gUHJveHlSdW50aW1lT2JqZWN0OjppbmZvKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIFByb3h5UnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IHN0YXRpY19j
YXN0PFByb3h5UnVudGltZU9iamVjdCo+KG9iamVjdCk7CkBAIC0xNDAxLDcgKzE0MDEsNyBAQCB2
b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzCiAKIHZvaWQgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpyZXRhaW5Mb2NhbE9iamVjdChKU0M6OkpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmluaGVyaXRzKCZQcm94eVJ1
bnRpbWVPYmplY3Q6OnNfaW5mbykpCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVl
LmluaGVyaXRzKFByb3h5UnVudGltZU9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9sb2NhbE9iamVjdHMucmV0YWluKGFzT2JqZWN0KHZhbHVlKSk7CkBAIC0xNDA5LDcg
KzE0MDksNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmV0YWluCiAKIHZv
aWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZWxlYXNlTG9jYWxPYmplY3QoSlNDOjpK
U1ZhbHVlIHZhbHVlKQogewotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pbmhl
cml0cygmUHJveHlSdW50aW1lT2JqZWN0OjpzX2luZm8pKQorICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSB8fCB2YWx1ZS5pbmhlcml0cyhQcm94eVJ1bnRpbWVPYmplY3Q6OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fbG9jYWxPYmplY3RzLnJlbGVhc2UoYXNPYmplY3QodmFsdWUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJ
bnN0YW5jZS5tbQkocmV2aXNpb24gMTU0MDEzKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAg
ICBERUNMQVJFX0lORk87CiAKIHByaXZhdGU6CiAgICAgUHJveHlSdW50aW1lTWV0aG9kKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCaW5kaW5nczo6
TWV0aG9kKiBtZXRob2QpCkBAIC0yMDYsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHsKICAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwotICAgICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOworICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogfTsK
IApAQCAtMjIwLDcgKzIyMCw3IEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9kKEpT
Qzo6RXgKIAogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBl
eGVjLCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCiB7Ci0gICAgaWYgKCFhc09i
amVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHMoJlByb3h5UnVudGltZU1ldGhvZDo6c19pbmZv
KSkKKyAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0cyhQcm94eVJ1bnRp
bWVNZXRob2Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9u
IHBsdWctaW4gb2JqZWN0LiIpKTsKIAogICAgIFByb3h5TWV0aG9kKiBtZXRob2QgPSBzdGF0aWNf
Y2FzdDxQcm94eU1ldGhvZCo+KHJ1bnRpbWVNZXRob2QtPm1ldGhvZCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVj
dC5oCShyZXZpc2lvbiAxNTQwMTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eVJ1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDEwIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBERUNMQVJFX0lORk87CiBw
cml2YXRlOgogICAgIFByb3h5UnVudGltZU9iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8UHJveHlJbnN0YW5jZT4p
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCopOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTU0MDEzKQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MDMw
LDcgKzUwMzAsNyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvCiAg
ICAgfQogICAgIGlmIChqc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGpzVmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OnNfaW5mbykpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMo
RGF0ZUluc3RhbmNlOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBEYXRlSW5zdGFuY2UqIGRhdGUg
PSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihvYmplY3QpOwogICAgICAgICAgICAgZG91Ymxl
IG1zID0gZGF0ZS0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICAgICAgICAgIGlmICghc3RkOjppc25h
bihtcykpIHsKQEAgLTUwNDAsNyArNTA0MCw3IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlw
dG9yKiBhZURlc2NGcm8KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnRE
ZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoRGVzY3JpcHRvclR5cGU6dHlwZUxvbmdEYXRlVGltZSBi
eXRlczombGR0IGxlbmd0aDpzaXplb2YobGR0KV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkgewor
ICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkpIHsKICAg
ICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxKU09iamVjdCo+LCB2aXNpdGVk
RWxlbXMsICgpKTsKICAgICAgICAgICAgIGlmICghdmlzaXRlZEVsZW1zLmNvbnRhaW5zKG9iamVj
dCkpIHsKICAgICAgICAgICAgICAgICB2aXNpdGVkRWxlbXMuYWRkKG9iamVjdCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDMwKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wOC0xMyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlv
biAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYmVsZW1lbnQu
Y3BwOgorICAgICAgICAoY29udmVydEpTVmFsdWVUb1dlYkVsZW1lbnRWYXJpYW50KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6CisgICAgICAg
IChjb252ZXJ0SlNWYWx1ZVRvTm9kZVZhcmlhbnQpOgorCiAyMDEzLTA4LTExICBBbmRyZWFzIEts
aW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHNvbWUgdGhpbmdzIHRoYXQg
cmV0dXJuIG5ldmVyLW51bGwgcG9pbnRlcnMgcmV0dXJuIHJlZmVyZW5jZXMgaW5zdGVhZC4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NDAxMykKKysr
IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA3MywxMyArMjA3MywxMyBAQCBzdGF0aWMgUVZhcmlhbnQgY29udmVydEpTVmFsdWVUb1dlYkVs
ZW1lCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IDA7CiAgICAgUVZhcmlhbnQgcmV0OwotICAg
IGlmIChvYmplY3QgJiYgb2JqZWN0LT5pbmhlcml0cygmSlNFbGVtZW50OjpzX2luZm8pKSB7Cisg
ICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmluaGVyaXRzKEpTRWxlbWVudDo6aW5mbygpKSkgewog
ICAgICAgICBlbGVtZW50ID0oc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4ob2JqZWN0KSktPmltcGwo
KTsKICAgICAgICAgKmRpc3RhbmNlID0gMDsKICAgICAgICAgLy8gQWxsb3cgb3RoZXIgb2JqZWN0
cyB0byByZWFjaCB0aGlzIG9uZS4gVGhpcyB3b24ndCBjYXVzZSBvdXIgYWxnb3JpdGhtIHRvCiAg
ICAgICAgIC8vIGxvb3Agc2luY2Ugd2hlbiB3ZSBmaW5kIGFuIEVsZW1lbnQgd2UgZG8gbm90IHJl
Y3Vyc2UuCiAgICAgICAgIHZpc2l0ZWRPYmplY3RzLT5yZW1vdmUodG9SZWYob2JqZWN0KSk7Ci0g
ICAgfSBlbHNlIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pbmhlcml0cygmSlNEb2N1bWVudDo6c19p
bmZvKSkgeworICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIG9iamVjdC0+aW5oZXJpdHMoSlNEb2N1
bWVudDo6aW5mbygpKSkgewogICAgICAgICAvLyBUbyBzdXBwb3J0IFRlc3RSdW5uZXJRdDo6bm9k
ZXNGcm9tUmVjdCgpLCB1c2VkIGluIERSVCwgd2UgZG8gYW4gaW1wbGljaXQKICAgICAgICAgLy8g
Y29udmVyc2lvbiBmcm9tICdkb2N1bWVudCcgdG8gdGhlIFFXZWJFbGVtZW50IHJlcHJlc2VudGlu
ZyB0aGUgJ2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCcuCiAgICAgICAgIC8vIFdlIGNhbid0IHNp
bXBseSB1c2UgYSBRVmFyaWFudE1hcCBpbiBub2Rlc0Zyb21SZWN0KCkgYmVjYXVzZSBpdCBjdXJy
ZW50bHkgdGltZXMgb3V0CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24gMTU0
MDEzKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBAQCBXZWJDb3JlOjpO
b2RlKiBRdERSVE5vZGVSdW50aW1lOjpnZXQoY29uCiAKIHN0YXRpYyBRVmFyaWFudCBjb252ZXJ0
SlNWYWx1ZVRvTm9kZVZhcmlhbnQoSlNDOjpKU09iamVjdCogb2JqZWN0LCBpbnQgKmRpc3RhbmNl
LCBIYXNoU2V0PEpTT2JqZWN0UmVmPiopCiB7Ci0gICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+
aW5oZXJpdHMoJkpTTm9kZTo6c19pbmZvKSkKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5p
bmhlcml0cyhKU05vZGU6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAg
IHJldHVybiBRVmFyaWFudDo6ZnJvbVZhbHVlPFFEUlROb2RlPihRdERSVE5vZGVSdW50aW1lOjpj
cmVhdGUoKHN0YXRpY19jYXN0PEpTTm9kZSo+KG9iamVjdCkpLT5pbXBsKCkpKTsKIH0K
</data>
<flag name="review"
          id="230625"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>